/** * AnalyzerBeans * 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.eobjects.analyzer.beans; import java.util.Set; import javax.swing.table.TableModel; import junit.framework.TestCase; import org.eobjects.analyzer.data.InputColumn; import org.eobjects.analyzer.data.MockInputColumn; import org.eobjects.analyzer.data.MockInputRow; import org.eobjects.analyzer.descriptors.AnalyzerBeanDescriptor; import org.eobjects.analyzer.descriptors.ConfiguredPropertyDescriptor; import org.eobjects.analyzer.descriptors.Descriptors; import org.eobjects.analyzer.descriptors.MetricDescriptor; import org.eobjects.analyzer.result.AnnotatedRowsResult; import org.eobjects.analyzer.result.CrosstabResult; import org.eobjects.analyzer.result.renderer.CrosstabTextRenderer; @SuppressWarnings("deprecation") public class StringAnalyzerTest extends TestCase { private InputColumn<String> c1; private InputColumn<String> c2; private StringAnalyzer stringAnalyzer; @SuppressWarnings("unchecked") @Override protected void setUp() throws Exception { super.setUp(); c1 = new MockInputColumn<String>("greetings", String.class); c2 = new MockInputColumn<String>("greeters", String.class); stringAnalyzer = new StringAnalyzer(c1, c2); } public void testTypicalExample() throws Exception { stringAnalyzer.run(new MockInputRow().put(c1, "Hello").put(c2, "world"), 1); stringAnalyzer.run(new MockInputRow().put(c1, "howdy").put(c2, "the universe"), 1); stringAnalyzer.run(new MockInputRow().put(c1, "Hey").put(c2, "country"), 1); stringAnalyzer.run(new MockInputRow().put(c1, "hi").put(c2, "stranger"), 1); CrosstabResult result = stringAnalyzer.getResult(); assertEquals(Number.class, result.getCrosstab().getValueClass()); String renderedResult = new CrosstabTextRenderer().render(result); String[] resultLines = renderedResult.split("\n"); assertEquals(22, resultLines.length); int i=0; assertEquals(" greetings greeters ", resultLines[i++]); assertEquals("Row count 4 4 ", resultLines[i++]); assertEquals("Null count 0 0 ", resultLines[i++]); assertEquals("Blank count 0 0 ", resultLines[i++]); assertEquals("Entirely uppercase count 0 0 ", resultLines[i++]); assertEquals("Entirely lowercase count 2 4 ", resultLines[i++]); assertEquals("Total char count 15 32 ", resultLines[i++]); assertEquals("Max chars 5 12 ", resultLines[i++]); assertEquals("Min chars 2 5 ", resultLines[i++]); assertEquals("Avg chars 3.75 8 ", resultLines[i++]); assertEquals("Max white spaces 0 1 ", resultLines[i++]); assertEquals("Min white spaces 0 0 ", resultLines[i++]); assertEquals("Avg white spaces 0 0.25 ", resultLines[i++]); assertEquals("Uppercase chars 2 0 ", resultLines[i++]); assertEquals("Uppercase chars (excl. first letters) 0 0 ", resultLines[i++]); assertEquals("Lowercase chars 13 31 ", resultLines[i++]); assertEquals("Digit chars 0 0 ", resultLines[i++]); assertEquals("Diacritic chars 0 0 ", resultLines[i++]); assertEquals("Non-letter chars 0 1 ", resultLines[i++]); assertEquals("Word count 4 5 ", resultLines[i++]); assertEquals("Max words 1 2 ", resultLines[i++]); assertEquals("Min words 1 1 ", resultLines[i++]); } public void testOddValuesWithMoreThanOneDistinctCount() throws Exception { // notice the non-1 "distinctCount" stringAnalyzer.run(new MockInputRow().put(c1, "HELLO").put(c2, " "), 1); stringAnalyzer.run(new MockInputRow().put(c1, "HÖWDY").put(c2, null), 3); stringAnalyzer.run(new MockInputRow().put(c1, " HËJSÄN").put(c2, "eobjects.org"), 1); stringAnalyzer.run(new MockInputRow().put(c1, "SØREN SEN").put(c2, "- hi"), 4); StringAnalyzerResult result = stringAnalyzer.getResult(); assertEquals(Number.class, result.getCrosstab().getValueClass()); String renderedResult = new CrosstabTextRenderer().render(result); String[] resultLines = renderedResult.split("\n"); assertEquals(22, resultLines.length); int i=0; assertEquals(" greetings greeters ", resultLines[i++]); assertEquals("Row count 9 9 ", resultLines[i++]); assertEquals("Null count 0 3 ", resultLines[i++]); assertEquals("Blank count 0 0 ", resultLines[i++]); assertEquals("Entirely uppercase count 9 0 ", resultLines[i++]); assertEquals("Entirely lowercase count 0 5 ", resultLines[i++]); assertEquals("Total char count 63 30 ", resultLines[i++]); assertEquals("Max chars 9 12 ", resultLines[i++]); assertEquals("Min chars 5 2 ", resultLines[i++]); assertEquals("Avg chars 6.5 6 ", resultLines[i++]); assertEquals("Max white spaces 1 2 ", resultLines[i++]); assertEquals("Min white spaces 0 0 ", resultLines[i++]); assertEquals("Avg white spaces 0.5 1 ", resultLines[i++]); assertEquals("Uppercase chars 58 0 ", resultLines[i++]); assertEquals("Uppercase chars (excl. first letters) 49 0 ", resultLines[i++]); assertEquals("Lowercase chars 0 19 ", resultLines[i++]); assertEquals("Digit chars 0 0 ", resultLines[i++]); assertEquals("Diacritic chars 9 0 ", resultLines[i++]); assertEquals("Non-letter chars 5 11 ", resultLines[i++]); assertEquals("Word count 13 9 ", resultLines[i++]); assertEquals("Max words 2 2 ", resultLines[i++]); assertEquals("Min words 1 0 ", resultLines[i++]); AnnotatedRowsResult drillResult = (AnnotatedRowsResult) result.getCrosstab() .where("Measures", "Max white spaces").where("Column", "greetings").explore().getResult(); assertEquals(5, drillResult.getAnnotation().getRowCount()); TableModel tableModel = drillResult.toTableModel(); // assert the default table model consists of the detailed rows assertEquals(2, tableModel.getColumnCount()); assertEquals(2, tableModel.getRowCount()); assertEquals("greetings", tableModel.getColumnName(0)); assertEquals("greeters", tableModel.getColumnName(1)); assertEquals(" HËJSÄN", tableModel.getValueAt(0, 0).toString()); assertEquals("eobjects.org", tableModel.getValueAt(0, 1).toString()); assertEquals("SØREN SEN", tableModel.getValueAt(1, 0).toString()); assertEquals("- hi", tableModel.getValueAt(1, 1).toString()); tableModel = drillResult.toDistinctValuesTableModel(c1); // assert the distinct values table model contains the greeings with // whitespaces and their counts assertEquals(2, tableModel.getColumnCount()); assertEquals(2, tableModel.getColumnCount()); assertEquals("greetings", tableModel.getColumnName(0)); assertEquals("Count in dataset", tableModel.getColumnName(1)); assertEquals("SØREN SEN", tableModel.getValueAt(0, 0)); assertEquals(4, tableModel.getValueAt(0, 1)); assertEquals(" HËJSÄN", tableModel.getValueAt(1, 0)); assertEquals(1, tableModel.getValueAt(1, 1)); } public void testNoRows() throws Exception { @SuppressWarnings("unchecked") StringAnalyzer stringAnalyzer = new StringAnalyzer(c1, c2); CrosstabResult result = stringAnalyzer.getResult(); assertEquals(Number.class, result.getCrosstab().getValueClass()); String renderedResult = new CrosstabTextRenderer().render(result); String[] resultLines = renderedResult.split("\n"); assertEquals(22, resultLines.length); int i=0; assertEquals(" greetings greeters ", resultLines[i++]); assertEquals("Row count 0 0 ", resultLines[i++]); assertEquals("Null count 0 0 ", resultLines[i++]); assertEquals("Blank count 0 0 ", resultLines[i++]); assertEquals("Entirely uppercase count 0 0 ", resultLines[i++]); assertEquals("Entirely lowercase count 0 0 ", resultLines[i++]); assertEquals("Total char count 0 0 ", resultLines[i++]); assertEquals("Max chars <null> <null> ", resultLines[i++]); assertEquals("Min chars <null> <null> ", resultLines[i++]); assertEquals("Avg chars <null> <null> ", resultLines[i++]); assertEquals("Max white spaces <null> <null> ", resultLines[i++]); assertEquals("Min white spaces <null> <null> ", resultLines[i++]); assertEquals("Avg white spaces <null> <null> ", resultLines[i++]); assertEquals("Uppercase chars 0 0 ", resultLines[i++]); assertEquals("Uppercase chars (excl. first letters) 0 0 ", resultLines[i++]); assertEquals("Lowercase chars 0 0 ", resultLines[i++]); assertEquals("Digit chars 0 0 ", resultLines[i++]); assertEquals("Diacritic chars 0 0 ", resultLines[i++]); assertEquals("Non-letter chars 0 0 ", resultLines[i++]); assertEquals("Word count 0 0 ", resultLines[i++]); assertEquals("Max words <null> <null> ", resultLines[i++]); assertEquals("Min words <null> <null> ", resultLines[i++]); } public void testMetricDescriptor() throws Exception { AnalyzerBeanDescriptor<org.eobjects.analyzer.beans.StringAnalyzer> descriptor = Descriptors .ofAnalyzer(StringAnalyzer.class); MetricDescriptor metric = descriptor.getResultMetric(StringAnalyzer.MEASURE_ENTIRELY_LOWERCASE_COUNT); assertEquals("MetricDescriptorImpl[name=Entirely lowercase count]", metric.toString()); assertTrue(metric.isParameterizedByInputColumn()); assertFalse(metric.isParameterizedByString()); } }