/**
* AnalyzerBeans
* Copyright (C) 2014 Neopost - Customer Information Management
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.eobjects.analyzer.beans.transform;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import junit.framework.TestCase;
import org.eobjects.analyzer.beans.api.OutputColumns;
import org.eobjects.analyzer.beans.transform.DatePartTransformer.WeekDay;
import org.eobjects.analyzer.data.MockInputColumn;
import org.eobjects.analyzer.data.MockInputRow;
import org.apache.metamodel.util.DateUtils;
import org.apache.metamodel.util.Month;
public class DatePartTransformerTest extends TestCase {
public void testTransformDefaultDateConfiguration() throws Exception {
DatePartTransformer transformer = new DatePartTransformer();
MockInputColumn<Date> column = new MockInputColumn<Date>("my date", Date.class);
transformer.column = column;
OutputColumns outputColumns = transformer.getOutputColumns();
assertEquals(3, outputColumns.getColumnCount());
assertEquals("my date (year)", outputColumns.getColumnName(0));
assertEquals("my date (month)", outputColumns.getColumnName(1));
assertEquals("my date (day of month)", outputColumns.getColumnName(2));
Date date = DateUtils.get(2011, Month.MARCH, 16);
Number[] result = transformer.transform(new MockInputRow().put(column, date));
assertEquals(3, result.length);
assertEquals(2011, result[0]);
assertEquals(3, result[1]);
assertEquals(16, result[2]);
}
public void testMondayIs1AndSundayIs7() throws Exception {
DatePartTransformer transformer = new DatePartTransformer();
MockInputColumn<Date> column = new MockInputColumn<Date>("my date", Date.class);
transformer.column = column;
transformer.year = false;
transformer.month = false;
transformer.dayOfMonth = false;
transformer.dayOfWeek = true;
transformer.weekNumber = true;
transformer.firstDayOfWeek = WeekDay.MONDAY;
transformer.minimalDaysInFirstWeek = 4;
transformer.init();
OutputColumns outputColumns = transformer.getOutputColumns();
assertEquals(2, outputColumns.getColumnCount());
assertEquals("my date (day of week)", outputColumns.getColumnName(0));
assertEquals("my date (week number)", outputColumns.getColumnName(1));
Date monday = DateUtils.get(2011, Month.NOVEMBER, 7);
Date sunday = DateUtils.get(2011, Month.NOVEMBER, 6);
Number[] mondayResult = transformer.transform(new MockInputRow().put(column, monday));
assertEquals("[1, 45]", Arrays.toString(mondayResult));
Number[] sundayResult = transformer.transform(new MockInputRow().put(column, sunday));
assertEquals("[7, 44]", Arrays.toString(sundayResult));
}
public void testCompareSundayAndMonday() throws Exception {
WeekDay sunday = DatePartTransformer.WeekDay.SUNDAY;
WeekDay monday = DatePartTransformer.WeekDay.MONDAY;
assertEquals(0, sunday.compareTo(sunday));
assertEquals(6, sunday.compareTo(monday));
assertEquals(-6, monday.compareTo(sunday));
}
public void testNullDate() throws Exception {
DatePartTransformer transformer = new DatePartTransformer();
MockInputColumn<Date> column = new MockInputColumn<Date>("my date", Date.class);
transformer.column = column;
Number[] result = transformer.transform(new MockInputRow().put(column, null));
assertEquals(3, result.length);
assertEquals(null, result[0]);
assertEquals(null, result[1]);
assertEquals(null, result[2]);
}
public void testTransformTime() throws Exception {
DatePartTransformer transformer = new DatePartTransformer();
MockInputColumn<Date> column = new MockInputColumn<Date>("my time", Date.class);
transformer.column = column;
transformer.year = false;
transformer.month = false;
transformer.dayOfMonth = false;
transformer.hour = true;
transformer.minute = true;
transformer.second = true;
OutputColumns outputColumns = transformer.getOutputColumns();
assertEquals(3, outputColumns.getColumnCount());
assertEquals("my time (hour)", outputColumns.getColumnName(0));
assertEquals("my time (minute)", outputColumns.getColumnName(1));
assertEquals("my time (second)", outputColumns.getColumnName(2));
Date date = new SimpleDateFormat("HH:mm:ss").parse("13:21:55");
Number[] result = transformer.transform(date);
assertEquals(3, result.length);
assertEquals(13, result[0]);
assertEquals(21, result[1]);
assertEquals(55, result[2]);
}
}