You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2015/03/14 19:34:51 UTC
[3/3] tomee git commit: new files to setup cdi-tomee
new files to setup cdi-tomee
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/648604f1
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/648604f1
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/648604f1
Branch: refs/heads/master
Commit: 648604f110d243f432edf82a67701f8ac43226c2
Parents: bdae43a
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Sat Mar 14 19:34:22 2015 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Sat Mar 14 19:34:22 2015 +0100
----------------------------------------------------------------------
.../apache/openejb/tck/cdi/tomee/BeansImpl.java | 102 ++++++++
.../openejb/tck/cdi/tomee/EnrichmentDumper.java | 44 ++++
.../apache/openejb/tck/cdi/tomee/Report.java | 260 +++++++++++++++++++
.../test/resources/META-INF/cdi-tck.properties | 24 ++
tck/cdi-tomee/src/test/resources/arquillian.xml | 58 +++++
tck/cdi-tomee/src/test/resources/failing.xml | 29 +++
.../apache/openejb/tck/testng/HTMLReporter.java | 60 +++++
7 files changed, 577 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/648604f1/tck/cdi-tomee/src/test/java/org/apache/openejb/tck/cdi/tomee/BeansImpl.java
----------------------------------------------------------------------
diff --git a/tck/cdi-tomee/src/test/java/org/apache/openejb/tck/cdi/tomee/BeansImpl.java b/tck/cdi-tomee/src/test/java/org/apache/openejb/tck/cdi/tomee/BeansImpl.java
new file mode 100644
index 0000000..79c08d9
--- /dev/null
+++ b/tck/cdi-tomee/src/test/java/org/apache/openejb/tck/cdi/tomee/BeansImpl.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.tck.cdi.tomee;
+
+import org.apache.openejb.core.ivm.IntraVmCopyMonitor;
+import org.apache.openejb.core.ivm.IntraVmProxy;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+import java.lang.reflect.Proxy;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class BeansImpl extends org.apache.webbeans.test.tck.BeansImpl {
+ @Override
+ public boolean isProxy(final Object instance) {
+ return instance instanceof IntraVmProxy || super.isProxy(instance);
+ }
+
+ @Override
+ public byte[] passivate(Object instance) throws IOException {
+ IntraVmCopyMonitor.prePassivationOperation();
+ try {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream os = new ObjectOutputStream(baos);
+ os.writeObject(instance);
+ os.flush();
+ return baos.toByteArray();
+ } finally {
+ IntraVmCopyMonitor.postPassivationOperation();
+ }
+ }
+
+ @Override
+ public Object activate(byte[] bytes) throws IOException, ClassNotFoundException {
+ ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
+ ObjectInputStream is = new BeanObjectInputStream(bais);
+ return is.readObject();
+ }
+
+
+ public static final class BeanObjectInputStream extends ObjectInputStream {
+ public BeanObjectInputStream(InputStream in) throws IOException {
+ super(in);
+ }
+
+ protected Class resolveClass(ObjectStreamClass classDesc) throws IOException, ClassNotFoundException {
+ try {
+ return Class.forName(classDesc.getName(), false, getClassloader());
+ } catch (ClassNotFoundException e) {
+ String n = classDesc.getName();
+ if (n.equals("boolean")) return boolean.class;
+ if (n.equals("byte")) return byte.class;
+ if (n.equals("char")) return char.class;
+ if (n.equals("short")) return short.class;
+ if (n.equals("int")) return int.class;
+ if (n.equals("long")) return long.class;
+ if (n.equals("float")) return float.class;
+ if (n.equals("double")) return double.class;
+
+ throw e;
+ }
+ }
+
+ protected Class resolveProxyClass(String[] interfaces) throws IOException, ClassNotFoundException {
+ Class[] cinterfaces = new Class[interfaces.length];
+ for (int i = 0; i < interfaces.length; i++)
+ cinterfaces[i] = getClassloader().loadClass(interfaces[i]);
+
+ try {
+ return Proxy.getProxyClass(getClassloader(), cinterfaces);
+ } catch (IllegalArgumentException e) {
+ throw new ClassNotFoundException(null, e);
+ }
+ }
+
+ ClassLoader getClassloader() {
+ return Thread.currentThread().getContextClassLoader();
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/648604f1/tck/cdi-tomee/src/test/java/org/apache/openejb/tck/cdi/tomee/EnrichmentDumper.java
----------------------------------------------------------------------
diff --git a/tck/cdi-tomee/src/test/java/org/apache/openejb/tck/cdi/tomee/EnrichmentDumper.java b/tck/cdi-tomee/src/test/java/org/apache/openejb/tck/cdi/tomee/EnrichmentDumper.java
new file mode 100644
index 0000000..8e22b0b
--- /dev/null
+++ b/tck/cdi-tomee/src/test/java/org/apache/openejb/tck/cdi/tomee/EnrichmentDumper.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.tck.cdi.tomee;
+
+import org.apache.openejb.loader.Files;
+import org.apache.webbeans.test.tck.ELImpl;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.exporter.ZipExporter;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+
+import java.io.File;
+
+import static org.apache.openejb.loader.JarLocation.jarLocation;
+
+public final class EnrichmentDumper {
+ public static void main(String[] args) {
+ final File output = new File(Files.mkdirs(new File(args[0])), "tomee-porting.jar");
+ if (!output.exists() || output.delete()) {
+ ShrinkWrap.create(JavaArchive.class)
+ .merge(ShrinkWrap.createFromZipFile(JavaArchive.class, jarLocation(ELImpl.class)))
+ .addClasses(BeansImpl.class)
+ .as(ZipExporter.class)
+ .exportTo(output);
+ }
+ }
+
+ private EnrichmentDumper() {
+ // no-op
+ }
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/648604f1/tck/cdi-tomee/src/test/java/org/apache/openejb/tck/cdi/tomee/Report.java
----------------------------------------------------------------------
diff --git a/tck/cdi-tomee/src/test/java/org/apache/openejb/tck/cdi/tomee/Report.java b/tck/cdi-tomee/src/test/java/org/apache/openejb/tck/cdi/tomee/Report.java
new file mode 100644
index 0000000..e8a2bd6
--- /dev/null
+++ b/tck/cdi-tomee/src/test/java/org/apache/openejb/tck/cdi/tomee/Report.java
@@ -0,0 +1,260 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.tck.cdi.tomee;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class Report {
+
+ public static void main(String[] args) throws Exception {
+ new Report().main();
+ }
+
+ private final LinkedList<TestClass> classes = new LinkedList<TestClass>();
+
+ private void main() throws Exception {
+// final File file = new File("/Users/dblevins/work/uber/geronimo-tck-public-trunk/jcdi-tck-runner/target/surefire-reports/testng-results.xml");
+ final File file = new File("/Users/dblevins/work/all/trunk/openejb/tck/cdi-tomee/target/failsafe-reports/testng-results.xml");
+// final File file = new File("/Users/dblevins/work/uber/testng-results.xml");
+
+ final SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
+
+ parser.parse(file, new DefaultHandler() {
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+ final String name = qName;
+ if ("class".equals(name)) {
+ classes.add(new TestClass(attributes.getValue("name")));
+ }
+
+ if ("test-method".equals(name)) {
+ classes.getLast().addStatus(attributes.getValue("status"), attributes.getValue("name"));
+ }
+ }
+ });
+
+ Collections.sort(classes);
+
+ textReport(file);
+ passingXml(file);
+ failingXml(file);
+
+ }
+
+ private void textReport(File file) throws FileNotFoundException {
+ final File report = new File(file.getParentFile(), file.getName().replaceAll(".xml$", ".txt"));
+ final PrintStream out = new PrintStream(new FileOutputStream(report));
+ printResults(out);
+ out.close();
+ }
+
+ private void passingXml(File file) throws FileNotFoundException {
+ final File report = new File(file.getParentFile(), file.getName().replaceAll(".xml$", "-passing.xml"));
+ final PrintStream out = new PrintStream(new FileOutputStream(report));
+
+ out.println(header +
+ "<suite name=\"CDI TCK\" verbose=\"0\">\n" +
+ " <test name=\"CDI TCK\">\n" +
+ " <packages>\n" +
+ " <package name=\"org.jboss.jsr299.tck.tests.*\"/>\n" +
+ " <package name=\"org.jboss.jsr299.tck.interceptors.tests.*\"/>\n" +
+ " </packages>\n" +
+ " <classes>");
+
+ for (TestClass testClass : classes) {
+
+ if (contains(testClass, Status.FAIL)) {
+ out.printf(" <class name=\"%s\">\n", testClass.name);
+ out.printf(" <methods>\n");
+
+ for (TestResult result : testClass.getResults()) {
+ if (result.status == Status.FAIL) {
+ out.printf(" <exclude name=\"%s\"/>\n", result.name);
+ }
+ }
+
+ out.printf(" </methods>\n");
+ out.printf(" </class>\n");
+ }
+ }
+ out.println(" </classes>");
+ out.println(" </test>");
+ out.println("</suite>");
+
+ out.close();
+ }
+
+ private void failingXml(File file) throws FileNotFoundException {
+ final File report = new File(file.getParentFile(), file.getName().replaceAll(".xml$", "-failing.xml"));
+ final PrintStream out = new PrintStream(new FileOutputStream(report));
+
+ out.println(header);
+ out.println("<suite name=\"CDI TCK\" verbose=\"0\">");
+ out.println(" <test name=\"CDI TCK\">");
+ out.println(" <!--<packages>-->\n" +
+ " <!--<package name=\"org.jboss.jsr299.tck.tests.*\"/>-->\n" +
+ " <!--<package name=\"org.jboss.jsr299.tck.interceptors.tests.*\"/>-->\n" +
+ " <!--</packages>-->");
+ out.println(" <classes>");
+
+ for (TestClass testClass : classes) {
+
+ if (contains(testClass, Status.FAIL)) {
+ out.printf(" <class name=\"%s\"/>\n", testClass.name);
+ }
+ }
+ out.println(" </classes>");
+ out.println(" </test>");
+ out.println("</suite>");
+
+ out.close();
+ }
+
+ private boolean contains(TestClass testClass, Status status) {
+
+ for (TestResult result : testClass.getResults()) {
+ if (result.name.equals("beforeClass")) continue;
+ if (result.name.equals("afterClass")) continue;
+ if (result.name.equals("afterSuite")) continue;
+ if (result.name.equals("beforeSuite")) continue;
+
+ if (result.status == status) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void printResults(PrintStream out) {
+
+ Map<Status, AtomicInteger> totals = new HashMap<Status, AtomicInteger>();
+ for (Status status : Status.values()) {
+ totals.put(status, new AtomicInteger());
+ }
+
+ for (TestClass testClass : classes) {
+
+ for (TestResult result : testClass.getResults()) {
+ if (result.name.equals("beforeClass")) continue;
+ if (result.name.equals("afterClass")) continue;
+ if (result.name.equals("afterSuite")) continue;
+ if (result.name.equals("beforeSuite")) continue;
+// if (result.status == Status.PASS) continue;
+ totals.get(result.status).getAndIncrement();
+
+ out.printf("%s - %s(%s)\n", result.status, result.name, testClass.name);
+ }
+ }
+
+ out.println("\n\n");
+
+ int total = 0;
+
+ for (Map.Entry<Status, AtomicInteger> entry : totals.entrySet()) {
+ final int i = entry.getValue().get();
+ total += i;
+ out.printf("%5s %s\n", i, entry.getKey());
+ }
+
+ out.printf("%5s %s\n", total, "Total");
+
+ }
+
+ public static enum Status {
+ PASS, FAIL, ERROR;
+ }
+ public static class TestResult {
+ private final String name;
+ private final Status status;
+
+ public TestResult(String name, Status status) {
+ this.name = name;
+ this.status = status;
+ }
+ }
+
+ public static class TestClass implements Comparable<TestClass>{
+
+ private final String name;
+ private int failed;
+ private int passed;
+ private int error;
+ private final List<TestResult> results = new ArrayList<TestResult>();
+
+ public TestClass(String name) {
+ this.name = name;
+ }
+
+ public void addStatus(String status, String testName) {
+ results.add(new TestResult(testName, Status.valueOf(status)));
+ if ("PASS".equals(status)) passed++;
+ if ("FAIL".equals(status)) failed++;
+ if ("ERROR".equals(status)) error++;
+ }
+
+ public List<TestResult> getResults() {
+ return results;
+ }
+
+ public boolean hasFailures() {
+ return failed > 0 || error > 0;
+ }
+
+ @Override
+ public int compareTo(TestClass o) {
+ return this.name.compareTo(o.name);
+ }
+ }
+
+ private static final String header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<!--\n" +
+ "\n" +
+ " Licensed to the Apache Software Foundation (ASF) under one or more\n" +
+ " contributor license agreements. See the NOTICE file distributed with\n" +
+ " this work for additional information regarding copyright ownership.\n" +
+ " The ASF licenses this file to You under the Apache License, Version 2.0\n" +
+ " (the \"License\"); you may not use this file except in compliance with\n" +
+ " the License. You may obtain a copy of the License at\n" +
+ "\n" +
+ " http://www.apache.org/licenses/LICENSE-2.0\n" +
+ "\n" +
+ " Unless required by applicable law or agreed to in writing, software\n" +
+ " distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
+ " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
+ " See the License for the specific language governing permissions and\n" +
+ " limitations under the License.\n" +
+ "-->\n";
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/648604f1/tck/cdi-tomee/src/test/resources/META-INF/cdi-tck.properties
----------------------------------------------------------------------
diff --git a/tck/cdi-tomee/src/test/resources/META-INF/cdi-tck.properties b/tck/cdi-tomee/src/test/resources/META-INF/cdi-tck.properties
new file mode 100644
index 0000000..2f1b7ae
--- /dev/null
+++ b/tck/cdi-tomee/src/test/resources/META-INF/cdi-tck.properties
@@ -0,0 +1,24 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+org.jboss.cdi.tck.libraryDirectory = ${project.build.directory}/dependency/lib/
+org.jboss.cdi.tck.testDataSource = openejb:Resource/jdbc
+org.jboss.cdi.tck.testJmsConnectionFactory = openejb:Resource/jms
+org.jboss.cdi.tck.testJmsQueue = openejb:Resource/queue
+org.jboss.cdi.tck.testJmsTopic = openejb:Resource/topic
+org.jboss.cdi.tck.spi.Beans = org.apache.openejb.tck.cdi.tomee.BeansImpl
+org.jboss.cdi.tck.spi.Contexts = org.apache.webbeans.test.tck.ContextsImpl
+org.jboss.cdi.tck.spi.EL = org.apache.webbeans.test.tck.ELImpl
http://git-wip-us.apache.org/repos/asf/tomee/blob/648604f1/tck/cdi-tomee/src/test/resources/arquillian.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-tomee/src/test/resources/arquillian.xml b/tck/cdi-tomee/src/test/resources/arquillian.xml
new file mode 100644
index 0000000..d684952
--- /dev/null
+++ b/tck/cdi-tomee/src/test/resources/arquillian.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<arquillian xmlns="http://jboss.org/schema/arquillian"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://jboss.org/schema/arquillian
+ http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
+ <container qualifier="tomee-remote" default="true">
+ <configuration>
+ <property name="httpPort">-1</property>
+ <property name="ajpPort">-1</property>
+ <property name="stopPort">-1</property>
+ <property name="classifier">plus</property>
+ <property name="dir">target/tomee</property>
+ <property name="appWorkingDir">target/workdir</property>
+ <property name="cleanOnStartUp">true</property>
+ <property name="catalina_opts">-Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=1024m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled</property>
+ <property name="properties">
+ openejb.scan.webapp.container = true
+ openejb.deploymentId.format = {appId}/{ejbJarId}/{ejbName}
+ openejb.strict.interface.declaration = true
+ openejb.cdi.producer.interception = false
+ openejb.cdi.applicationScope.cached = false
+ openejb.classloader.forced-load = org.apache.webbeans.test.tck.,org.apache.openejb.tck.cdi.tomee.
+
+ jmsRa = new://Resource?type=ActiveMQResourceAdapter
+ jms = new://Resource?type=javax.jms.ConnectionFactory
+ jms.ResourceAdapter = jmsRa
+ queue = new://Resource?type=Queue
+ topic = new://Resource?type=Topic
+ jdbc = new://Resource?type=DataSource
+
+ cdiTckExcludeDummy = true
+ </property>
+ <property name="additionalLibs">
+ target/test-classes/org
+ target/test-classes/META-INF
+ mvn:org.apache.openwebbeans:openwebbeans-porting:${org.apache.openwebbeans.version}
+ </property>
+ </configuration>
+ </container>
+</arquillian>
http://git-wip-us.apache.org/repos/asf/tomee/blob/648604f1/tck/cdi-tomee/src/test/resources/failing.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-tomee/src/test/resources/failing.xml b/tck/cdi-tomee/src/test/resources/failing.xml
new file mode 100644
index 0000000..9fc2ecc
--- /dev/null
+++ b/tck/cdi-tomee/src/test/resources/failing.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<suite name="CDI TCK" verbose="0">
+ <!--
+ Before any run execute:
+
+ $ mvn test-compile
+ -->
+ <test name="CDI TCK">
+ <classes>
+ <class name="org.jboss.cdi.tck.tests.context.application.async.ApplicationContextAsyncListenerTest" />
+ </classes>
+ </test>
+</suite>
http://git-wip-us.apache.org/repos/asf/tomee/blob/648604f1/tck/tck-common/src/main/java/org/apache/openejb/tck/testng/HTMLReporter.java
----------------------------------------------------------------------
diff --git a/tck/tck-common/src/main/java/org/apache/openejb/tck/testng/HTMLReporter.java b/tck/tck-common/src/main/java/org/apache/openejb/tck/testng/HTMLReporter.java
new file mode 100644
index 0000000..99b5d5b
--- /dev/null
+++ b/tck/tck-common/src/main/java/org/apache/openejb/tck/testng/HTMLReporter.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.tck.testng;
+
+import org.testng.ITestResult;
+import org.testng.reporters.TestHTMLReporter;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.ArrayList;
+import java.util.List;
+
+public class HTMLReporter extends TestHTMLReporter {
+ private static final Class<?>[] API = new Class<?>[]{ITestResult.class};
+
+ @Override
+ public List<ITestResult> getFailedTests() {
+ return doWrap(super.getFailedTests());
+ }
+
+ @Override
+ public List<ITestResult> getPassedTests() {
+ return doWrap(super.getPassedTests());
+ }
+
+ private List<ITestResult> doWrap(final List<ITestResult> raw) {
+ final List<ITestResult> wrapped = new ArrayList<>(raw.size());
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ for (final ITestResult result : raw) {
+ wrapped.add(ITestResult.class.cast(
+ Proxy.newProxyInstance(loader, API,
+ new InvocationHandler() {
+ @Override
+ public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
+ if (method.getName().equals("getParameters")) {
+ return new Object[method.getParameterTypes().length];
+ }
+ return method.invoke(result, args);
+ }
+ })
+ ));
+ }
+ return wrapped;
+ }
+}