diff options
author | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2014-04-27 21:05:28 +0200 |
---|---|---|
committer | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2014-04-27 21:05:28 +0200 |
commit | 9d79259f33e7117a4bf4ec1db2848e9429455325 (patch) | |
tree | f9e106e0bbdfbc765cac0ccd5b7685c03fbef5b3 | |
parent | 56afd72d35d6c4b0b150fa6d336f8e0ad215d22a (diff) | |
download | platform_external_jacoco-9d79259f33e7117a4bf4ec1db2848e9429455325.tar.gz platform_external_jacoco-9d79259f33e7117a4bf4ec1db2848e9429455325.tar.bz2 platform_external_jacoco-9d79259f33e7117a4bf4ec1db2848e9429455325.zip |
Allow loading multiple test target classes in preparation for Java 8
integration tests.
9 files changed, 43 insertions, 47 deletions
diff --git a/org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java b/org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java index c9303d5a..5eb88222 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java @@ -86,8 +86,8 @@ public class InstrumenterTest { byte[] bytes = instrumenter.instrument( TargetLoader.getClassDataAsBytes(InstrumenterTest.class), "Test"); - TargetLoader loader = new TargetLoader(InstrumenterTest.class, bytes); - Class<?> clazz = loader.getTargetClass(); + TargetLoader loader = new TargetLoader(); + Class<?> clazz = loader.add(InstrumenterTest.class, bytes); assertEquals("org.jacoco.core.instr.InstrumenterTest", clazz.getName()); } @@ -125,8 +125,8 @@ public class InstrumenterTest { // Create instrumented instance: byte[] bytes = instrumenter.instrument( TargetLoader.getClassData(SerializationTarget.class), "Test"); - TargetLoader loader = new TargetLoader(SerializationTarget.class, bytes); - Object obj1 = loader.getTargetClass() + TargetLoader loader = new TargetLoader(); + Object obj1 = loader.add(SerializationTarget.class, bytes) .getConstructor(String.class, Integer.TYPE) .newInstance("Hello", Integer.valueOf(42)); diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/ModifiedSystemClassRuntimeTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/ModifiedSystemClassRuntimeTest.java index 26bb1be5..cd0ad617 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/runtime/ModifiedSystemClassRuntimeTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/ModifiedSystemClassRuntimeTest.java @@ -157,8 +157,7 @@ public class ModifiedSystemClassRuntimeTest extends RuntimeTestBase { private static void verifyInstrumentedClass(String name, byte[] source) throws Exception { name = name.replace('/', '.'); - final Class<?> targetClass = new TargetLoader(name, source) - .getTargetClass(); + final Class<?> targetClass = new TargetLoader().add(name, source); // Check added field: final Field f = targetClass.getField("$jacocoAccess"); diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGeneratorTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGeneratorTest.java index aff65fa3..6a2c8991 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGeneratorTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGeneratorTest.java @@ -128,9 +128,9 @@ public class OfflineInstrumentationAccessGeneratorTest { writer.visitEnd(); - final TargetLoader loader = new TargetLoader( - className.replace('/', '.'), writer.toByteArray()); - return (ITarget) loader.newTargetInstance(); + final TargetLoader loader = new TargetLoader(); + return (ITarget) loader.add(className.replace('/', '.'), + writer.toByteArray()).newInstance(); } /** diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeDataTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeDataTest.java index 4ea6190a..95205e60 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeDataTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeDataTest.java @@ -137,9 +137,9 @@ public class RuntimeDataTest { mv.visitEnd(); writer.visitEnd(); - final TargetLoader loader = new TargetLoader("Sample", - writer.toByteArray()); - Callable<?> callable = (Callable<?>) loader.newTargetInstance(); + final TargetLoader loader = new TargetLoader(); + Callable<?> callable = (Callable<?>) loader.add("Sample", + writer.toByteArray()).newInstance(); final Object[] args = (Object[]) callable.call(); assertEquals(3, args.length, 0.0); assertEquals(Long.valueOf(1000), args[0]); @@ -188,9 +188,9 @@ public class RuntimeDataTest { null, null); writer.visitEnd(); - final TargetLoader loader = new TargetLoader("Sample", - writer.toByteArray()); - Callable<?> callable = (Callable<?>) loader.getTargetClass() + final TargetLoader loader = new TargetLoader(); + Callable<?> callable = (Callable<?>) loader + .add("Sample", writer.toByteArray()) .getConstructor(Object.class).newInstance(data); assertSame(probes, callable.call()); } diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeTestBase.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeTestBase.java index 9dfb7090..52b9377a 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeTestBase.java +++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeTestBase.java @@ -174,9 +174,9 @@ public abstract class RuntimeTestBase { writer.visitEnd(); - final TargetLoader loader = new TargetLoader( - className.replace('/', '.'), writer.toByteArray()); - return (ITarget) loader.newTargetInstance(); + final TargetLoader loader = new TargetLoader(); + return (ITarget) loader.add(className.replace('/', '.'), + writer.toByteArray()).newInstance(); } /** 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 cd001ce8..113019a6 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 @@ -14,30 +14,32 @@ package org.jacoco.core.test; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; /** * Loads a single class from a byte array. */ public class TargetLoader extends ClassLoader { - private final String sourcename; + private final Map<String, byte[]> classes; - private final byte[] bytes; + public TargetLoader() { + super(TargetLoader.class.getClassLoader()); + this.classes = new HashMap<String, byte[]>(); + } - private final Class<?> clazz; + public Class<?> add(final String name, final byte[] bytes) { + this.classes.put(name, bytes); + return load(name); + } - public TargetLoader(final String name, final byte[] bytes) { - super(TargetLoader.class.getClassLoader()); - this.sourcename = name; - this.bytes = bytes; - clazz = load(name); + public Class<?> add(final Class<?> name, final byte[] bytes) { + return add(name.getName(), bytes); } - public TargetLoader(final Class<?> source, final byte[] bytes) { - super(TargetLoader.class.getClassLoader()); - this.sourcename = source.getName(); - this.bytes = bytes; - clazz = load(source.getName()); + public Class<?> add(final Class<?> source) throws IOException { + return add(source.getName(), getClassDataAsBytes(source)); } private Class<?> load(final String sourcename) { @@ -49,15 +51,6 @@ public class TargetLoader extends ClassLoader { } } - public Class<?> getTargetClass() { - return clazz; - } - - public Object newTargetInstance() throws InstantiationException, - IllegalAccessException { - return clazz.newInstance(); - } - public static InputStream getClassData(Class<?> clazz) { final String resource = "/" + clazz.getName().replace('.', '/') + ".class"; @@ -79,7 +72,8 @@ public class TargetLoader extends ClassLoader { @Override protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { - if (sourcename.equals(name)) { + final byte[] bytes = classes.get(name); + if (bytes != null) { Class<?> c = defineClass(name, bytes, 0, bytes.length); if (resolve) { resolveClass(c); diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java index 976b8231..055b24be 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java @@ -42,9 +42,10 @@ public class ExecuteInstrumentedCodeScenario extends TimedScenario { runtime.startup(new RuntimeData()); final Instrumenter instr = new Instrumenter(runtime); final byte[] instrumentedBuffer = instr.instrument(reader); - final TargetLoader loader = new TargetLoader(target, instrumentedBuffer); + final TargetLoader loader = new TargetLoader(); - return (Callable<Void>) loader.newTargetInstance(); + return (Callable<Void>) loader.add(target, instrumentedBuffer) + .newInstance(); } @Override diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/CyclomaticComplexityTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/CyclomaticComplexityTest.java index a431f384..96ef9f28 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/CyclomaticComplexityTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/CyclomaticComplexityTest.java @@ -255,8 +255,8 @@ public class CyclomaticComplexityTest { throws Exception { reader = new ClassReader(TargetLoader.getClassData(clazz)); final byte[] bytes = new Instrumenter(runtime).instrument(reader); - final TargetLoader loader = new TargetLoader(clazz, bytes); - target = (Target) loader.getTargetClass().newInstance(); + final TargetLoader loader = new TargetLoader(); + target = (Target) loader.add(clazz, bytes).newInstance(); } private ICounter analyze() { 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 626db9ff..6e24505d 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 @@ -55,12 +55,15 @@ public abstract class ValidationTestBase { protected Source source; + protected TargetLoader loader; + protected ValidationTestBase(final Class<?> target) { this.target = target; } @Before public void setup() throws Exception { + loader = new TargetLoader(); final ClassReader reader = new ClassReader( TargetLoader.getClassData(target)); final ExecutionDataStore store = execute(reader); @@ -74,8 +77,7 @@ public abstract class ValidationTestBase { IRuntime runtime = new SystemPropertiesRuntime(); runtime.startup(data); final byte[] bytes = new Instrumenter(runtime).instrument(reader); - final TargetLoader loader = new TargetLoader(target, bytes); - run(loader.getTargetClass()); + run(loader.add(target, bytes)); final ExecutionDataStore store = new ExecutionDataStore(); data.collect(store, new SessionInfoStore(), false); runtime.shutdown(); |