/**
* 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.components.fuse;
import java.util.Arrays;
import org.datacleaner.api.InputColumn;
import org.datacleaner.configuration.DataCleanerConfigurationImpl;
import org.datacleaner.configuration.InjectionManagerImpl;
import org.datacleaner.data.MockInputColumn;
import org.datacleaner.util.convert.StringConverter;
import junit.framework.TestCase;
public class CoalesceUnitConverterTest extends TestCase {
private final MockInputColumn<?> numberCol1 = new MockInputColumn<>("num1", Number.class);
private final MockInputColumn<?> numberCol2 = new MockInputColumn<>("num1", Number.class);
private final MockInputColumn<?> integerCol1 = new MockInputColumn<>("int1", Integer.class);
private final MockInputColumn<?> integerCol2 = new MockInputColumn<>("int2", Integer.class);
private final MockInputColumn<?> stringCol1 = new MockInputColumn<>("str1", String.class);
private final MockInputColumn<?> stringCol2 = new MockInputColumn<>("str2", String.class);
private final MockInputColumn<?> stringCommaCol1 = new MockInputColumn<>("str1,a", String.class);
private final MockInputColumn<?> stringCommaCol2 = new MockInputColumn<>("str2,b", String.class);
private final MockInputColumn<?> objCol1 = new MockInputColumn<>("obj1", Object.class);
public void testGetOutputDataType() throws Exception {
final CoalesceUnitConverter converter = new CoalesceUnitConverter();
final InputColumn<?>[] allColumns =
new InputColumn[] { numberCol1, numberCol2, integerCol1, integerCol2, stringCol1, stringCol2, objCol1 };
final CoalesceUnit unit1 = new CoalesceUnit(stringCol1, stringCol2);
final String str = converter.toString(unit1);
assertEquals("[str1,str2]", str);
final CoalesceUnit unit2 = converter.fromString(CoalesceUnit.class, str);
assertEquals("[str1, str2]", Arrays.toString(unit2.getInputColumnNames()));
assertEquals(String.class, unit2.updateInputColumns(allColumns).getOutputDataType());
}
public void testDiscoverAndResolveConverter() throws Exception {
final StringConverter stringConverter =
new StringConverter(new InjectionManagerImpl(new DataCleanerConfigurationImpl()));
final CoalesceUnit unit1 = new CoalesceUnit(stringCol1, stringCol2);
String str = stringConverter.serialize(unit1);
assertEquals("[str1,str2]", str);
final CoalesceUnit[] array = new CoalesceUnit[] { unit1, unit1 };
str = stringConverter.serialize(array);
assertEquals("[[str1,str2],[str1,str2]]", str);
final CoalesceUnit[] units = stringConverter.deserialize(str, CoalesceUnit[].class);
assertEquals(2, units.length);
assertEquals("CoalesceUnit[inputColumnNames=[str1, str2]]", units[0].toString());
assertEquals("CoalesceUnit[inputColumnNames=[str1, str2]]", units[1].toString());
}
public void testConvertCommaNames() throws Exception {
final StringConverter stringConverter =
new StringConverter(new InjectionManagerImpl(new DataCleanerConfigurationImpl()));
final CoalesceUnit unitIn = new CoalesceUnit(stringCommaCol1, stringCommaCol2);
final String str = stringConverter.serialize(unitIn);
assertEquals("[str1,a,str2,b]", str);
final CoalesceUnit unitOut = stringConverter.deserialize(str, CoalesceUnit.class);
assertEquals("CoalesceUnit[inputColumnNames=[str1,a, str2,b]]", unitOut.toString());
}
}