// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.dataquality.indicators.columnset.impl; import java.sql.Types; import java.util.ArrayList; import java.util.List; import junit.framework.Assert; import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.common.util.EList; import org.junit.Test; import org.talend.ResourceUtils; import org.talend.core.model.metadata.builder.connection.ConnectionFactory; import org.talend.core.model.metadata.builder.connection.MetadataColumn; import org.talend.cwm.helper.TaggedValueHelper; import org.talend.cwm.relational.RelationalFactory; import org.talend.cwm.relational.TdColumn; import org.talend.cwm.relational.TdSqlDataType; import org.talend.cwm.xml.TdXmlElementType; import org.talend.cwm.xml.XmlFactory; import org.talend.dataquality.indicators.DataminingType; import org.talend.dataquality.indicators.columnset.ColumnsetFactory; import orgomg.cwm.objectmodel.core.CoreFactory; import orgomg.cwm.objectmodel.core.ModelElement; import orgomg.cwm.objectmodel.core.TaggedValue; /** * created by xqliu on Apr 24, 2013 Detailled comment */ public class ColumnSetMultiValueIndicatorImplTest { private static final String COUNT_STAR = "COUNT(*)"; //$NON-NLS-1$ private static final String COLUMN_NAME_11 = "ColumnName11"; //$NON-NLS-1$ private static final String COLUMN_NAME_12 = "ColumnName12"; //$NON-NLS-1$ private static final String COLUMN_NAME_2 = "ColumnName2"; //$NON-NLS-1$ private static final String COLUMN_NAME_3 = "ColumnName3"; //$NON-NLS-1$ private static final String COLUMN_NAME_4 = "ColumnName4"; //$NON-NLS-1$ /** * Test method for * {@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#getColumnHeaders()}. */ @Test public void testGetColumnHeaders() { ColumnSetMultiValueIndicatorImpl columnSetMultiValueIndicatorImpl = new ColumnSetMultiValueIndicatorImpl(); // init an empty AnalyzedColumns List EList<ModelElement> analyzedColumns = columnSetMultiValueIndicatorImpl.getAnalyzedColumns(); // if the AnalyzedColumns List is empty, the column headers will include only one column COUNT(*) EList<String> columnHeaders = columnSetMultiValueIndicatorImpl.getColumnHeaders(); Assert.assertFalse(columnHeaders.isEmpty()); Assert.assertTrue(columnHeaders.size() == 1); Assert.assertTrue(COUNT_STAR.equals(columnHeaders.get(0))); // add 5 columns into the AnalyzedColumns List analyzedColumns.add(createColumn11()); analyzedColumns.add(createColumn12()); analyzedColumns.add(createColumn2()); analyzedColumns.add(createColumn3()); analyzedColumns.add(createColumn4()); // the column headers will contains 6 columns, and the order will be the same with AnalyzedColumns, the last // column will be COUNT(*) columnHeaders = columnSetMultiValueIndicatorImpl.getColumnHeaders(); Assert.assertFalse(columnHeaders.isEmpty()); Assert.assertTrue(columnHeaders.size() == 6); Assert.assertTrue(COLUMN_NAME_11.equals(columnHeaders.get(0))); Assert.assertTrue(COLUMN_NAME_12.equals(columnHeaders.get(1))); Assert.assertTrue(COLUMN_NAME_2.equals(columnHeaders.get(2))); Assert.assertTrue(COLUMN_NAME_3.equals(columnHeaders.get(3))); Assert.assertTrue(COLUMN_NAME_4.equals(columnHeaders.get(4))); Assert.assertTrue(COUNT_STAR.equals(columnHeaders.get(5))); } /** * create a TdXmlElementType, the DatamingType is Other. * * @return */ private ModelElement createColumn4() { TdXmlElementType tdXmlElementType = XmlFactory.eINSTANCE.createTdXmlElementType(); tdXmlElementType.setName(COLUMN_NAME_4); tdXmlElementType.setContentType(DataminingType.OTHER.getLiteral()); return tdXmlElementType; } /** * create a MetadataColumn, the DatamingType is Unstructured Text. * * @return */ private ModelElement createColumn3() { MetadataColumn mdColumn = ConnectionFactory.eINSTANCE.createMetadataColumn(); mdColumn.setName(COLUMN_NAME_3); EList<TaggedValue> taggedValue = mdColumn.getTaggedValue(); TaggedValue tv = CoreFactory.eINSTANCE.createTaggedValue(); tv.setTag(TaggedValueHelper.DATA_CONTENT_TYPE_TAGGED_VAL); tv.setValue(DataminingType.UNSTRUCTURED_TEXT.getLiteral()); taggedValue.add(tv); return mdColumn; } /** * create a TdColumn, the DatamingType is Interval. * * @return */ private ModelElement createColumn2() { TdColumn tdColumn = RelationalFactory.eINSTANCE.createTdColumn(); tdColumn.setName(COLUMN_NAME_2); tdColumn.setContentType(DataminingType.INTERVAL.getLiteral()); TdSqlDataType tdSqlDataType = RelationalFactory.eINSTANCE.createTdSqlDataType(); tdSqlDataType.setJavaDataType(Types.DATE); tdColumn.setSqlDataType(tdSqlDataType); return tdColumn; } /** * create a TdColumn, the DatamingType is Nominal, the getSqlDataType is DATE. * * @return */ private ModelElement createColumn12() { TdColumn tdColumn = RelationalFactory.eINSTANCE.createTdColumn(); tdColumn.setName(COLUMN_NAME_12); tdColumn.setContentType(DataminingType.NOMINAL.getLiteral()); TdSqlDataType tdSqlDataType = RelationalFactory.eINSTANCE.createTdSqlDataType(); tdSqlDataType.setJavaDataType(Types.DATE); tdColumn.setSqlDataType(tdSqlDataType); return tdColumn; } /** * create a TdColumn, the DatamingType is Nominal, the getSqlDataType is NUMERIC. * * @return */ private ModelElement createColumn11() { TdColumn tdColumn = RelationalFactory.eINSTANCE.createTdColumn(); tdColumn.setName(COLUMN_NAME_11); tdColumn.setContentType(DataminingType.NOMINAL.getLiteral()); TdSqlDataType tdSqlDataType = RelationalFactory.eINSTANCE.createTdSqlDataType(); tdSqlDataType.setJavaDataType(Types.NUMERIC); tdColumn.setSqlDataType(tdSqlDataType); return tdColumn; } /** * when do not use mapdb Test method for * {@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#handle(EList)}. */ @Test public void testHandleElist_1() { ColumnSetMultiValueIndicatorImpl createColumnSetMultiValueIndicator = (ColumnSetMultiValueIndicatorImpl) ColumnsetFactory.eINSTANCE .createColumnSetMultiValueIndicator(); createColumnSetMultiValueIndicator.setUsedMapDBMode(false); for (EList<Object> datas : initdatas()) { createColumnSetMultiValueIndicator.handle(datas); } boolean computeResult = createColumnSetMultiValueIndicator.finalizeComputation(); Assert.assertEquals(true, computeResult); Assert.assertEquals(6l, createColumnSetMultiValueIndicator.getCount().longValue()); Assert.assertEquals(3l, createColumnSetMultiValueIndicator.getDistinctCount().longValue()); Assert.assertEquals(2l, createColumnSetMultiValueIndicator.getDuplicateCount().longValue()); Assert.assertEquals(1l, createColumnSetMultiValueIndicator.getUniqueCount().longValue()); } /** * when use mapdb Test method for * {@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#handle(EList)}. */ @Test public void testHandleElist_2() { ColumnSetMultiValueIndicatorImpl createColumnSetMultiValueIndicator = (ColumnSetMultiValueIndicatorImpl) ColumnsetFactory.eINSTANCE .createColumnSetMultiValueIndicator(); createColumnSetMultiValueIndicator.setUsedMapDBMode(true); ResourceUtils.createAnalysis(createColumnSetMultiValueIndicator); createColumnSetMultiValueIndicator.reset(); for (EList<Object> datas : initdatas()) { createColumnSetMultiValueIndicator.handle(datas); } boolean computeResult = createColumnSetMultiValueIndicator.finalizeComputation(); Assert.assertEquals(true, computeResult); Assert.assertEquals(6l, createColumnSetMultiValueIndicator.getCount().longValue()); Assert.assertEquals(3l, createColumnSetMultiValueIndicator.getDistinctCount().longValue()); Assert.assertEquals(2l, createColumnSetMultiValueIndicator.getDuplicateCount().longValue()); Assert.assertEquals(1l, createColumnSetMultiValueIndicator.getUniqueCount().longValue()); } /** * when do not use mapdb Test method for * {@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#handle(EList)}. when * setUsedMapDBMode */ @Test public void testHandleElistIsEmpty_1() { ColumnSetMultiValueIndicatorImpl createColumnSetMultiValueIndicator = (ColumnSetMultiValueIndicatorImpl) ColumnsetFactory.eINSTANCE .createColumnSetMultiValueIndicator(); createColumnSetMultiValueIndicator.setUsedMapDBMode(false); EList<Object> elist = new BasicEList<Object>(); createColumnSetMultiValueIndicator.handle(elist); boolean computeResult = createColumnSetMultiValueIndicator.finalizeComputation(); Assert.assertEquals(true, computeResult); Assert.assertEquals(1l, createColumnSetMultiValueIndicator.getCount().longValue()); Assert.assertEquals(1l, createColumnSetMultiValueIndicator.getDistinctCount().longValue()); Assert.assertEquals(0l, createColumnSetMultiValueIndicator.getDuplicateCount().longValue()); Assert.assertEquals(1l, createColumnSetMultiValueIndicator.getUniqueCount().longValue()); } /** * when use mapdb Test method for * {@link org.talend.dataquality.indicators.columnset.impl.ColumnSetMultiValueIndicatorImpl#handle(EList)}. */ @Test public void testHandleElistIsEmpty_2() { ColumnSetMultiValueIndicatorImpl createColumnSetMultiValueIndicator = (ColumnSetMultiValueIndicatorImpl) ColumnsetFactory.eINSTANCE .createColumnSetMultiValueIndicator(); createColumnSetMultiValueIndicator.setUsedMapDBMode(true); ResourceUtils.createAnalysis(createColumnSetMultiValueIndicator); createColumnSetMultiValueIndicator.reset(); EList<Object> elist = new BasicEList<Object>(); createColumnSetMultiValueIndicator.handle(elist); boolean computeResult = createColumnSetMultiValueIndicator.finalizeComputation(); Assert.assertEquals(true, computeResult); Assert.assertEquals(1l, createColumnSetMultiValueIndicator.getCount().longValue()); Assert.assertEquals(1l, createColumnSetMultiValueIndicator.getDistinctCount().longValue()); Assert.assertEquals(0l, createColumnSetMultiValueIndicator.getDuplicateCount().longValue()); Assert.assertEquals(1l, createColumnSetMultiValueIndicator.getUniqueCount().longValue()); } /** * DOC talend Comment method "init". * * @param datas */ private List<EList<Object>> initdatas() { List<EList<Object>> datas = new ArrayList<EList<Object>>(); EList<Object> elist = new BasicEList<Object>(); elist.add("3"); //$NON-NLS-1$ elist.add("test3"); //$NON-NLS-1$ datas.add(elist); elist = new BasicEList<Object>(); elist.add("2"); //$NON-NLS-1$ elist.add("test2"); //$NON-NLS-1$ datas.add(elist); elist = new BasicEList<Object>(); elist.add("1"); //$NON-NLS-1$ elist.add("test1"); //$NON-NLS-1$ datas.add(elist); elist = new BasicEList<Object>(); elist.add("3"); //$NON-NLS-1$ elist.add("test3"); //$NON-NLS-1$ datas.add(elist); elist = new BasicEList<Object>(); elist.add("2"); //$NON-NLS-1$ elist.add("test2"); //$NON-NLS-1$ datas.add(elist); elist = new BasicEList<Object>(); elist.add("3"); //$NON-NLS-1$ elist.add("test3"); //$NON-NLS-1$ datas.add(elist); return datas; } }