aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core.test
diff options
context:
space:
mode:
authorMarc R. Hoffmann <hoffmann@mountainminds.com>2014-04-27 21:05:28 +0200
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2014-04-27 21:05:28 +0200
commit9d79259f33e7117a4bf4ec1db2848e9429455325 (patch)
treef9e106e0bbdfbc765cac0ccd5b7685c03fbef5b3 /org.jacoco.core.test
parent56afd72d35d6c4b0b150fa6d336f8e0ad215d22a (diff)
downloadjacoco-9d79259f33e7117a4bf4ec1db2848e9429455325.tar.gz
Allow loading multiple test target classes in preparation for Java 8
integration tests.
Diffstat (limited to 'org.jacoco.core.test')
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java8
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/runtime/ModifiedSystemClassRuntimeTest.java3
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGeneratorTest.java6
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeDataTest.java12
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeTestBase.java6
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java40
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java5
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/CyclomaticComplexityTest.java4
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java6
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();