/** * Copyright (C) 2010-2017 Gordon Fraser, Andrea Arcuri and EvoSuite * contributors * * This file is part of EvoSuite. * * EvoSuite is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3.0 of the License, or * (at your option) any later version. * * EvoSuite 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 Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with EvoSuite. If not, see <http://www.gnu.org/licenses/>. */ package org.evosuite.xsd; import static org.junit.Assert.assertEquals; import org.junit.Assert; import org.junit.Test; import java.util.Set; /** * * @author José Campos */ public class ProjectUtilTest { @Test public void testNumberTestedClasses() { Project project = new Project(); assertEquals(0, ProjectUtil.getTotalNumberTestedClasses(project)); assertEquals(0, ProjectUtil.getNumberLatestTestedClasses(project)); project.getCut().add(new CUT()); assertEquals(1, ProjectUtil.getTotalNumberTestedClasses(project)); } @Test public void testNumberTestableClasses() { Project project = new Project(); project.setTotalNumberOfTestableClasses(XSDUtils.convert(1)); assertEquals(1, ProjectUtil.getNumberTestableClasses(project)); } @Test public void testEmptyProject() { Project project = new Project(); assertEquals(0, ProjectUtil.getTotalEffort(project)); assertEquals(0, ProjectUtil.getTimeBudget(project)); assertEquals(0, ProjectUtil.getNumberGeneratedTestSuites(project)); Assert.assertTrue(ProjectUtil.getUnionCriteria(project).isEmpty()); assertEquals(0.0, ProjectUtil.getAverageNumberStatements(project), 0.0); assertEquals(0.0, ProjectUtil.getOverallCoverage(project), 0.0); assertEquals(0.0, ProjectUtil.getAverageCriterionCoverage(project, ""), 0.0); assertEquals(0.0, ProjectUtil.getAverageNumberTests(project), 0.0); } @Test public void testNonEmptyProject() { CUT c1 = new CUT(); c1.setFullNameOfTargetClass("foo.Bar"); CUT c2 = new CUT(); c2.setFullNameOfTargetClass("bar.Foo"); Project project = new Project(); project.setTotalNumberOfTestableClasses(XSDUtils.convert(2)); project.getCut().add(c1); project.getCut().add(c2); Coverage branch = new Coverage(); branch.setCriterion("Branch"); branch.setCoverageValue(0.8); Coverage exception = new Coverage(); exception.setCriterion("Exception"); exception.setCoverageValue(0.3); TestSuite suite_1 = new TestSuite(); suite_1.setNumberOfTests(XSDUtils.convert(7)); suite_1.setTotalEffortInSeconds(XSDUtils.convert(120)); suite_1.setTotalNumberOfStatements(XSDUtils.convert(35)); suite_1.getCoverage().add(branch); suite_1.getCoverage().add(exception); TestSuite suite_2 = new TestSuite(); suite_2.setNumberOfTests(XSDUtils.convert(5)); suite_2.setTotalEffortInSeconds(XSDUtils.convert(40)); suite_2.setTotalNumberOfStatements(XSDUtils.convert(25)); suite_2.getCoverage().add(branch); suite_2.getCoverage().add(exception); Generation g0_1 = new Generation(); g0_1.setId(XSDUtils.convert(0)); g0_1.setFailed(false); g0_1.setModified(true); g0_1.setTimeBudgetInSeconds(XSDUtils.convert(120)); g0_1.setSuite(suite_1); Generation g0_2 = new Generation(); g0_2.setId(XSDUtils.convert(0)); g0_2.setFailed(false); g0_2.setModified(true); g0_2.setTimeBudgetInSeconds(XSDUtils.convert(60)); g0_2.setSuite(suite_2); c1.getGeneration().add(g0_1); c2.getGeneration().add(g0_2); assertEquals(2, ProjectUtil.getNumberLatestTestedClasses(project)); // 120 seconds from c1 + 40 seconds from c2 = 160 seconds ~ 3minute assertEquals(3, ProjectUtil.getTotalEffort(project)); // 120 seconds from c1 + 60 seconds from c2 = 180 seconds = 3minute assertEquals(3, ProjectUtil.getTimeBudget(project)); assertEquals(2, ProjectUtil.getNumberGeneratedTestSuites(project)); Set<String> criteria = ProjectUtil.getUnionCriteria(project); assertEquals(2, criteria.size()); Assert.assertTrue(criteria.contains("Branch")); Assert.assertTrue(criteria.contains("Exception")); assertEquals(30, ProjectUtil.getAverageNumberStatements(project), 0.0); assertEquals(0.55, ProjectUtil.getOverallCoverage(project), 0.0); assertEquals(0.0, ProjectUtil.getAverageCriterionCoverage(project, ""), 0.0); assertEquals(0.8, ProjectUtil.getAverageCriterionCoverage(project, "Branch"), 0.0); assertEquals(0.3, ProjectUtil.getAverageCriterionCoverage(project, "Exception"), 0.0); assertEquals(6, ProjectUtil.getAverageNumberTests(project), 0.0); // now trying to make it a bit more difficult // new generation for c1 Generation g1 = new Generation(); g1.setId(XSDUtils.convert(1)); g1.setFailed(false); g1.setModified(false); g1.setTimeBudgetInSeconds(XSDUtils.convert(120)); g1.setSuite(suite_1); c1.getGeneration().add(g1); // and simulation of a skipped generation for c2 Generation g2 = new Generation(); g2.setId(XSDUtils.convert(1)); g2.setFailed(false); g2.setModified(false); g2.setTimeBudgetInSeconds(XSDUtils.convert(0)); g2.setSuite(null); c2.getGeneration().add(g2); assertEquals(1, ProjectUtil.getNumberLatestTestedClasses(project)); // this time only c1 has been tested, therefore the time settled by // the scheduler and actually spent is lower assertEquals(2, ProjectUtil.getTotalEffort(project)); assertEquals(2, ProjectUtil.getTimeBudget(project)); // however, the coverage, number of test cases, etc must be // the same as the coverage is cumulative assertEquals(2, ProjectUtil.getNumberGeneratedTestSuites(project)); assertEquals(30, ProjectUtil.getAverageNumberStatements(project), 0.0); assertEquals(0.55, ProjectUtil.getOverallCoverage(project), 0.0); assertEquals(6, ProjectUtil.getAverageNumberTests(project), 0.0); } @Test public void testCUT() { CUT cut = new CUT(); cut.setFullNameOfTargetClass("foo.Bar"); Project project = new Project(); project.getCut().add(cut); Assert.assertNull(ProjectUtil.getCUT(project, "invalid.ClassName")); Assert.assertNotNull(ProjectUtil.getCUT(project, "foo.Bar")); } @Test public void testAllSuccessfulGenerations() { CUT cut = new CUT(); Project project = new Project(); // no CUTs Assert.assertTrue(ProjectUtil.getAllSuccessfulGenerations(project).isEmpty()); // one generation that failed Generation g0 = new Generation(); g0.setId(XSDUtils.convert(0)); g0.setFailed(true); g0.setSuite(null); cut.getGeneration().add(g0); project.getCut().add(cut); assertEquals(0, ProjectUtil.getAllSuccessfulGenerations(project).size()); // one successful generation Generation g1 = new Generation(); g1.setId(XSDUtils.convert(1)); g1.setFailed(false); g1.setSuite(new TestSuite()); cut.getGeneration().add(g1); assertEquals(1, ProjectUtil.getAllSuccessfulGenerations(project).size()); } }