package hudson.plugins.testabilityexplorer.parser; import org.apache.tools.ant.filters.StringInputStream; import org.xmlpull.v1.XmlPullParserException; import java.io.InputStream; import java.io.IOException; import java.util.Collection; import java.util.ArrayList; import hudson.plugins.testabilityexplorer.report.costs.Statistic; import hudson.plugins.testabilityexplorer.report.costs.MethodCost; import hudson.plugins.testabilityexplorer.report.costs.ClassCost; import hudson.plugins.testabilityexplorer.report.costs.CostSummary; import hudson.plugins.testabilityexplorer.parser.selectors.DefaultConverterSelector; import hudson.plugins.testabilityexplorer.parser.selectors.ConverterSelector; import hudson.plugins.testabilityexplorer.PluginBaseTest; import hudson.model.AbstractBuild; import static org.testng.Assert.*; import org.testng.annotations.Test; import static org.mockito.Mockito.*; /** * Tests the {@link Statistic} class. * * @author reik.schatz */ @Test public class StatisticTest extends PluginBaseTest { public void testParse() throws IOException, XmlPullParserException { InputStream inputStream = new StringInputStream(createReportXml()); ConverterSelector converterSelector = new DefaultConverterSelector(); StatisticsParser statisticsParser = new XmlStatisticsParser(converterSelector); Collection<Statistic> statistics = statisticsParser.parse(inputStream); assertEquals(1, statistics.size()); Statistic statistic = (Statistic) statistics.toArray() [0]; CostSummary summary = statistic.getCostSummary(); assertNotNull(summary); assertEquals(6, summary.getExcellent()); assertEquals(3, summary.getGood()); assertEquals(0, summary.getNeedsWork()); assertEquals(40, summary.getTotal()); Collection<ClassCost> costStack = summary.getCostStack(); assertFalse(costStack.isEmpty()); assertEquals(9, costStack.size()); ClassCost ipLookupResultsPage = (ClassCost) costStack.toArray() [0]; assertEquals(59, ipLookupResultsPage.getCost()); assertEquals("com.ongame.bo.bofraud.markup.pages.IpLookupResultsPage", ipLookupResultsPage.getName()); Collection<MethodCost> methodCosts = ipLookupResultsPage.getCostStack(); assertFalse(methodCosts.isEmpty()); assertEquals(8, methodCosts.size()); MethodCost method1 = (MethodCost) methodCosts.toArray() [0]; assertEquals(50, method1.getCyclomatic()); assertEquals(1, method1.getGlobal()); assertEquals(76, method1.getLine()); assertEquals(0, method1.getLod()); assertEquals("void addIpInfo()", method1.getName()); assertEquals(60, method1.getOverall()); assertEquals("", method1.getReason()); Collection<MethodCost> costDetails = method1.getCostStack(); assertEquals(37, costDetails.size()); MethodCost costDetail = (MethodCost) costDetails.toArray() [0]; assertEquals(1, costDetail.getCyclomatic()); assertEquals(1, costDetail.getGlobal()); assertEquals(1511, costDetail.getLine()); assertEquals(0, costDetail.getLod()); assertEquals("void setFormComponentValuesFromCookies()", costDetail.getName()); assertEquals(11, costDetail.getOverall()); assertEquals("implicit cost calling all setters", costDetail.getReason()); } public void testEqualsAndHashcode() { CostSummary costSummary = new CostSummary(1, 2, 3, 20); Statistic s1 = new ArrayList<Statistic>(createStatistics(false, costSummary)).get(0); assertFalse(s1.equals(null)); assertFalse(s1.equals("foo")); assertFalse(s1.equals(costSummary)); assertTrue(s1.equals(s1)); assertTrue(s1.hashCode() == s1.hashCode()); AbstractBuild<?, ?> build1 = mock(AbstractBuild.class); stub(build1.toString()).toReturn("Build 1"); s1.setOwner(build1); assertFalse(s1.equals(null)); assertFalse(s1.equals("foo")); assertFalse(s1.equals(costSummary)); assertTrue(s1.equals(s1)); assertTrue(s1.hashCode() == s1.hashCode()); Statistic s2 = new ArrayList<Statistic>(createStatistics(false, costSummary)).get(0); assertFalse(s1.equals(s2)); assertFalse(s1.hashCode() == s2.hashCode()); assertFalse(s2.equals(s1)); assertFalse(s2.hashCode() == s1.hashCode()); s2.setOwner(build1); assertTrue(s1.equals(s2)); assertTrue(s1.hashCode() == s2.hashCode()); assertTrue(s2.equals(s1)); assertTrue(s2.hashCode() == s1.hashCode()); CostSummary costSummary2 = new CostSummary(1234, 25, 343, 230); Statistic s3 = new ArrayList<Statistic>(createStatistics(false, costSummary2)).get(0); s3.setOwner(build1); assertTrue(s2.equals(s3)); assertTrue(s2.hashCode() == s3.hashCode()); assertTrue(s1.equals(s3)); assertTrue(s1.hashCode() == s3.hashCode()); CostSummary costSummary3 = new CostSummary(34, 325, 3543, 2630); Statistic s4 = new ArrayList<Statistic>(createStatistics(false, costSummary3)).get(0); AbstractBuild<?, ?> build2 = mock(AbstractBuild.class); stub(build2.toString()).toReturn("Another Build"); s4.setOwner(build2); assertFalse(s4.equals(s1)); assertFalse(s4.hashCode() == s1.hashCode()); assertFalse(s4.equals(s2)); assertFalse(s4.hashCode() == s2.hashCode()); assertFalse(s4.equals(s3)); assertFalse(s4.hashCode() == s3.hashCode()); assertTrue(s4.equals(s4)); assertTrue(s4.hashCode() == s4.hashCode()); } }