Package com.google.visualization.datasource.query.scalarfunction

Source Code of com.google.visualization.datasource.query.scalarfunction.TimeComponentExtractorTest

// Copyright 2009 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.visualization.datasource.query.scalarfunction;

import com.google.common.collect.Lists;
import com.google.visualization.datasource.base.InvalidQueryException;
import com.google.visualization.datasource.datatable.value.DateTimeValue;
import com.google.visualization.datasource.datatable.value.DateValue;
import com.google.visualization.datasource.datatable.value.NumberValue;
import com.google.visualization.datasource.datatable.value.TimeOfDayValue;
import com.google.visualization.datasource.datatable.value.Value;
import com.google.visualization.datasource.datatable.value.ValueType;

import junit.framework.TestCase;

import java.util.List;

/**
* Tests for the TimeComponentExtractor
*
* @author Liron L.
*/
public class TimeComponentExtractorTest extends TestCase {
  private TimeComponentExtractor year =
      TimeComponentExtractor.getInstance(
          TimeComponentExtractor.TimeComponent.YEAR);

  private TimeComponentExtractor month =
      TimeComponentExtractor.getInstance(
          TimeComponentExtractor.TimeComponent.MONTH);

  private TimeComponentExtractor day =
      TimeComponentExtractor.getInstance(
          TimeComponentExtractor.TimeComponent.DAY);

  private TimeComponentExtractor hour =
      TimeComponentExtractor.getInstance(
          TimeComponentExtractor.TimeComponent.HOUR);

  private TimeComponentExtractor minute =
      TimeComponentExtractor.getInstance(
          TimeComponentExtractor.TimeComponent.MINUTE);

  private TimeComponentExtractor second =
      TimeComponentExtractor.getInstance(
          TimeComponentExtractor.TimeComponent.SECOND);

  private TimeComponentExtractor millisecond =
      TimeComponentExtractor.getInstance(
          TimeComponentExtractor.TimeComponent.MILLISECOND);

  private TimeComponentExtractor quarter =
      TimeComponentExtractor.getInstance(
          TimeComponentExtractor.TimeComponent.QUARTER);

  private TimeComponentExtractor dayofweek =
      TimeComponentExtractor.getInstance(
          TimeComponentExtractor.TimeComponent.DAY_OF_WEEK);

  public void testValidateParameters() throws InvalidQueryException {
    List<ValueType> types = Lists.newArrayList(ValueType.DATE);

    // Validate date paremeter.
    year.validateParameters(types);
    month.validateParameters(types);
    day.validateParameters(types);

    // Should throw an exception.
    try {
      second.validateParameters(types);
      fail("Should have thrown a ScalarFunctionException: The second function "
          + "was given a date parameter to validate.");
    } catch (InvalidQueryException e) {
      // Expected behavior.
    }
    // Validate datetime paremeter.
    types = Lists.newArrayList(ValueType.DATETIME);
    year.validateParameters(types);
    month.validateParameters(types);
    day.validateParameters(types);
    hour.validateParameters(types);
    minute.validateParameters(types);
    second.validateParameters(types);
    millisecond.validateParameters(types);

    // Should throw an exception.
    try {
      hour.validateParameters(Lists.newArrayList(ValueType.NUMBER));
      fail("Should have thrown a ScalarFunctionException: The hour function "
          + "was given a number parameter to validate.");
    } catch (InvalidQueryException e) {
      // Expected behavior.
    }

    // Validate timeofday paremeter.
    types = Lists.newArrayList(ValueType.TIMEOFDAY);
    hour.validateParameters(types);
    minute.validateParameters(types);
    second.validateParameters(types);
    millisecond.validateParameters(types);

    // Should throw an exception.
    try {
      year.validateParameters(types);
      fail("Should have thrown a ScalarFunctionException: The year function "
          + "was given a timeofday parameter to validate.");
    } catch (InvalidQueryException e) {
      // Expected behavior.
    }

    // Should throw an exception.
    try {
      quarter.validateParameters(Lists.newArrayList(ValueType.NUMBER));
      fail("Should have thrown a ScalarFunctionException: The quarter "
          + "function was given a number parameter to validate.");
    } catch (InvalidQueryException e) {
      // Expected behavior.
    }

    // Should throw an exception.
    try {
      dayofweek.validateParameters(Lists.newArrayList(ValueType.NUMBER));
      fail("Should have thrown a ScalarFunctionException: The dayofweek "
          + "function was given a number parameter to validate.");
    } catch (InvalidQueryException e) {
      // Expected behavior.
    }

    // Validate datetime paremeter.
    types = Lists.newArrayList(ValueType.DATETIME);
    quarter.validateParameters(types);
    dayofweek.validateParameters(types);

    // Should throw an exception.
    try {
      types.add(ValueType.DATETIME);
      quarter.validateParameters(types);
      fail("Should have thrown a ScalarFunctionException: The quarter "
          + "function was given 2 parameters.");
    } catch (InvalidQueryException e) {
      // Expected behavior.
    }
  }

  public void testEvaluate() {
    List<Value> dateValues =
        Lists.newArrayList((Value) new DateValue(2008, 7, 13));
    assertEquals(new NumberValue(2008), year.evaluate(dateValues));
    assertEquals(new NumberValue(7), month.evaluate(dateValues));
    assertEquals(new NumberValue(13), day.evaluate(dateValues));

    List<Value> dateTimeValues =
        Lists.newArrayList((Value) new DateTimeValue(
            2001, 2, 3, 9, 12, 22, 333));
    assertEquals(new NumberValue(2001), year.evaluate(dateTimeValues));
    assertEquals(new NumberValue(2), month.evaluate(dateTimeValues));
    assertEquals(new NumberValue(3), day.evaluate(dateTimeValues));
    assertEquals(new NumberValue(9), hour.evaluate(dateTimeValues));
    assertEquals(new NumberValue(12), minute.evaluate(dateTimeValues));
    assertEquals(new NumberValue(22), second.evaluate(dateTimeValues));
    assertEquals(new NumberValue(333), millisecond.evaluate(dateTimeValues));

    List<Value> timeOfDayValues =
        Lists.newArrayList((Value) new TimeOfDayValue(23, 22, 21, 20));
    assertEquals(new NumberValue(23), hour.evaluate(timeOfDayValues));
    assertEquals(new NumberValue(22), minute.evaluate(timeOfDayValues));
    assertEquals(new NumberValue(21), second.evaluate(timeOfDayValues));
    assertEquals(new NumberValue(20), millisecond.evaluate(timeOfDayValues));
    timeOfDayValues = Lists.newArrayList((Value) new TimeOfDayValue(9, 12, 22));
    // Tests that milliseconds return 0 when the the TimeOfDayValue is
    // initialized without the milliseconds.
    assertEquals(new NumberValue(0), millisecond.evaluate(timeOfDayValues));

    List<Value> dateValues1 =
        Lists.newArrayList((Value) new DateValue(2008, 1, 13));
    List<Value> dateValues2 =
        Lists.newArrayList((Value) new DateValue(2008, 4, 13));
    List<Value> dateValues3 =
        Lists.newArrayList((Value) new DateValue(2008, 8, 13));
    List<Value> dateValues4 =
        Lists.newArrayList((Value) new DateValue(2008, 11, 13));
    List<Value> dateValues5 =
        Lists.newArrayList((Value) new DateValue(2008, 5, 13));

    assertEquals(new NumberValue(1), quarter.evaluate(dateValues1));
    assertEquals(new NumberValue(2), quarter.evaluate(dateValues2));
    assertEquals(new NumberValue(3), quarter.evaluate(dateValues3));
    assertEquals(new NumberValue(4), quarter.evaluate(dateValues4));
    assertEquals(new NumberValue(2), quarter.evaluate(dateValues5));

    assertEquals(new NumberValue(4), dayofweek.evaluate(dateValues1));
    assertEquals(new NumberValue(3), dayofweek.evaluate(dateValues2));
    assertEquals(new NumberValue(7), dayofweek.evaluate(dateValues3));
    assertEquals(new NumberValue(7), dayofweek.evaluate(dateValues4));
    assertEquals(new NumberValue(6), dayofweek.evaluate(dateValues5));

    List<Value> dateTimeValues1 =
        Lists.newArrayList((Value) new DateTimeValue(
            2001, 0, 3, 9, 12, 22, 333));
    List<Value> dateTimeValues2 =
        Lists.newArrayList((Value) new DateTimeValue(
            2001, 3, 3, 9, 12, 22, 333));
    List<Value> dateTimeValues3 =
        Lists.newArrayList((Value) new DateTimeValue(
            2001, 8, 3, 9, 12, 22, 333));
    List<Value> dateTimeValues4 =
        Lists.newArrayList((Value) new DateTimeValue(
            2001, 10, 3, 9, 12, 22, 333));
    List<Value> dateTimeValues5 =
        Lists.newArrayList((Value) new DateTimeValue(
            2001, 7, 3, 9, 12, 22, 333));

    assertEquals(new NumberValue(1), quarter.evaluate(dateTimeValues1));
    assertEquals(new NumberValue(2), quarter.evaluate(dateTimeValues2));
    assertEquals(new NumberValue(3), quarter.evaluate(dateTimeValues3));
    assertEquals(new NumberValue(4), quarter.evaluate(dateTimeValues4));
    assertEquals(new NumberValue(3), quarter.evaluate(dateTimeValues5));

    assertEquals(new NumberValue(4), dayofweek.evaluate(dateTimeValues1));
    assertEquals(new NumberValue(3), dayofweek.evaluate(dateTimeValues2));
    assertEquals(new NumberValue(2), dayofweek.evaluate(dateTimeValues3));
    assertEquals(new NumberValue(7), dayofweek.evaluate(dateTimeValues4));
    assertEquals(new NumberValue(6), dayofweek.evaluate(dateTimeValues5));
  }

  // Tests that 2 instances of the same kind of TimeComponentExtractor are equal
  // (i.e., they're the same instance).
  public void testSingelton() {
    TimeComponentExtractor anotherYear = TimeComponentExtractor.getInstance(
        TimeComponentExtractor.TimeComponent.YEAR);
    TimeComponentExtractor anotherMonth = TimeComponentExtractor.getInstance(
        TimeComponentExtractor.TimeComponent.MONTH);
    TimeComponentExtractor anotherDay = TimeComponentExtractor.getInstance(
        TimeComponentExtractor.TimeComponent.DAY);
    TimeComponentExtractor anotherHour = TimeComponentExtractor.getInstance(
        TimeComponentExtractor.TimeComponent.HOUR);
    TimeComponentExtractor anotherMinute = TimeComponentExtractor.getInstance(
        TimeComponentExtractor.TimeComponent.MINUTE);
    TimeComponentExtractor anotherSecond = TimeComponentExtractor.getInstance(
        TimeComponentExtractor.TimeComponent.SECOND);
    TimeComponentExtractor anotherMillisecond =
        TimeComponentExtractor.getInstance(
            TimeComponentExtractor.TimeComponent.MILLISECOND);
    TimeComponentExtractor anotherQuarter =
        TimeComponentExtractor.getInstance(
            TimeComponentExtractor.TimeComponent.QUARTER);
    TimeComponentExtractor anotherDayOfWeek =
        TimeComponentExtractor.getInstance(
            TimeComponentExtractor.TimeComponent.DAY_OF_WEEK);
    assertTrue(year == anotherYear);
    assertTrue(month == anotherMonth);
    assertTrue(day == anotherDay);
    assertTrue(hour == anotherHour);
    assertTrue(minute == anotherMinute);
    assertTrue(second == anotherSecond);
    assertTrue(millisecond == anotherMillisecond);
    assertTrue(quarter == anotherQuarter);
    assertTrue(dayofweek == anotherDayOfWeek);
  }
}
TOP

Related Classes of com.google.visualization.datasource.query.scalarfunction.TimeComponentExtractorTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.