package net.sourceforge.cobertura.jdk; import static org.junit.Assert.*; import groovy.util.AntBuilder; import groovy.util.Node; import java.io.File; import net.sourceforge.cobertura.ant.ReportTask; import net.sourceforge.cobertura.test.util.TestUtils; import org.apache.commons.io.FileUtils; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.tools.ant.taskdefs.Java; import org.junit.Test; /** * This test is in here because there are a lot of issues with backward compatibility. * We compile with each jdk version to verify that the simplest test will at least produce * code coverage. * * @author schristou88 * */ public class JDKTest { static final AntBuilder ant = TestUtils.antBuilder; static Node dom; public static void setupAndExecuteTest(String jdkVersion) throws Exception { Logger.getRootLogger().setLevel(Level.ALL); FileUtils.deleteDirectory(TestUtils.getTempDir()); /* * First create the junit test structure. */ File tempDir = TestUtils.getTempDir(); File srcDir = new File(tempDir, "src"); File instrumentDir = new File(tempDir, "instrument"); instrumentDir.mkdirs(); File mainSourceFile = new File(srcDir, "mypackage/JDKTEST.java"); File datafile = new File(srcDir, "cobertura.ser"); mainSourceFile.getParentFile().mkdirs(); FileUtils.write(mainSourceFile, JDKTEST); /* * Next let's compile the test code we just made. */ TestUtils.compileSource(ant, srcDir, jdkVersion); /* * Let's now instrument all the classes. In this case we instrument with default items. */ TestUtils.instrumentClasses(ant, srcDir, datafile, instrumentDir); /* * Kick off the Main (instrumented) class. */ Java java = new Java(); java.setProject(TestUtils.project); java.setClassname("mypackage.JDKTEST"); java.setDir(srcDir); java.setFork(true); java.setFailonerror(true); java.setClasspath(TestUtils.getCoberturaDefaultClasspath()); java.setJVMVersion(jdkVersion); java.execute(); /* * Now create a cobertura xml file and make sure the correct counts are in it. */ ReportTask reportTask = new ReportTask(); reportTask.setProject(TestUtils.project); reportTask.setDataFile(datafile.getAbsolutePath()); reportTask.setFormat("xml"); reportTask.setDestDir(srcDir); reportTask.execute(); /* * */ System.out.println(srcDir.getAbsolutePath()); dom = TestUtils.getXMLReportDOM(srcDir.getAbsolutePath() + "/coverage.xml"); } @Test public void testJDK1() throws Exception { setupAndExecuteTest("1.1"); int hitCount = TestUtils.getTotalHitCount(dom, "mypackage.JDKTEST", "main"); assertEquals(2, hitCount); } @Test public void testJDK2() throws Exception { setupAndExecuteTest("1.2"); int hitCount = TestUtils.getTotalHitCount(dom, "mypackage.JDKTEST", "main"); assertEquals(2, hitCount); } @Test public void testJDK3() throws Exception { setupAndExecuteTest("1.3"); int hitCount = TestUtils.getTotalHitCount(dom, "mypackage.JDKTEST", "main"); assertEquals(2, hitCount); } @Test public void testJDK4() throws Exception { setupAndExecuteTest("1.4"); int hitCount = TestUtils.getTotalHitCount(dom, "mypackage.JDKTEST", "main"); assertEquals(2, hitCount); } @Test public void testJDK5() throws Exception { setupAndExecuteTest("1.5"); int hitCount = TestUtils.getTotalHitCount(dom, "mypackage.JDKTEST", "main"); assertEquals(2, hitCount); } @Test public void testJDK6() throws Exception { setupAndExecuteTest("1.6"); int hitCount = TestUtils.getTotalHitCount(dom, "mypackage.JDKTEST", "main"); assertEquals(2, hitCount); } @Test public void testJDK7() throws Exception { setupAndExecuteTest("1.7"); int hitCount = TestUtils.getTotalHitCount(dom, "mypackage.JDKTEST", "main"); assertEquals(2, hitCount); } static final String JDKTEST = "\n package mypackage;" + "\n " + "\n public class JDKTEST {" + "\n public static void main(String[] args) {" + "\n System.out.println(\"Hello world.\");" + "\n }" + "\n }"; }