All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.evosuite.contracts.FailingTestSet Maven / Gradle / Ivy

/**
 * Copyright (C) 2010-2018 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 .
 */
/**
 * 
 */
package org.evosuite.contracts;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

import org.evosuite.Properties;
import org.evosuite.junit.writer.TestSuiteWriter;
import org.evosuite.rmi.ClientServices;
import org.evosuite.statistics.RuntimeVariable;
import org.evosuite.testcase.TestCase;
import org.evosuite.testcase.execution.TestCaseExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 

* FailingTestSet class. *

* * @author Gordon Fraser */ public class FailingTestSet { private static Logger logger = LoggerFactory.getLogger(FailingTestSet.class); /* * FIXME: if actually used, need way to reset them */ /** The violated tracked */ private static final List violations = new ArrayList(); private static int violationCount = 0; public static void addFailingTest(ContractViolation violation) { violationCount++; if(!hasViolation(violation)) { violations.add(violation); } } /** * How many violations have we observed in total? * * @return a int. */ public static int getNumberOfViolations() { return violationCount; } /** * How many violations of this contract have we observed in total? * * @param contract * a {@link org.evosuite.contracts.Contract} object. * @return a int. */ public static int getNumberOfViolations(Contract contract) { int num = 0; for (ContractViolation violation : violations) { if (violation.getContract().equals(contract)) num++; } return num; } /** * How many violations of this contract have we observed in total? * * @param contractClass * a {@link java.lang.Class} object. * @return a int. */ public static int getNumberOfViolations(Class contractClass) { int num = 0; for (ContractViolation violation : violations) { if (violation.getContract().getClass().equals(contractClass)) num++; } return num; } /** * How many unique violations have we observed? * * @return a int. */ public static int getNumberOfUniqueViolations() { return violations.size(); } public static Collection getContractViolations() { return Collections.unmodifiableCollection(violations); } public static List getFailingTests() { List tests = new ArrayList(); ContractChecker.setActive(false); TestCaseExecutor.getInstance().newObservers(); for (int i = 0; i < violations.size(); i++) { logger.debug("Writing test {}/{}", i, violations.size()); ContractViolation violation = violations.get(i); violation.minimizeTest(); TestCase test = violation.getTestCase(); //violation.addAssertion(test); tests.add(test); } return tests; } /** * Output the failing tests in a JUnit test suite */ public static void writeJUnitTestSuite() { logger.info("Writing {} failing tests", violations.size()); TestSuiteWriter writer = new TestSuiteWriter(); writeJUnitTestSuite(writer); String name = Properties.TARGET_CLASS.substring(Properties.TARGET_CLASS.lastIndexOf(".") + 1); String testDir = Properties.TEST_DIR; writer.writeTestSuite("Failures" + name, testDir, Collections.emptyList()); } /** * Output the failing tests in a JUnit test suite */ public static void writeJUnitTestSuite(TestSuiteWriter writer) { logger.info("Writing {} failing tests", violations.size()); ContractChecker.setActive(false); TestCaseExecutor.getInstance().newObservers(); for (int i = 0; i < violations.size(); i++) { logger.debug("Writing test {}/{}", i, violations.size()); ContractViolation violation = violations.get(i); violation.minimizeTest(); TestCase test = violation.getTestCase(); test.addContractViolation(violation); //violation.addAssertion(test); // TODO: Add comment about contract violation writer.insertTest(test, " Contract violation: " + violation.getContract().toString()); } } /** * Determine if we already have an instance of this violation * * @param violation * a {@link org.evosuite.contracts.ContractViolation} object. * @return a boolean. */ public static boolean hasViolation(ContractViolation violation) { for (ContractViolation oldViolation : violations) { if (oldViolation.same(violation)) return true; } return false; } public static void changeClassLoader(ClassLoader classLoader) { for(ContractViolation violation : violations) { violation.changeClassLoader(classLoader); } } public static void clear() { violations.clear(); violationCount = 0; } public static void sendStatistics() { if(!Properties.NEW_STATISTICS) return; ClientServices.getInstance().getClientNode().trackOutputVariable(RuntimeVariable.AssertionContract, getNumberOfViolations(AssertionErrorContract.class)); ClientServices.getInstance().getClientNode().trackOutputVariable(RuntimeVariable.EqualsContract, getNumberOfViolations(EqualsContract.class)); ClientServices.getInstance().getClientNode().trackOutputVariable(RuntimeVariable.EqualsHashcodeContract, getNumberOfViolations(EqualsHashcodeContract.class)); ClientServices.getInstance().getClientNode().trackOutputVariable(RuntimeVariable.EqualsNullContract, getNumberOfViolations(EqualsNullContract.class)); ClientServices.getInstance().getClientNode().trackOutputVariable(RuntimeVariable.EqualsSymmetricContract, getNumberOfViolations(EqualsSymmetricContract.class)); ClientServices.getInstance().getClientNode().trackOutputVariable(RuntimeVariable.HashCodeReturnsNormallyContract, getNumberOfViolations(HashCodeReturnsNormallyContract.class)); ClientServices.getInstance().getClientNode().trackOutputVariable(RuntimeVariable.JCrasherExceptionContract, getNumberOfViolations(JCrasherExceptionContract.class)); ClientServices.getInstance().getClientNode().trackOutputVariable(RuntimeVariable.NullPointerExceptionContract, getNumberOfViolations(NullPointerExceptionContract.class)); ClientServices.getInstance().getClientNode().trackOutputVariable(RuntimeVariable.ToStringReturnsNormallyContract, getNumberOfViolations(ToStringReturnsNormallyContract.class)); ClientServices.getInstance().getClientNode().trackOutputVariable(RuntimeVariable.UndeclaredExceptionContract, getNumberOfViolations(UndeclaredExceptionContract.class)); ClientServices.getInstance().getClientNode().trackOutputVariable(RuntimeVariable.Contract_Violations, getNumberOfViolations()); ClientServices.getInstance().getClientNode().trackOutputVariable(RuntimeVariable.Unique_Violations, getNumberOfUniqueViolations()); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy