package net.sourceforge.cobertura.ant; import static org.junit.Assert.*; import java.io.File; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import net.sourceforge.cobertura.test.IgnoreUtil; import net.sourceforge.cobertura.test.util.TestUtils; import org.junit.Before; import org.junit.Test; import org.xml.sax.SAXException; public class IgnoreTrivialAntTest extends AbstractCoberturaAntTestCase { IgnoreUtil ignoreUtil; @Before public void setUp() throws Exception { buildXmlFile = new File("src", "/test/resources/ant/IgnoreTrivial/build.xml"); String target = "all"; super.executeAntTarget(target); } @Test public void test() throws ParserConfigurationException, SAXException, IOException { dom = TestUtils.getXMLReportDOM(new File(buildXmlFile.getParentFile(), "reports/cobertura-xml/coverage.xml")); ignoreUtil = new IgnoreUtil("mypackage.Main", dom); // trivial empty constructor assertIgnored("<init>", "()V"); // trivial constructor Main(Thread, String) that just calls super() assertIgnored("<init>", "(Ljava/lang/Thread;Ljava/lang/String;)V"); // trivial getter assertIgnored("getterTrivial"); // isBool is trivial assertIgnored("isBool"); // hasBool is trivial assertIgnored("hasBool"); // setInt is trivial assertIgnored("setInt"); // Main(int) has non-trivial switch assertNotIgnored("<init>", "(I)V"); // Main(boolean) has non-trivial conditional assertNotIgnored("<init>", "(Z)V"); // "empty" does not start with "get", "is", "has", or "set". assertNotIgnored("empty"); // gets with no return are considered non-trivial assertNotIgnored("getVoid"); // gets that have parameters are considered non-trivial assertNotIgnored("getIntWithIntParm"); // sets that have no parameters are considered non-trivial assertNotIgnored("set"); // sets that have more than one parameters are considered non-trivial assertNotIgnored("setIntWithTwoParms"); // don't ignore methods with multi-dimensional array creates assertNotIgnored("getMultiDimArray"); // don't ignore methods with increment instructions for local variables assertNotIgnored("setIncrement"); // don't ignore methods with LDC instructions (that use constants from the runtime pool) assertNotIgnored("setConst"); assertNotIgnored("<init>", "(Ljava/lang/Thread;I)V"); // Main(Thread, int) // don't ignore methods with a single int operand (like creating an array). assertNotIgnored("getArray"); // don't ignore methods with type instructions (like creating an object). assertNotIgnored("getObject"); // don't ignore methods that use statics. assertNotIgnored("getStatic"); assertNotIgnored("setStatic"); assertNotIgnored("<init>", "(Ljava/lang/String;)V"); // non-trivial local variable instructions (causes visitVarInsn call) assertNotIgnored("setISTORE"); assertNotIgnored("setLSTORE"); assertNotIgnored("setFSTORE"); assertNotIgnored("setDSTORE"); assertNotIgnored("setASTORE"); // non-trivial method calls assertNotIgnored("getINVOKEVIRTUAL"); assertNotIgnored("getINVOKESPECIAL"); assertNotIgnored("getINVOKESTATIC"); assertNotIgnored("setINVOKEINTERFACE"); assertNotIgnored("<init>", "(Ljava/lang/String;Ljava/lang/String;)V"); // Main(String, String) assertNotIgnored("<init>", "(Ljava/lang/String;I)V"); // Main(String, int) assertNotIgnored("<init>", "(Ljava/lang/String;Z)V"); // Main(String, boolean) } public void assertIgnored(String methodName, String signature) { ignoreUtil.assertIgnored(methodName, signature); } public void assertIgnored(String methodName) { assertIgnored(methodName, null); } public void assertNotIgnored(String methodName, String signature) { ignoreUtil.assertNotIgnored(methodName, signature); } public void assertNotIgnored(String methodName) { assertNotIgnored(methodName, null); } }