diff options
author | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2016-08-17 22:15:54 +0200 |
---|---|---|
committer | Evgeny Mandrikov <Godin@users.noreply.github.com> | 2016-08-17 22:15:54 +0200 |
commit | e26ee1e398c838e0d300e67d1fe4788fc73ff63a (patch) | |
tree | bf17b55258c6b67ee0c4ee168084a11d47ca5863 /org.jacoco.core.test | |
parent | 54334f20cfd15dbd62929ed77464a7fcf3353ef8 (diff) | |
download | jacoco-e26ee1e398c838e0d300e67d1fe4788fc73ff63a.tar.gz |
Improve ValidationTestBase (#440)
- Allow multiple classes to be instrumented from a package
- Common validation test base for "bad cycles test"
- Use "main(String[])" method as common execution interface
- Use identifiers for all line tags
Diffstat (limited to 'org.jacoco.core.test')
30 files changed, 128 insertions, 278 deletions
diff --git a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/BadCycleInterfaceTest.java b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/BadCycleInterfaceTest.java index 1b76d98d..59ec6390 100644 --- a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/BadCycleInterfaceTest.java +++ b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/BadCycleInterfaceTest.java @@ -18,7 +18,7 @@ import org.junit.Test; /** * Test of "bad cycles" with interfaces. */ -public class BadCycleInterfaceTest extends BadCycleTestBase { +public class BadCycleInterfaceTest extends ValidationTestBase { public BadCycleInterfaceTest() throws Exception { super("src-java8", BadCycleInterface.class); @@ -26,18 +26,16 @@ public class BadCycleInterfaceTest extends BadCycleTestBase { @Test public void test() throws Exception { - loader.loadClass(BadCycleInterface.Child.class.getName()) - .getMethod("childStaticMethod").invoke(null); - - analyze(BadCycleInterface.Child.class); - if (System.getProperty("java.version").startsWith("9-ea")) { // JDK-9042842 - assertLine("2", ICounter.NOT_COVERED); + assertLine("baseclinit", ICounter.EMPTY); + assertLine("childdefault", ICounter.NOT_COVERED); } else { - assertLine("2", ICounter.FULLY_COVERED); + assertLine("baseclinit", ICounter.FULLY_COVERED); + assertLine("childdefault", ICounter.FULLY_COVERED); } - assertLine("4", ICounter.FULLY_COVERED); + assertLine("childclinit", ICounter.FULLY_COVERED); + assertLine("childstatic", ICounter.FULLY_COVERED); } } diff --git a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/InterfaceDefaultMethodsTest.java b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/InterfaceDefaultMethodsTest.java index 66c3843d..c93eda8c 100644 --- a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/InterfaceDefaultMethodsTest.java +++ b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/InterfaceDefaultMethodsTest.java @@ -24,11 +24,6 @@ public class InterfaceDefaultMethodsTest extends ValidationTestBase { super("src-java8", InterfaceDefaultMethodsTarget.class); } - @Override - protected void run(final Class<?> targetClass) throws Exception { - loader.add(InterfaceDefaultMethodsTarget.Impl.class).newInstance(); - } - @Test public void testCoverageResult() { assertLine("clinit", ICounter.FULLY_COVERED); diff --git a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/InterfaceOnlyDefaultMethodsTest.java b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/InterfaceOnlyDefaultMethodsTest.java index 24553d70..6d1d1ce9 100644 --- a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/InterfaceOnlyDefaultMethodsTest.java +++ b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/InterfaceOnlyDefaultMethodsTest.java @@ -24,11 +24,6 @@ public class InterfaceOnlyDefaultMethodsTest extends ValidationTestBase { super("src-java8", InterfaceOnlyDefaultMethodsTarget.class); } - @Override - protected void run(final Class<?> targetClass) throws Exception { - loader.add(InterfaceOnlyDefaultMethodsTarget.Impl.class).newInstance(); - } - @Test public void testCoverageResult() { assertLine("m1", ICounter.FULLY_COVERED); diff --git a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/LambdaExpressionsTest.java b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/LambdaExpressionsTest.java index 22dce21d..12b4c6ea 100644 --- a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/LambdaExpressionsTest.java +++ b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/LambdaExpressionsTest.java @@ -24,12 +24,6 @@ public class LambdaExpressionsTest extends ValidationTestBase { super("src-java8", LambdaExpressionsTarget.class); } - @Override - protected void run(final Class<?> targetClass) throws Exception { - final Object instance = targetClass.newInstance(); - ((Runnable) instance).run(); - } - @Test public void testCoverageResult() { diff --git a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/BadCycleInterface.java b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/BadCycleInterface.java index c2b1519f..73ff3349 100644 --- a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/BadCycleInterface.java +++ b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/BadCycleInterface.java @@ -16,7 +16,7 @@ public class BadCycleInterface { public interface Base { static final Object BASE_CONST = new Child() { { - Stubs.nop("base clinit"); // $line-1$ + Stubs.nop("base clinit"); // $line-baseclinit$ } }.childDefaultMethod(); @@ -27,17 +27,17 @@ public class BadCycleInterface { public interface Child extends Base { static final Object CHILD_CONST = new Object() { { - Stubs.nop("child clinit"); // $line-3$ + Stubs.nop("child clinit"); // $line-childclinit$ } }; default Object childDefaultMethod() { - Stubs.nop("child default method"); // $line-2$ + Stubs.nop("child default method"); // $line-childdefault$ return null; } static void childStaticMethod() { - Stubs.nop("child static method"); // $line-4$ + Stubs.nop("child static method"); // $line-childstatic$ } } diff --git a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/InterfaceDefaultMethodsTarget.java b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/InterfaceDefaultMethodsTarget.java index 4bd91b39..76964ebe 100644 --- a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/InterfaceDefaultMethodsTarget.java +++ b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/InterfaceDefaultMethodsTarget.java @@ -34,5 +34,9 @@ public interface InterfaceDefaultMethodsTarget { m1(); } } + + public static void main(String[] args) { + new Impl(); + } } diff --git a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/InterfaceOnlyDefaultMethodsTarget.java b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/InterfaceOnlyDefaultMethodsTarget.java index a27409e9..b2d09f66 100644 --- a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/InterfaceOnlyDefaultMethodsTarget.java +++ b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/InterfaceOnlyDefaultMethodsTarget.java @@ -33,4 +33,8 @@ public interface InterfaceOnlyDefaultMethodsTarget { } } + public static void main(String[] args) { + new Impl(); + } + } diff --git a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/LambdaExpressionsTarget.java b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/LambdaExpressionsTarget.java index e5e33c89..e1b9b2dd 100644 --- a/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/LambdaExpressionsTarget.java +++ b/org.jacoco.core.test/src-java8/org/jacoco/core/test/validation/targets/LambdaExpressionsTarget.java @@ -18,11 +18,10 @@ import static org.jacoco.core.test.validation.targets.Stubs.nop; /** * This test target contains different lambda expressions. */ -public class LambdaExpressionsTarget implements Runnable { +public class LambdaExpressionsTarget { + + public static void main(String[] args) { - @Override - public void run() { - exec(() -> { nop(); // $line-executedlambdabody$ }); @@ -30,11 +29,7 @@ public class LambdaExpressionsTarget implements Runnable { noexec(() -> { nop(); // $line-notexecutedlambdabody$ }); - - } - public static void main(String[] args) { - new LambdaExpressionsTarget().run(); } } diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/InstrumentingLoader.java b/org.jacoco.core.test/src/org/jacoco/core/test/InstrumentingLoader.java index 99bbaedb..c3002177 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/InstrumentingLoader.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/InstrumentingLoader.java @@ -12,7 +12,6 @@ package org.jacoco.core.test; import java.io.IOException; -import java.io.InputStream; import org.jacoco.core.data.ExecutionDataStore; import org.jacoco.core.data.SessionInfoStore; @@ -21,31 +20,47 @@ import org.jacoco.core.runtime.IRuntime; import org.jacoco.core.runtime.RuntimeData; import org.jacoco.core.runtime.SystemPropertiesRuntime; +/** + * Class loader which loads classes from another class loader and instruments + * them. + */ public final class InstrumentingLoader extends ClassLoader { - private final RuntimeData data; private final IRuntime runtime; + private final String scope; + private final ClassLoader delegate; + + private final RuntimeData data; + private final Instrumenter instrumenter; - public InstrumentingLoader() throws Exception { - data = new RuntimeData(); - runtime = new SystemPropertiesRuntime(); + public InstrumentingLoader(IRuntime runtime, String scope, + ClassLoader delegate) throws Exception { + this.runtime = runtime; + this.scope = scope; + this.delegate = delegate; + this.data = new RuntimeData(); runtime.startup(data); + this.instrumenter = new Instrumenter(runtime); + } + + public InstrumentingLoader(Class<?> target) throws Exception { + this(new SystemPropertiesRuntime(), target.getPackage().getName(), + target.getClassLoader()); } @Override protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { - if (name.startsWith("org.jacoco.core.test.validation.targets.")) { + if (name.startsWith(scope)) { final byte[] bytes; try { - bytes = getClassBytes(name); + bytes = TargetLoader.getClassDataAsBytes(delegate, name); } catch (IOException e) { throw new ClassNotFoundException("Unable to load", e); } final byte[] instrumented; try { - instrumented = new Instrumenter(runtime).instrument(bytes, - name); + instrumented = instrumenter.instrument(bytes, name); } catch (IOException e) { throw new ClassNotFoundException("Unable to instrument", e); } @@ -59,12 +74,6 @@ public final class InstrumentingLoader extends ClassLoader { return super.loadClass(name, resolve); } - public byte[] getClassBytes(String name) throws IOException { - final String resource = "/" + name.replace('.', '/') + ".class"; - final InputStream in = getClass().getResourceAsStream(resource); - return TargetLoader.getClassDataAsBytes(in); - } - public ExecutionDataStore collect() { final ExecutionDataStore store = new ExecutionDataStore(); data.collect(store, new SessionInfoStore(), false); diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java b/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java index de54015f..67ace906 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java @@ -18,7 +18,7 @@ import java.util.HashMap; import java.util.Map; /** - * Loads a single class from a byte array. + * Loads given classes from a byte arrays. */ public class TargetLoader extends ClassLoader { @@ -38,10 +38,6 @@ public class TargetLoader extends ClassLoader { return add(name.getName(), bytes); } - public Class<?> add(final Class<?> source) throws IOException { - return add(source.getName(), getClassDataAsBytes(source)); - } - private Class<?> load(final String sourcename) { try { return loadClass(sourcename); @@ -52,17 +48,24 @@ public class TargetLoader extends ClassLoader { } public static InputStream getClassData(Class<?> clazz) { - final String resource = "/" + clazz.getName().replace('.', '/') - + ".class"; - return clazz.getResourceAsStream(resource); + return getClassData(clazz.getClassLoader(), clazz.getName()); + } + + public static InputStream getClassData(ClassLoader loader, String name) { + final String resource = name.replace('.', '/') + ".class"; + return loader.getResourceAsStream(resource); + } + + public static byte[] getClassDataAsBytes(ClassLoader loader, String name) + throws IOException { + return readBytes(getClassData(loader, name)); } public static byte[] getClassDataAsBytes(Class<?> clazz) throws IOException { - return getClassDataAsBytes(getClassData(clazz)); + return readBytes(getClassData(clazz)); } - public static byte[] getClassDataAsBytes(InputStream in) throws - IOException { + private static byte[] readBytes(InputStream in) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buffer = new byte[0x100]; int len; diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/BadCycleClassTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/BadCycleClassTest.java index 47820e68..cbf3c35b 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/BadCycleClassTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/BadCycleClassTest.java @@ -18,7 +18,7 @@ import org.junit.Test; /** * Test of "bad cycles" with classes. */ -public class BadCycleClassTest extends BadCycleTestBase { +public class BadCycleClassTest extends ValidationTestBase { public BadCycleClassTest() throws Exception { super(BadCycleClass.class); @@ -26,12 +26,9 @@ public class BadCycleClassTest extends BadCycleTestBase { @Test public void test() throws Exception { - loader.loadClass(BadCycleClass.Child.class.getName()).newInstance(); - - analyze(BadCycleClass.Child.class); - assertLine("1", ICounter.FULLY_COVERED); - assertLine("2", ICounter.FULLY_COVERED); - assertLine("3", ICounter.FULLY_COVERED); + assertLine("childinit", ICounter.FULLY_COVERED); + assertLine("childsomeMethod", ICounter.FULLY_COVERED); + assertLine("childclinit", ICounter.FULLY_COVERED); } } diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/BadCycleTestBase.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/BadCycleTestBase.java deleted file mode 100644 index dd7b4992..00000000 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/BadCycleTestBase.java +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2016 Mountainminds GmbH & Co. KG and Contributors - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Evgeny Mandrikov - initial API and implementation - * - *******************************************************************************/ -package org.jacoco.core.test.validation; - -import static org.junit.Assert.assertEquals; - -import java.io.IOException; -import java.util.Collection; - -import org.jacoco.core.analysis.Analyzer; -import org.jacoco.core.analysis.CoverageBuilder; -import org.jacoco.core.analysis.IClassCoverage; -import org.jacoco.core.analysis.ISourceFileCoverage; -import org.jacoco.core.data.ExecutionDataStore; -import org.jacoco.core.test.InstrumentingLoader; - -class BadCycleTestBase extends ValidationTestBase { - - protected final InstrumentingLoader loader = new InstrumentingLoader(); - - BadCycleTestBase(final Class<?> target) throws Exception { - super(target); - } - - BadCycleTestBase(final String srcFolder, final Class<?> target) - throws Exception { - super(srcFolder, target); - } - - @Override - public final void setup() throws Exception { - // nop - } - - @Override - protected final void run(Class<?> targetClass) throws Exception { - // nop - } - - final void analyze(Class<?> cls) throws IOException { - final byte[] bytes = loader.getClassBytes(cls.getName()); - final ExecutionDataStore store = loader.collect(); - - final CoverageBuilder builder = new CoverageBuilder(); - final Analyzer analyzer = new Analyzer(store, builder); - analyzer.analyzeClass(bytes, "TestTarget"); - final Collection<IClassCoverage> classes = builder.getClasses(); - assertEquals(1, classes.size(), 0.0); - classCoverage = classes.iterator().next(); - final Collection<ISourceFileCoverage> files = builder.getSourceFiles(); - assertEquals(1, files.size(), 0.0); - sourceCoverage = files.iterator().next(); - - source = Source.getSourceFor(srcFolder, target); - } - -} diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java index cb193ec3..fa21da85 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java @@ -24,12 +24,6 @@ public class BooleanExpressionsTest extends ValidationTestBase { super(Target02.class); } - @Override - protected void run(final Class<?> targetClass) throws Exception { - final Object instance = targetClass.newInstance(); - ((Runnable) instance).run(); - } - @Test public void testCoverageResult() { diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ClassInitializerTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ClassInitializerTest.java index ba9a7ef4..cdbe4e07 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ClassInitializerTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ClassInitializerTest.java @@ -24,12 +24,6 @@ public class ClassInitializerTest extends ValidationTestBase { super(Target05.class); } - @Override - protected void run(final Class<?> targetClass) throws Exception { - // Force class initialization - targetClass.getField("CONST1").get(null); - } - @Test public void testCoverageResult() { diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java index cc5e9dd7..284ed9dd 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java @@ -24,12 +24,6 @@ public class ControlStructuresTest extends ValidationTestBase { super(Target01.class); } - @Override - protected void run(final Class<?> targetClass) throws Exception { - final Object instance = targetClass.newInstance(); - ((Runnable) instance).run(); - } - @Test public void testCoverageResult() { diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java index 17c74cab..596ba56e 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java @@ -24,12 +24,6 @@ public class ExceptionsTest extends ValidationTestBase { super(Target03.class); } - @Override - protected void run(final Class<?> targetClass) throws Exception { - final Object instance = targetClass.newInstance(); - ((Runnable) instance).run(); - } - @Test public void testCoverageResult() { diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExplicitInitialFrameTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExplicitInitialFrameTest.java index bb7b43ad..2da79536 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExplicitInitialFrameTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExplicitInitialFrameTest.java @@ -24,12 +24,6 @@ public class ExplicitInitialFrameTest extends ValidationTestBase { super(Target11.class); } - @Override - protected void run(final Class<?> targetClass) throws Exception { - final Object instance = targetClass.newInstance(); - ((Runnable) instance).run(); - } - @Test public void testCoverageResult() { diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/FieldInitializationInTwoConstructorsTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/FieldInitializationInTwoConstructorsTest.java index d9c2333c..afd0440f 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/FieldInitializationInTwoConstructorsTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/FieldInitializationInTwoConstructorsTest.java @@ -25,11 +25,6 @@ public class FieldInitializationInTwoConstructorsTest extends super(Target09.class); } - @Override - protected void run(final Class<?> targetClass) throws Exception { - targetClass.newInstance(); - } - @Test public void testCoverageResult() { diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitDefaultConstructorTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitDefaultConstructorTest.java index 4b04db1f..8f80a947 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitDefaultConstructorTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitDefaultConstructorTest.java @@ -24,11 +24,6 @@ public class ImplicitDefaultConstructorTest extends ValidationTestBase { super(Target06.class); } - @Override - protected void run(final Class<?> targetClass) throws Exception { - targetClass.newInstance(); - } - @Test public void testCoverageResult() { diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitFieldInitializationTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitFieldInitializationTest.java index d8a2188f..922266bd 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitFieldInitializationTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ImplicitFieldInitializationTest.java @@ -24,11 +24,6 @@ public class ImplicitFieldInitializationTest extends ValidationTestBase { super(Target08.class); } - @Override - protected void run(final Class<?> targetClass) throws Exception { - targetClass.newInstance(); - } - @Test public void testCoverageResult() { diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/PrivateEmptyDefaultConstructorTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/PrivateEmptyDefaultConstructorTest.java index fe9a6c7e..e38bc32a 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/PrivateEmptyDefaultConstructorTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/PrivateEmptyDefaultConstructorTest.java @@ -24,12 +24,6 @@ public class PrivateEmptyDefaultConstructorTest extends ValidationTestBase { super(Target07.class); } - @Override - protected void run(final Class<?> targetClass) throws Exception { - // Force class initialization - targetClass.getField("CONST").get(null); - } - @Test public void testCoverageResult() { diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ProbesBeforeSuperConstructorTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ProbesBeforeSuperConstructorTest.java index 4714b6b8..c99a99b3 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ProbesBeforeSuperConstructorTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ProbesBeforeSuperConstructorTest.java @@ -24,11 +24,6 @@ public class ProbesBeforeSuperConstructorTest extends ValidationTestBase { super(Target10.class); } - @Override - protected void run(final Class<?> targetClass) throws Exception { - targetClass.newInstance(); - } - @Test public void testCoverageResult() { diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java index 5216a057..67c4634d 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java @@ -12,23 +12,19 @@ package org.jacoco.core.test.validation; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; import java.io.IOException; -import java.util.Collection; import org.jacoco.core.analysis.Analyzer; import org.jacoco.core.analysis.CoverageBuilder; -import org.jacoco.core.analysis.IClassCoverage; import org.jacoco.core.analysis.ICounter; import org.jacoco.core.analysis.ILine; import org.jacoco.core.analysis.ISourceFileCoverage; +import org.jacoco.core.data.ExecutionData; import org.jacoco.core.data.ExecutionDataStore; -import org.jacoco.core.data.SessionInfoStore; -import org.jacoco.core.instr.Instrumenter; import org.jacoco.core.internal.analysis.CounterImpl; -import org.jacoco.core.runtime.IRuntime; -import org.jacoco.core.runtime.RuntimeData; -import org.jacoco.core.runtime.SystemPropertiesRuntime; +import org.jacoco.core.test.InstrumentingLoader; import org.jacoco.core.test.TargetLoader; import org.junit.Before; @@ -51,14 +47,10 @@ public abstract class ValidationTestBase { protected final Class<?> target; - protected IClassCoverage classCoverage; - protected ISourceFileCoverage sourceCoverage; protected Source source; - protected TargetLoader loader; - protected ValidationTestBase(final String srcFolder, final Class<?> target) { this.srcFolder = srcFolder; this.target = target; @@ -70,40 +62,44 @@ public abstract class ValidationTestBase { @Before public void setup() throws Exception { - loader = new TargetLoader(); - final byte[] bytes = TargetLoader.getClassDataAsBytes(target); - final ExecutionDataStore store = execute(bytes); - analyze(bytes, store); + final ExecutionDataStore store = execute(); + analyze(store); source = Source.getSourceFor(srcFolder, target); } - private ExecutionDataStore execute(final byte[] bytes) throws Exception { - RuntimeData data = new RuntimeData(); - IRuntime runtime = new SystemPropertiesRuntime(); - runtime.startup(data); - - final byte[] instrumented = new Instrumenter(runtime).instrument(bytes, - "TestTarget"); - run(loader.add(target, instrumented)); - final ExecutionDataStore store = new ExecutionDataStore(); - data.collect(store, new SessionInfoStore(), false); - runtime.shutdown(); - return store; + private ExecutionDataStore execute() throws Exception { + InstrumentingLoader loader = new InstrumentingLoader(target); + run(loader.loadClass(target.getName())); + return loader.collect(); } - protected abstract void run(final Class<?> targetClass) throws Exception; + protected void run(final Class<?> targetClass) throws Exception { + targetClass.getMethod("main", String[].class).invoke(null, + (Object) new String[0]); + } - private void analyze(final byte[] bytes, final ExecutionDataStore store) - throws IOException { + private void analyze(final ExecutionDataStore store) throws IOException { final CoverageBuilder builder = new CoverageBuilder(); final Analyzer analyzer = new Analyzer(store, builder); - analyzer.analyzeClass(bytes, "TestTarget"); - final Collection<IClassCoverage> classes = builder.getClasses(); - assertEquals(1, classes.size(), 0.0); - classCoverage = classes.iterator().next(); - final Collection<ISourceFileCoverage> files = builder.getSourceFiles(); - assertEquals(1, files.size(), 0.0); - sourceCoverage = files.iterator().next(); + for (ExecutionData data : store.getContents()) { + analyze(analyzer, data); + } + + String srcName = target.getName().replace('.', '/') + ".java"; + for (ISourceFileCoverage file : builder.getSourceFiles()) { + if (srcName.equals(file.getPackageName() + "/" + file.getName())) { + sourceCoverage = file; + return; + } + } + fail("No source node found for " + srcName); + } + + private void analyze(final Analyzer analyzer, final ExecutionData data) + throws IOException { + final byte[] bytes = TargetLoader.getClassDataAsBytes( + target.getClassLoader(), data.getName()); + analyzer.analyzeClass(bytes, data.getName()); } protected void assertLine(final String tag, final int status) { diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/BadCycleClass.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/BadCycleClass.java index 44e40cd1..c524a211 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/BadCycleClass.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/BadCycleClass.java @@ -24,15 +24,15 @@ public class BadCycleClass { public static class Child extends Base { static { - Stubs.nop("child clinit"); // $line-3$ + Stubs.nop("child clinit"); // $line-childclinit$ } public Child() { - Stubs.nop("child init"); // $line-1$ + Stubs.nop("child init"); // $line-childinit$ } void someMethod() { - Stubs.nop("child someMethod"); // $line-2$ + Stubs.nop("child someMethod"); // $line-childsomeMethod$ } } diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target01.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target01.java index ca5cd3b2..d5723ce3 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target01.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target01.java @@ -21,9 +21,9 @@ import java.util.Collections; /** * This target exercises a set of common Java control structures. */ -public class Target01 implements Runnable { +public class Target01 { - public void run() { + public static void main(String[] args) { // 1. Unconditional execution nop(); // $line-unconditional$ @@ -194,7 +194,7 @@ public class Target01 implements Runnable { } - private void runReturn() { + private static void runReturn() { // 20. Return statement if (t()) { @@ -204,13 +204,9 @@ public class Target01 implements Runnable { } - private void runImplicitReturn() { + private static void runImplicitReturn() { // 21. Implicit return } // $line-implicitreturn$ - public static void main(String[] args) { - new Target01().run(); - } - } diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target02.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target02.java index ef012ff6..08f0ba0b 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target02.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target02.java @@ -20,9 +20,9 @@ import static org.jacoco.core.test.validation.targets.Stubs.t; /** * This target exercises boolean expressions. */ -public class Target02 implements Runnable { +public class Target02 { - public void run() { + public static void main(String[] args) { // 1. Boolean comparison result (one case) nop(i2() > 3); // $line-booleancmp1$ @@ -117,8 +117,4 @@ public class Target02 implements Runnable { } - public static void main(String[] args) { - new Target02().run(); - } - } diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target03.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target03.java index 26b3b13b..efa1354c 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target03.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target03.java @@ -20,9 +20,10 @@ import org.jacoco.core.test.validation.targets.Stubs.StubException; /** * This target produces exception based control flow examples. */ -public class Target03 implements Runnable { +public class Target03 { + + public static void main(String[] args) { - public void run() { try { implicitException(); } catch (StubException e) { @@ -46,18 +47,18 @@ public class Target03 implements Runnable { } } - private void implicitException() { + private static void implicitException() { nop(); // $line-implicitException.before$ ex(); // $line-implicitException.exception$ nop(); // $line-implicitException.after$ } - private void explicitException() { + private static void explicitException() { nop(); // $line-explicitException.before$ throw new StubException(); // $line-explicitException.throw$ } - private void noExceptionTryCatch() { + private static void noExceptionTryCatch() { nop(); // $line-noExceptionTryCatch.beforeBlock$ try { nop(); // $line-noExceptionTryCatch.tryBlock$ @@ -66,7 +67,7 @@ public class Target03 implements Runnable { } } - private void implicitExceptionTryCatch() { + private static void implicitExceptionTryCatch() { nop(); // $line-implicitExceptionTryCatch.beforeBlock$ try { nop(); // $line-implicitExceptionTryCatch.before$ @@ -77,7 +78,7 @@ public class Target03 implements Runnable { } } - private void implicitExceptionTryCatchAfterCondition() { + private static void implicitExceptionTryCatchAfterCondition() { if (f()) { // $line-implicitExceptionTryCatchAfterCondition.condition$ return; } @@ -88,7 +89,7 @@ public class Target03 implements Runnable { } } - private void explicitExceptionTryCatch() { + private static void explicitExceptionTryCatch() { nop(); // $line-explicitExceptionTryCatch.beforeBlock$ try { nop(); // $line-explicitExceptionTryCatch.before$ @@ -98,7 +99,7 @@ public class Target03 implements Runnable { } } - private void noExceptionFinally() { + private static void noExceptionFinally() { nop(); // $line-noExceptionFinally.beforeBlock$ try { nop(); // $line-noExceptionFinally.tryBlock$ @@ -107,7 +108,7 @@ public class Target03 implements Runnable { } } - private void implicitExceptionFinally() { + private static void implicitExceptionFinally() { nop(); // $line-implicitExceptionFinally.beforeBlock$ try { nop(); // $line-implicitExceptionFinally.before$ @@ -118,7 +119,7 @@ public class Target03 implements Runnable { } } - private void explicitExceptionFinally() { + private static void explicitExceptionFinally() { nop(); // $line-explicitExceptionFinally.beforeBlock$ try { nop(); // $line-explicitExceptionFinally.before$ @@ -128,8 +129,4 @@ public class Target03 implements Runnable { } } - public static void main(String[] args) { - new Target03().run(); - } - } diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target07.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target07.java index 15afb506..93dcaa3e 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target07.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target07.java @@ -19,8 +19,6 @@ public class Target07 { // $line-classdef$ private Target07() { } // $line-constructor$ - public static final int CONST = 42; - public static void main(String[] args) { } diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target11.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target11.java index a6a59c42..5f597cb0 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target11.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target11.java @@ -18,16 +18,14 @@ import static org.jacoco.core.test.validation.targets.Stubs.nop; * This test target needs an explicit initial frame as the first instruction * already is a jump target. */ -public class Target11 implements Runnable { +public class Target11 { + + public static void main(String[] args) { - public void run() { do { nop(); // $line-dowhilebody$ } while (f()); - } - public static void main(String[] args) { - new Target11().run(); } } diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target12.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target12.java index f5ea03e0..0c445cd6 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target12.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target12.java @@ -16,20 +16,16 @@ import static org.jacoco.core.test.validation.targets.Stubs.nop; /** * This target uses synchronized blocks which compile to try/catch statements. */ -public class Target12 implements Runnable { +public class Target12 { - public void run() { - simple(); - nested(); - } - - void simple() { - synchronized (this) { + static void simple() { + Object lock1 = new Object(); + synchronized (lock1) { nop(); } } - void nested() { + static void nested() { Object lock1 = new Object(); synchronized (lock1) { nop(); @@ -43,7 +39,8 @@ public class Target12 implements Runnable { } public static void main(String[] args) { - new Target12().run(); + simple(); + nested(); } } |