/** * 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 java.util.List; import org.apache.metamodel.schema.MutableColumn; import org.apache.metamodel.schema.MutableTable; import org.datacleaner.api.InputColumn; import org.datacleaner.api.OutputDataStream; import org.datacleaner.data.MetaModelInputColumn; import org.datacleaner.data.MockInputRow; import org.datacleaner.test.MockOutputRowCollector; import junit.framework.TestCase; public class FuseStreamsComponentUnitTest extends TestCase { public void testCombineValuesFromMultipleTables() throws Exception { final MutableTable table1 = new MutableTable("table1"); table1.addColumn(new MutableColumn("id").setTable(table1)); table1.addColumn(new MutableColumn("name1").setTable(table1)); table1.addColumn(new MutableColumn("city1").setTable(table1)); final MutableTable table2 = new MutableTable("table2"); table2.addColumn(new MutableColumn("uuid").setTable(table2)); table2.addColumn(new MutableColumn("name2").setTable(table2)); table2.addColumn(new MutableColumn("town2").setTable(table2)); final InputColumn<?> colName1 = new MetaModelInputColumn(table1.getColumnByName("name1")); final InputColumn<?> colCity1 = new MetaModelInputColumn(table1.getColumnByName("city1")); final InputColumn<?> colName2 = new MetaModelInputColumn(table2.getColumnByName("name2")); final InputColumn<?> colTown2 = new MetaModelInputColumn(table2.getColumnByName("town2")); final CoalesceUnit unit1 = new CoalesceUnit("name1", "name2"); final CoalesceUnit unit2 = new CoalesceUnit("city1", "town2"); final FuseStreamsComponent component = new FuseStreamsComponent(unit1, unit2); component._inputs = new InputColumn[] { colName1, colCity1, colName2, colTown2 }; final OutputDataStream[] streams = component.getOutputDataStreams(); assertEquals(1, streams.length); final OutputDataStream stream = streams[0]; assertEquals("[name1, city1]", Arrays.toString(stream.getTable().getColumnNames())); final MockOutputRowCollector outputRowCollector = new MockOutputRowCollector(); component.initializeOutputDataStream(stream, null, outputRowCollector); component.init(); component.run(new MockInputRow().put(colName1, "A").put(colCity1, "B")); component.run(new MockInputRow().put(colName2, "C").put(colTown2, "D")); final List<Object[]> output = outputRowCollector.getOutput(); assertEquals(2, output.size()); assertEquals("[A, B]", Arrays.toString(output.get(0))); assertEquals("[C, D]", Arrays.toString(output.get(1))); } }