// ============================================================================
//
// 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.record.linkage.ui.composite.utils;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.Timestamp;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.talend.cwm.relational.RelationalFactory;
import org.talend.cwm.relational.TdColumn;
import org.talend.cwm.relational.TdSqlDataType;
import org.talend.dataquality.record.linkage.ui.composite.table.SortState;
import orgomg.cwm.objectmodel.core.ModelElement;
/**
* DOC yyin class global comment. Detailled comment
*/
public class MatchRuleAnlaysisUtilsTest extends TestCase {
private SortState sortState = null;
private List<Object[]> sortData = null;
private List<ModelElement> columns = null;
private TdSqlDataType sqlDataType = RelationalFactory.eINSTANCE.createTdSqlDataType();
private TdColumn tdColumn = RelationalFactory.eINSTANCE.createTdColumn();
/**
* DOC yyin Comment method "setUp".
*
* @throws java.lang.Exception
*/
@Override
protected void setUp() throws Exception {
sortState = new SortState(0);
sortState.setSelectedColumnIndex(0);
sortState.setSelectedColumnName("column_0");//$NON-NLS-1$
sortData = new ArrayList<Object[]>();
columns = new ArrayList<ModelElement>();
tdColumn.setSqlDataType(sqlDataType);
columns.add(tdColumn);
}
/**
* DOC yyin Comment method "tearDown".
*
* @throws java.lang.Exception
*/
@Override
protected void tearDown() throws Exception {
sortData = null;
columns = null;
}
/**
* Test method for
* {@link org.talend.dataquality.record.linkage.ui.composite.utils.MatchRuleAnlaysisUtils#sortDataByColumn(org.talend.dataquality.record.linkage.ui.composite.table.SortState, java.util.List, java.util.List)}
* .
*/
public void testSortDataByColumn_int() {
sortState.getNextSortDirection();// ASC
Integer[] intArray = { new Integer(3) };
Integer[] intArray2 = { new Integer(2) };
Integer[] intArray4 = { new Integer(4) };
Integer[] intArray3 = { new Integer(1) };
sortData.add(intArray);
sortData.add(intArray2);
sortData.add(intArray4);
sortData.add(intArray3);
sqlDataType.setName("INT");
sqlDataType.setJavaDataType(Types.INTEGER);
List<Object[]> sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(4, sortResult.size());
Assert.assertTrue(((Integer) sortResult.get(0)[0]).compareTo(1) == 0);
Assert.assertTrue(((Integer) sortResult.get(1)[0]).compareTo(2) == 0);
Assert.assertTrue(((Integer) sortResult.get(2)[0]).compareTo(3) == 0);
sortState.setSelectedColumnIndex(0);
sortState.getNextSortDirection();// DESC
sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(((Integer) sortResult.get(0)[0]).intValue(), 4);
Assert.assertEquals(((Integer) sortResult.get(1)[0]).intValue(), 3);
Assert.assertEquals(((Integer) sortResult.get(2)[0]).intValue(), 2);
}
/**
* Test method for
* {@link org.talend.dataquality.record.linkage.ui.composite.utils.MatchRuleAnlaysisUtils#sortDataByColumn(org.talend.dataquality.record.linkage.ui.composite.table.SortState, java.util.List, java.util.List)}
* .
*/
public void testSortDataByColumn_double() {
sortState.getNextSortDirection();// ASC
Double[] array = { new Double(1.3) };
Double[] array2 = { new Double(2.5) };
Double[] array4 = { new Double(4.7) };
Double[] array3 = { new Double(1.6) };
sortData.add(array);
sortData.add(array2);
sortData.add(array4);
sortData.add(array3);
sqlDataType.setName("DOUBLE");
sqlDataType.setJavaDataType(Types.DOUBLE);
List<Object[]> sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(4, sortResult.size());
Assert.assertTrue(((Double) sortResult.get(0)[0]).compareTo(1.3) == 0);
Assert.assertTrue(((Double) sortResult.get(1)[0]).compareTo(1.6) == 0);
Assert.assertTrue(((Double) sortResult.get(2)[0]).compareTo(2.5) == 0);
sortState.setSelectedColumnIndex(0);
sortState.getNextSortDirection();// DESC
sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(((Double) sortResult.get(0)[0]).doubleValue(), 4.7);
Assert.assertEquals(((Double) sortResult.get(1)[0]).doubleValue(), 2.5);
Assert.assertEquals(((Double) sortResult.get(2)[0]).doubleValue(), 1.6);
}
/**
* Test method for
* {@link org.talend.dataquality.record.linkage.ui.composite.utils.MatchRuleAnlaysisUtils#sortDataByColumn(org.talend.dataquality.record.linkage.ui.composite.table.SortState, java.util.List, java.util.List)}
* .
*/
public void testSortDataByColumn_DATE() {
sortState.getNextSortDirection();// ASC
Date[] array = { new Date(2000, 1, 1) };
Date[] array2 = { new Date(2005, 1, 1) };
Date[] array4 = { new Date(2003, 1, 1) };
Date[] array3 = { new Date(2004, 1, 1) };
sortData.add(array);
sortData.add(array2);
sortData.add(array4);
sortData.add(array3);
sqlDataType.setName("DATE");
sqlDataType.setJavaDataType(Types.DATE);
List<Object[]> sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(4, sortResult.size());
Assert.assertEquals(((Date) sortResult.get(0)[0]).compareTo(array[0]), 0);
Assert.assertEquals(((Date) sortResult.get(1)[0]).compareTo(array4[0]), 0);
Assert.assertEquals(((Date) sortResult.get(2)[0]).compareTo(array3[0]), 0);
sortState.setSelectedColumnIndex(0);
sortState.getNextSortDirection();// DESC
sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(((Date) sortResult.get(0)[0]).compareTo(array2[0]), 0);
Assert.assertEquals(((Date) sortResult.get(1)[0]).compareTo(array3[0]), 0);
Assert.assertEquals(((Date) sortResult.get(2)[0]).compareTo(array4[0]), 0);
}
/**
* Test method for
* {@link org.talend.dataquality.record.linkage.ui.composite.utils.MatchRuleAnlaysisUtils#sortDataByColumn(org.talend.dataquality.record.linkage.ui.composite.table.SortState, java.util.List, java.util.List)}
* .
*/
public void testSortDataByColumn_TIMESTAMP() {
sortState.getNextSortDirection();// ASC
Timestamp[] array = { new Timestamp(2000) };
Timestamp[] array2 = { new Timestamp(6000) };
Timestamp[] array4 = { new Timestamp(3000) };
Timestamp[] array3 = { new Timestamp(5000) };
sortData.add(array);
sortData.add(array2);
sortData.add(array4);
sortData.add(array3);
sqlDataType.setName("TIMESTAMP");
sqlDataType.setJavaDataType(Types.TIMESTAMP);
List<Object[]> sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(4, sortResult.size());
Assert.assertEquals(((Timestamp) sortResult.get(0)[0]).compareTo(array[0]), 0);
Assert.assertEquals(((Timestamp) sortResult.get(1)[0]).compareTo(array4[0]), 0);
Assert.assertEquals(((Timestamp) sortResult.get(2)[0]).compareTo(array3[0]), 0);
sortState.setSelectedColumnIndex(0);
sortState.getNextSortDirection();// DESC
sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(((Timestamp) sortResult.get(0)[0]).compareTo(array2[0]), 0);
Assert.assertEquals(((Timestamp) sortResult.get(1)[0]).compareTo(array3[0]), 0);
Assert.assertEquals(((Timestamp) sortResult.get(2)[0]).compareTo(array4[0]), 0);
}
/**
* Test method for
* {@link org.talend.dataquality.record.linkage.ui.composite.utils.MatchRuleAnlaysisUtils#sortDataByColumn(org.talend.dataquality.record.linkage.ui.composite.table.SortState, java.util.List, java.util.List)}
* .
*/
public void testSortDataByColumn_long() {
sortState.getNextSortDirection();// ASC
Long[] array = { new Long(2000) };
Long[] array2 = { new Long(6000) };
Long[] array4 = { new Long(3000) };
Long[] array3 = { new Long(5000) };
sortData.add(array);
sortData.add(array2);
sortData.add(array4);
sortData.add(array3);
sqlDataType.setName("BIGINT");
sqlDataType.setJavaDataType(Types.BIGINT);
List<Object[]> sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(4, sortResult.size());
Assert.assertEquals(((Long) sortResult.get(0)[0]).compareTo(array[0]), 0);
Assert.assertEquals(((Long) sortResult.get(1)[0]).compareTo(array4[0]), 0);
Assert.assertEquals(((Long) sortResult.get(2)[0]).compareTo(array3[0]), 0);
sortState.setSelectedColumnIndex(0);
sortState.getNextSortDirection();// DESC
sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(((Long) sortResult.get(0)[0]).compareTo(array2[0]), 0);
Assert.assertEquals(((Long) sortResult.get(1)[0]).compareTo(array3[0]), 0);
Assert.assertEquals(((Long) sortResult.get(2)[0]).compareTo(array4[0]), 0);
}
/**
* Test method for
* {@link org.talend.dataquality.record.linkage.ui.composite.utils.MatchRuleAnlaysisUtils#sortDataByColumn(org.talend.dataquality.record.linkage.ui.composite.table.SortState, java.util.List, java.util.List)}
* .
*/
public void testSortDataByColumn_BigDecimal() {
sortState.getNextSortDirection();// ASC
BigDecimal[] array = { new BigDecimal("20") };
BigDecimal[] array2 = { new BigDecimal("60") };
BigDecimal[] array4 = { new BigDecimal("30") };
BigDecimal[] array3 = { new BigDecimal("50") };
sortData.add(array);
sortData.add(array2);
sortData.add(array4);
sortData.add(array3);
sqlDataType.setName("BIGINT");
sqlDataType.setJavaDataType(Types.BIGINT);
List<Object[]> sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(4, sortResult.size());
Assert.assertEquals(((BigDecimal) sortResult.get(0)[0]).compareTo(array[0]), 0);
Assert.assertEquals(((BigDecimal) sortResult.get(1)[0]).compareTo(array4[0]), 0);
Assert.assertEquals(((BigDecimal) sortResult.get(2)[0]).compareTo(array3[0]), 0);
sortState.setSelectedColumnIndex(0);
sortState.getNextSortDirection();// DESC
sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(((BigDecimal) sortResult.get(0)[0]).compareTo(array2[0]), 0);
Assert.assertEquals(((BigDecimal) sortResult.get(1)[0]).compareTo(array3[0]), 0);
Assert.assertEquals(((BigDecimal) sortResult.get(2)[0]).compareTo(array4[0]), 0);
}
/**
* Test method for
* {@link org.talend.dataquality.record.linkage.ui.composite.utils.MatchRuleAnlaysisUtils#sortDataByColumn(org.talend.dataquality.record.linkage.ui.composite.table.SortState, java.util.List, java.util.List)}
* .
*/
public void testSortDataByColumn_BOOLEAN() {
sortState.getNextSortDirection();// ASC
Boolean[] array = { Boolean.TRUE };
Boolean[] array2 = { Boolean.FALSE };
Boolean[] array4 = { Boolean.TRUE };
Boolean[] array3 = { Boolean.FALSE };
sortData.add(array);
sortData.add(array2);
sortData.add(array4);
sortData.add(array3);
sqlDataType.setName("BOOLEAN");
sqlDataType.setJavaDataType(Types.BOOLEAN);
List<Object[]> sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(4, sortResult.size());
Assert.assertEquals(((Boolean) sortResult.get(0)[0]).compareTo(array2[0]), 0);
Assert.assertEquals(((Boolean) sortResult.get(1)[0]).compareTo(array3[0]), 0);
Assert.assertEquals(((Boolean) sortResult.get(2)[0]).compareTo(array4[0]), 0);
sortState.setSelectedColumnIndex(0);
sortState.getNextSortDirection();// DESC
sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(((Boolean) sortResult.get(0)[0]).compareTo(array[0]), 0);
Assert.assertEquals(((Boolean) sortResult.get(1)[0]).compareTo(array4[0]), 0);
Assert.assertEquals(((Boolean) sortResult.get(2)[0]).compareTo(array3[0]), 0);
}
/**
* Test method for
* {@link org.talend.dataquality.record.linkage.ui.composite.utils.MatchRuleAnlaysisUtils#sortDataByColumn(org.talend.dataquality.record.linkage.ui.composite.table.SortState, java.util.List, java.util.List)}
* .
*/
public void testSortDataByColumn_String() {
sortState.getNextSortDirection();// ASC
String[] array = { "abbbbb" };
String[] array2 = { "zzzzz" };
String[] array4 = { "hhhhhh" };
String[] array3 = { "kkkkk" };
sortData.add(array);
sortData.add(array2);
sortData.add(array4);
sortData.add(array3);
sqlDataType.setName("String");
sqlDataType.setJavaDataType(Types.VARCHAR);
List<Object[]> sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(4, sortResult.size());
Assert.assertEquals(((String) sortResult.get(0)[0]).compareTo(array[0]), 0);
Assert.assertEquals(((String) sortResult.get(1)[0]).compareTo(array4[0]), 0);
Assert.assertEquals(((String) sortResult.get(2)[0]).compareTo(array3[0]), 0);
sortState.setSelectedColumnIndex(0);
sortState.getNextSortDirection();// DESC
sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(((String) sortResult.get(0)[0]).compareTo(array2[0]), 0);
Assert.assertEquals(((String) sortResult.get(1)[0]).compareTo(array3[0]), 0);
Assert.assertEquals(((String) sortResult.get(2)[0]).compareTo(array4[0]), 0);
}
/**
* Test method for
* {@link org.talend.dataquality.record.linkage.ui.composite.utils.MatchRuleAnlaysisUtils#sortDataByColumn(org.talend.dataquality.record.linkage.ui.composite.table.SortState, java.util.List, java.util.List)}
* .
*/
public void testSortDataByColumn_GroupSize() {
// when the sort column is the group size, should compare as int
sortState.getNextSortDirection();// ASC
String[] array = { "1" };
String[] array2 = { "5" };
String[] array4 = { "2" };
String[] array3 = { "3" };
sortData.add(array);
sortData.add(array2);
sortData.add(array4);
sortData.add(array3);
sqlDataType.setName("String");
sqlDataType.setJavaDataType(Types.VARCHAR);
List<Object[]> sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(4, sortResult.size());
Assert.assertEquals(((String) sortResult.get(0)[0]).compareTo(array[0]), 0);
Assert.assertEquals(((String) sortResult.get(1)[0]).compareTo(array4[0]), 0);
Assert.assertEquals(((String) sortResult.get(2)[0]).compareTo(array3[0]), 0);
sortState.setSelectedColumnIndex(0);
sortState.getNextSortDirection();// DESC
sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(((String) sortResult.get(0)[0]).compareTo(array2[0]), 0);
Assert.assertEquals(((String) sortResult.get(1)[0]).compareTo(array3[0]), 0);
Assert.assertEquals(((String) sortResult.get(2)[0]).compareTo(array4[0]), 0);
}
/**
* Test method for
* {@link org.talend.dataquality.record.linkage.ui.composite.utils.MatchRuleAnlaysisUtils#sortDataByColumn(org.talend.dataquality.record.linkage.ui.composite.table.SortState, java.util.List, java.util.List)}
* .
*/
public void testSortDataByColumn_StringAsDouble() {
// when the sort column is the group size, should compare as int
sortState.getNextSortDirection();// ASC
String[] array = { "1.33" };
String[] array2 = { "5.22" };
String[] array4 = { "2.77" };
String[] array3 = { "3.66" };
sortData.add(array);
sortData.add(array2);
sortData.add(array4);
sortData.add(array3);
sqlDataType.setName("String");
sqlDataType.setJavaDataType(Types.REAL);
List<Object[]> sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(4, sortResult.size());
Assert.assertEquals(((String) sortResult.get(0)[0]).compareTo(array[0]), 0);
Assert.assertEquals(((String) sortResult.get(1)[0]).compareTo(array4[0]), 0);
Assert.assertEquals(((String) sortResult.get(2)[0]).compareTo(array3[0]), 0);
sortState.setSelectedColumnIndex(0);
sortState.getNextSortDirection();// DESC
sortResult = MatchRuleAnlaysisUtils.sortDataByColumn(sortState, sortData, columns);
Assert.assertEquals(((String) sortResult.get(0)[0]).compareTo(array2[0]), 0);
Assert.assertEquals(((String) sortResult.get(1)[0]).compareTo(array3[0]), 0);
Assert.assertEquals(((String) sortResult.get(2)[0]).compareTo(array4[0]), 0);
}
}