/** * 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.result.renderer; import java.util.Arrays; import org.eobjects.analyzer.result.Crosstab; import org.eobjects.analyzer.result.CrosstabDimension; import org.eobjects.analyzer.result.CrosstabResult; import junit.framework.TestCase; public class CrosstabTextRendererTest extends TestCase { public void testEmptyCrosstab() throws Exception { CrosstabDimension genderDimension = new CrosstabDimension("Gender"); genderDimension.addCategory("Male"); genderDimension.addCategory("Female"); CrosstabDimension regionDimension = new CrosstabDimension("Region"); Crosstab<Integer> c = new Crosstab<Integer>(Integer.class, genderDimension, regionDimension); String s = new CrosstabTextRenderer().render(new CrosstabResult(c)); assertEquals(" Male Female \n", s); } public void testSimpleCrosstab() throws Exception { Crosstab<Integer> c = new Crosstab<Integer>(Integer.class, "Gender", "Region"); c.where("Gender", "Male").where("Region", "EU").put(1, true); c.where("Gender", "Male").where("Region", "USA").put(2, true); c.where("Gender", "Female").where("Region", "EU").put(3, true); c.where("Gender", "Female").where("Region", "USA").put(4, true); String s = new CrosstabTextRenderer().render(new CrosstabResult(c)); assertEquals(" Male Female \nEU 1 3 \nUSA 2 4 \n", s); } public void testOneDimension() throws Exception { Crosstab<Integer> c = new Crosstab<Integer>(Integer.class, "Region"); c.where("Region", "EU").put(1, true); c.where("Region", "USA").put(2, true); c.where("Region", "Asia").put(3, true); CrosstabTextRenderer crosstabRenderer = new CrosstabTextRenderer(); String result = crosstabRenderer.render(c); assertEquals(" EU USA Asia \n" + " 1 2 3 \n", result.replaceAll("\"", "'")); } public void testMultipleDimensions() throws Exception { // creates a crosstab of some metric (simply iterated for simplicity) // based on person characteristica, examplified with Region (EU and // USA), Age-group (children, teenagers and adult) // and Gender (male and female) Crosstab<Integer> c = new Crosstab<Integer>(Integer.class, "Region", "Age-group", "Gender", "Native"); String[] genderValues = { "Male", "Female" }; String[] regionValues = { "EU", "USA" }; String[] ageGroupValues = { "Child", "Teenager", "Adult" }; String[] nativeValues = { "Yes", "No, immigrant", "No, second-generation" }; int i = 0; for (String gender : genderValues) { for (String region : regionValues) { for (String ageGroup : ageGroupValues) { for (String nativeValue : nativeValues) { c.where("Region", region).where("Age-group", ageGroup).where("Gender", gender) .where("Native", nativeValue).put(i, true); i++; } } } } String[] dimensionNames = c.getDimensionNames(); assertEquals("[Region, Age-group, Gender, Native]", Arrays.toString(dimensionNames)); CrosstabTextRenderer crosstabRenderer = new CrosstabTextRenderer(); // auto-assigned axises assertEquals(" EU USA \n" + " Child Teenager Adult Child Teenager Adult \n" + "Male Yes 0 3 6 9 12 15 \n" + "No, immigrant 1 4 7 10 13 16 \n" + "No, second-generation 2 5 8 11 14 17 \n" + "Female Yes 18 21 24 27 30 33 \n" + "No, immigrant 19 22 25 28 31 34 \n" + "No, second-generation 20 23 26 29 32 35 \n", crosstabRenderer .render(c).replaceAll("\"", "'")); } }