/** * DataCleaner (community edition) * 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.datacleaner.beans.writers; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.metamodel.schema.Column; import org.apache.metamodel.schema.ColumnType; import org.apache.metamodel.schema.MutableColumn; import org.junit.Test; public class TypeConverterTest { private final Date dateValue = createDate(); private Date createDate() { final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); try { return sdf.parse("21/12/2012"); } catch (final ParseException e) { e.printStackTrace(); } return null; } @Test public void shouldReturnAStringTypeForLiteralColumn() { final Column literalColumn = new MutableColumn("foo", ColumnType.CHAR); Object result = TypeConverter.convertType("bla", literalColumn); assertTrue(result instanceof String); assertEquals("bla", result); result = TypeConverter.convertType(24, literalColumn); assertTrue(result instanceof String); assertEquals("24", result); result = TypeConverter.convertType(24.3d, literalColumn); assertTrue(result instanceof String); assertEquals("24.3", result); result = TypeConverter.convertType(dateValue, literalColumn); assertTrue(result instanceof String); assertEquals(dateValue.toString(), result); } @Test public void shouldReturnNumberForNumberColumn() { final Column numberColumn = new MutableColumn("foo", ColumnType.NUMERIC); Object result = TypeConverter.convertType(24, numberColumn); assertTrue(result instanceof Number); assertEquals(24, result); result = TypeConverter.convertType(24.3d, numberColumn); assertTrue(result instanceof Number); assertEquals(24.3, result); result = TypeConverter.convertType("33", numberColumn); assertTrue(result instanceof Number); assertEquals(33L, result); result = TypeConverter.convertType("33.3", numberColumn); assertTrue(result instanceof Number); assertEquals(33.3, result); result = TypeConverter.convertType(true, numberColumn); assertTrue(result instanceof Number); assertEquals(1, result); result = TypeConverter.convertType(false, numberColumn); assertTrue(result instanceof Number); assertEquals(0, result); } @Test public void shouldReturnBooleanForBooleanColumn() { final Column booleanColumn = new MutableColumn("foo", ColumnType.BOOLEAN); Object result = TypeConverter.convertType(true, booleanColumn); assertTrue(result instanceof Boolean); assertEquals(true, result); result = TypeConverter.convertType(false, booleanColumn); assertTrue(result instanceof Boolean); assertEquals(false, result); } @Test public void shouldNotConvertBooleanForLiteralColumn() { final Column literalColumn = new MutableColumn("foo", ColumnType.CHAR); final Object result = TypeConverter.convertType(false, literalColumn); assertTrue(result instanceof Boolean); assertEquals(false, result); } @Test(expected = IllegalArgumentException.class) public void shouldThrowForStringAndNumberColumn() { final Column numberColumn = new MutableColumn("foo", ColumnType.NUMERIC); TypeConverter.convertType("bla", numberColumn); } public void shouldThrowForDataAndNumberColumn() { final Column numberColumn = new MutableColumn("foo", ColumnType.NUMERIC); TypeConverter.convertType(dateValue, numberColumn); } @Test(expected = IllegalArgumentException.class) public void shouldThrowForIntegerAndBooleanColumn() { final Column booleanColumn = new MutableColumn("foo", ColumnType.BOOLEAN); TypeConverter.convertType(42, booleanColumn); } @Test(expected = IllegalArgumentException.class) public void shouldThrowForDoubleAndBooleanColumn() { final Column booleanColumn = new MutableColumn("foo", ColumnType.BOOLEAN); TypeConverter.convertType(42.3d, booleanColumn); } @Test(expected = IllegalArgumentException.class) public void shouldThrowForStringAndBooleanColumn() { final Column booleanColumn = new MutableColumn("foo", ColumnType.BOOLEAN); TypeConverter.convertType("bla", booleanColumn); } public void shouldThrowForDataAndBooleanColumn() { final Column booleanColumn = new MutableColumn("foo", ColumnType.BOOLEAN); TypeConverter.convertType(dateValue, booleanColumn); } }