updates to 4.5 test framework - will build get further?
diff --git a/org.eclipse.ajdt.releng/build.properties b/org.eclipse.ajdt.releng/build.properties
index 0558fc1..3adc1d7 100644
--- a/org.eclipse.ajdt.releng/build.properties
+++ b/org.eclipse.ajdt.releng/build.properties
@@ -98,8 +98,8 @@
test.results=${build.dist}/test-reports
# configure extra plugins required for building and testing
-eclipse.test.framework.version=eclipse-test-framework-3.7.zip
-org.eclipse.test=3.3.100
+eclipse.test.framework.version=eclipse-test-framework-4.5.zip
+org.eclipse.test=3.3.200.v20150327-1546
test.library.xml=${build.eclipse}/plugins/org.eclipse.test_${org.eclipse.test}/library.xml
diff --git a/org.eclipse.ajdt.releng/buildAll.xml b/org.eclipse.ajdt.releng/buildAll.xml
index 27a0c50..ef817ed 100644
--- a/org.eclipse.ajdt.releng/buildAll.xml
+++ b/org.eclipse.ajdt.releng/buildAll.xml
@@ -379,6 +379,9 @@
updatesite.url="file:${build.dest}/target/test_framework"
feature.id="org.eclipse.test" />
+<copy file="${builder}/build_bundles/library.xml" todir="${build.eclipse}/plugins/org.eclipse.test_${org.eclipse.test}/"/>
+<copy file="${builder}/build_bundles/JUNIT.XSL" todir="${build.eclipse}/plugins/org.eclipse.test_${org.eclipse.test}/"/>
+
<!-- start with a clean workspace -->
<delete failonerror="false">
diff --git a/org.eclipse.ajdt.releng/build_bundles/JUNIT.XSL b/org.eclipse.ajdt.releng/build_bundles/JUNIT.XSL
new file mode 100644
index 0000000..aed9385
--- /dev/null
+++ b/org.eclipse.ajdt.releng/build_bundles/JUNIT.XSL
@@ -0,0 +1,583 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:string="xalan://java.lang.String">
+<xsl:output method="html" indent="yes" encoding="UTF-8"
+ doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+ 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.
+ -->
+
+<xsl:param name="TITLE">Unit Test Results.</xsl:param>
+<xsl:param name="filename"></xsl:param>
+
+<!--
+
+ Sample stylesheet to be used with Ant JUnitReport output.
+
+ It creates a non-framed report that can be useful to send via
+ e-mail or such.
+
+ NOTE: This file was copied from ant-junit.jar 1.8.4
+ /org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-noframes.xsl
+ and should be compared to similar files when the Ant version changes.
+ Additional fixes:
+ https://issues.apache.org/bugzilla/show_bug.cgi?id=54641 XSLTC problem with StringUtils
+ https://issues.apache.org/bugzilla/show_bug.cgi?id=54180 [PATCH] junitreport: Shortcut to scroll to next error/failure
+ https://bugs.eclipse.org/bugs/show_bug.cgi?id=410484 JUnit.XSL: better navigation to test failures/errors
+ https://bugs.eclipse.org/bugs/show_bug.cgi?id=413904 Component test results page should allow to navigate to the XML
+
+-->
+<xsl:template match="testsuites">
+ <html>
+ <head>
+ <title><xsl:value-of select="$TITLE"/></title>
+ <style type="text/css">
+ body {
+ font:normal 68% verdana,arial,helvetica;
+ color:#000000;
+ }
+ table tr td, table tr th {
+ font-size: 68%;
+ }
+ table.details tr th{
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+ }
+ table.details tr td{
+ background:#eeeee0;
+ }
+
+ p {
+ line-height:1.5em;
+ margin-top:0.5em; margin-bottom:1.0em;
+ }
+ h1 {
+ margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+ }
+ h2 {
+ margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+ }
+ h3 {
+ margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+ }
+ h4 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h5 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h6 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ .Error {
+ font-weight:bold; color:red;
+ }
+ .Failure {
+ font-weight:bold; color:purple;
+ }
+ .Properties {
+ text-align:right;
+ }
+ </style>
+ <script type="text/javascript" language="JavaScript">
+ var TestCases = new Array();
+ var cur;
+ <xsl:for-each select="./testsuite">
+ <xsl:apply-templates select="properties"/>
+ </xsl:for-each>
+
+ </script>
+ <script type="text/javascript" language="JavaScript"><![CDATA[
+ function displayProperties (name) {
+ var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+ var doc = win.document;
+ doc.open();
+ doc.write("<html><head><title>Properties of " + name + "</title>");
+ doc.write("<style>")
+ doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+ doc.write("table tr td, table tr th { font-size: 68%; }");
+ doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+ doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+ doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+ doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+ doc.write("</style>");
+ doc.write("</head><body>");
+ doc.write("<h3>Properties of " + name + "</h3>");
+ doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+ doc.write("<table class='properties'>");
+ doc.write("<tr><th>Name</th><th>Value</th></tr>");
+ for (prop in TestCases[name]) {
+ doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+ }
+ doc.write("</table>");
+ doc.write("</body></html>");
+ doc.close();
+ win.focus();
+ }
+ ]]>
+ </script>
+ <script type="text/javascript" language="JavaScript"><![CDATA[
+ function findTop(obj) {
+ var curtop = 0;
+ if (obj.offsetParent) {
+ do {
+ curtop += obj.offsetTop;
+ } while (obj = obj.offsetParent);
+ return curtop;
+ }
+ }
+
+ function keyHandler(e) {
+ if (typeof(e) == "undefined") {
+ e = event;
+ }
+ if (e && e.ctrlKey) {
+ if (e.keyCode == 188 /*Ctrl+,*/) {
+ jumpToNextError(false);
+ } else if (e.keyCode == 190 /*Ctrl+.*/) {
+ jumpToNextError(true);
+ }
+ }
+ }
+
+ function jumpToNextError(forward) {
+ if (typeof(document.getElementsByClassName) == "undefined") {
+ document.getElementsByClassName = function (className) {
+ var trs = document.getElementsByTagName("tr");
+ var res = new Array();
+ for (i = 0; i < trs.length; i++) {
+ var tr = trs[i];
+ var cls = tr.className;
+ if (cls == className) {
+ res.push(tr);
+ }
+ }
+ return res;
+ }
+ }
+ var windowY = typeof(window.scrollY) != "undefined" ? window.scrollY : document.body.scrollTop;
+ if (forward) { // want to jump to the next/prev
+ windowY++;
+ } else {
+ windowY--;
+ }
+ var targetY = forward ? Number.MAX_VALUE : 0;
+ var target;
+ var errs = document.getElementsByClassName("Error");
+ for (var i = 0; i < errs.length; i++) {
+ var elt = errs[i];
+ var tds = elt.getElementsByTagName("td");
+ if (tds.length >= 2) {
+ var status = tds[1].firstChild.nodeValue;
+ if (status != "Error" && status != "Failure")
+ continue; // only stop in test results, not in summary header
+ }
+ var y = findTop(elt);
+ if (forward) {
+ if (y > windowY && y < targetY) {
+ target = elt;
+ targetY = y;
+ }
+ } else {
+ if (y < windowY && y > targetY) {
+ target = elt;
+ targetY = y;
+ }
+ }
+ }
+ if (target) {
+ target.scrollIntoView();
+ } else {
+ window.scrollTo(0, forward ? document.body.scrollHeight : 0);
+ }
+
+ return false;
+ }
+
+ document.onkeydown = keyHandler;
+ ]]>
+ </script>
+ </head>
+ <body>
+ <a name="top"></a>
+ <xsl:call-template name="pageHeader"/>
+
+ <!-- Summary part -->
+ <xsl:call-template name="summary"/>
+ <hr size="1" width="95%" align="left"/>
+
+ <!-- Package List part -->
+ <xsl:call-template name="packagelist"/>
+ <hr size="1" width="95%" align="left"/>
+
+ <!-- For each package create its part -->
+ <xsl:call-template name="packages"/>
+ <hr size="1" width="95%" align="left"/>
+
+ <!-- For each class create the part -->
+ <xsl:call-template name="classes"/>
+
+ </body>
+ </html>
+</xsl:template>
+
+
+
+ <!-- ================================================================== -->
+ <!-- Write a list of all packages with an hyperlink to the anchor of -->
+ <!-- of the package name. -->
+ <!-- ================================================================== -->
+ <xsl:template name="packagelist">
+ <h2>Packages</h2>
+ Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers.
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <!-- list all packages recursively -->
+ <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:sort select="@package"/>
+ <xsl:variable name="testsuites-in-package" select="/testsuites/testsuite[./@package = current()/@package]"/>
+ <xsl:variable name="testCount" select="sum($testsuites-in-package/@tests)"/>
+ <xsl:variable name="errorCount" select="sum($testsuites-in-package/@errors)"/>
+ <xsl:variable name="failureCount" select="sum($testsuites-in-package/@failures)"/>
+ <xsl:variable name="timeCount" select="sum($testsuites-in-package/@time)"/>
+
+ <!-- write a summary for the package -->
+ <tr valign="top">
+ <!-- set a nice color depending if there is an error/failure -->
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="$failureCount > 0">Failure</xsl:when>
+ <xsl:when test="$errorCount > 0">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><a href="#{@package}"><xsl:value-of select="@package"/></a></td>
+ <td><xsl:value-of select="$testCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ <td><xsl:value-of select="$failureCount"/></td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="$timeCount"/>
+ </xsl:call-template>
+ </td>
+ <td><xsl:value-of select="$testsuites-in-package/@timestamp"/></td>
+ <td><xsl:value-of select="$testsuites-in-package/@hostname"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </xsl:template>
+
+
+ <!-- ================================================================== -->
+ <!-- Write a package level report -->
+ <!-- It creates a table with values from the document: -->
+ <!-- Name | Tests | Errors | Failures | Time -->
+ <!-- ================================================================== -->
+ <xsl:template name="packages">
+ <!-- create an anchor to this package name -->
+ <xsl:for-each select="/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:sort select="@package"/>
+ <a name="{@package}"></a>
+ <h3>Package <xsl:value-of select="@package"/></h3>
+
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+
+ <!-- match the testsuites of this package -->
+ <xsl:apply-templates select="/testsuites/testsuite[./@package = current()/@package]" mode="print.test"/>
+ </table>
+ <a href="#top">Back to top</a>
+ <p/>
+ <p/>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="classes">
+ <xsl:for-each select="testsuite">
+ <xsl:sort select="@name"/>
+ <!-- create an anchor to this class name -->
+ <a name="{@name}"></a>
+ <h3>TestCase <xsl:value-of select="@name"/></h3>
+
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testcase.test.header"/>
+ <!--
+ test can even not be started at all (failure to load the class)
+ so report the error directly
+ -->
+ <xsl:if test="./error">
+ <tr class="Error">
+ <td colspan="4"><xsl:apply-templates select="./error"/></td>
+ </tr>
+ </xsl:if>
+ <xsl:apply-templates select="./testcase" mode="print.test"/>
+ </table>
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+ Properties »
+ </a>
+ </div>
+ <p/>
+
+ <a href="#top">Back to top</a>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="summary">
+ <h2>Summary</h2>
+ <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+ <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+ <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+ <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+ <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <tr valign="top">
+ <th>Tests</th>
+ <th>Failures</th>
+ <th>Errors</th>
+ <th>Success rate</th>
+ <th>Time</th>
+ </tr>
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="$failureCount > 0">Failure</xsl:when>
+ <xsl:when test="$errorCount > 0">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><xsl:value-of select="$testCount"/></td>
+ <td><xsl:value-of select="$failureCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ <td>
+ <xsl:call-template name="display-percent">
+ <xsl:with-param name="value" select="$successRate"/>
+ </xsl:call-template>
+ </td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="$timeCount"/>
+ </xsl:call-template>
+ </td>
+
+ </tr>
+ </table>
+ <table border="0" width="95%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: <i>failures</i> are anticipated and checked for with assertions while <i>errors</i> are unanticipated.
+ </td>
+ </tr>
+ </table>
+ </xsl:template>
+
+ <!--
+ Write properties into a JavaScript data structure.
+ This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
+ -->
+ <xsl:template match="properties">
+ cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+ <xsl:for-each select="property">
+ <xsl:sort select="@name"/>
+ cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+ </xsl:for-each>
+ </xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+ <h1><xsl:value-of select="$TITLE"/></h1>
+ <div style="position:fixed; top:8px; right:8px; _position:absolute; _top:expression(eval(document.body.scrollTop + 8));">
+ <button title="Scroll to previous failure/error (Ctrl+,)" onclick="javascript:jumpToNextError(false);">▲</button>
+ <button title="Scroll to next failure/error (Ctrl+.)" onclick="javascript:jumpToNextError(true );">▼</button>
+ </div>
+ <table width="100%">
+ <tr>
+ <td align="left">
+ <a href="../../../">Downloads</a> /
+ <a href="../../">Build</a> /
+ <a href="../../testResults.php">Test Results</a> |
+ <a href="../xml/{$filename}"><xsl:value-of select="$filename"/></a>
+ </td>
+ <td align="right">Designed for use with <a href='http://www.junit.org'>JUnit</a> and <a href='http://ant.apache.org/ant'>Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="header">
+ <tr valign="top">
+ <th width="80%">Name</th>
+ <th>Tests</th>
+ <th>Errors</th>
+ <th>Failures</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+ <tr valign="top">
+ <th width="80%">Name</th>
+ <th>Tests</th>
+ <th>Errors</th>
+ <th>Failures</th>
+ <th nowrap="nowrap">Time(s)</th>
+ <th nowrap="nowrap">Time Stamp</th>
+ <th>Host</th>
+ </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+ <tr valign="top">
+ <th>Name</th>
+ <th>Status</th>
+ <th width="80%">Type</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+ <tr valign="top">
+ <!-- set a nice color depending if there is an error/failure -->
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="@failures[.> 0]">Failure</xsl:when>
+ <xsl:when test="@errors[.> 0]">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+
+ <!-- print testsuite information -->
+ <td><a href="#{@name}"><xsl:value-of select="@name"/></a></td>
+ <td><xsl:value-of select="@tests"/></td>
+ <td><xsl:value-of select="@errors"/></td>
+ <td><xsl:value-of select="@failures"/></td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ <td><xsl:apply-templates select="@timestamp"/></td>
+ <td><xsl:apply-templates select="@hostname"/></td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="failure | error">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <td>
+ <xsl:attribute name="title"><xsl:value-of select="@classname"/></xsl:attribute>
+ <xsl:value-of select="@name"/>
+ </td>
+ <xsl:choose>
+ <xsl:when test="failure">
+ <td>Failure</td>
+ <td><xsl:apply-templates select="failure"/></td>
+ </xsl:when>
+ <xsl:when test="error">
+ <td>Error</td>
+ <td><xsl:apply-templates select="error"/></td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td>Success</td>
+ <td></td>
+ </xsl:otherwise>
+ </xsl:choose>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<xsl:template match="failure">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the tescase template -->
+<xsl:template name="display-failures">
+ <xsl:choose>
+ <xsl:when test="not(@message)">N/A</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@message"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- display the stacktrace -->
+ <code>
+ <br/><br/>
+ <xsl:call-template name="br-replace">
+ <xsl:with-param name="word" select="."/>
+ </xsl:call-template>
+ </code>
+ <!-- the later is better but might be problematic for non-21" monitors... -->
+ <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+ <xsl:param name="string"/>
+ <xsl:param name="tmp1" select="string:replaceAll(string:new(string($string)),'\\','\\\\')"/>
+ <xsl:param name="tmp2" select="string:replaceAll(string:new(string($tmp1)),"'","\\'")"/>
+ <xsl:param name="tmp3" select="string:replaceAll(string:new(string($tmp2))," ",'\\n')"/>
+ <xsl:param name="tmp4" select="string:replaceAll(string:new(string($tmp3))," ",'\\r')"/>
+ <xsl:value-of select="$tmp4"/>
+</xsl:template>
+
+
+<!--
+ template that will convert a carriage return into a br tag
+ @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+ <xsl:param name="word"/>
+ <xsl:choose>
+ <xsl:when test="contains($word, '
')">
+ <xsl:value-of select="substring-before($word, '
')"/>
+ <br/>
+ <xsl:call-template name="br-replace">
+ <xsl:with-param name="word" select="substring-after($word, '
')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$word"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="display-time">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/org.eclipse.ajdt.releng/build_bundles/eclipse-test-framework-4.5.zip b/org.eclipse.ajdt.releng/build_bundles/eclipse-test-framework-4.5.zip
new file mode 100644
index 0000000..6109f25
--- /dev/null
+++ b/org.eclipse.ajdt.releng/build_bundles/eclipse-test-framework-4.5.zip
Binary files differ
diff --git a/org.eclipse.ajdt.releng/build_bundles/library.xml b/org.eclipse.ajdt.releng/build_bundles/library.xml
new file mode 100644
index 0000000..fd343d5
--- /dev/null
+++ b/org.eclipse.ajdt.releng/build_bundles/library.xml
@@ -0,0 +1,401 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2001,2015 IBM Corporation and others.
+ 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:
+ IBM Corporation - initial API and implementation
+ -->
+
+<project
+ name="Library"
+ default="usage"
+ basedir=".">
+
+ <target name="usage">
+ <echo message="Please refer to http://wiki.eclipse.org/Platform-releng/Eclipse_Test_Framework for instructions on usage." />
+ </target>
+
+ <target
+ name="init"
+ unless="testframeworkinitialized">
+ <!--
+
+ Parameters:
+
+ (Mandatory)
+
+ data-dir - the directory for Eclipse to write its data
+
+ plugin-name - the name of the plugin to test
+
+ classname - the name of the test class
+
+
+ (Optional - added to (or overrides) defaults set in infrastructure scripts)
+
+ vmargs (1) - a string containing arguments to pass to the VM. These
+ parameters should be specific, but permanent, to the test plugin
+ that uses them. For example, a jdt core test plugin might use
+ vmargs="-DstoreMemory=jdtcoremodel_mem_trace,dir=${basedir}/../..".
+ Note, normally test plugins do not need to specify -Xmx
+ or -XX:MaxPermSize type parameters as they are set by
+ the test infrastructure depending machine, OS, VM version, etc,
+ unless of course the test plugins needs especially low or high values,
+ as part of the test.
+
+ extraVMargs (1) - allows separate setting of VM args in a setting other than
+ the production runs of automated tests. Should not normally be
+ "hard coded" in to the test plugin itself, but instead reserved
+ for someone to add arguments in some other setting other then
+ the production test environment. For example,
+ a committer to jdt.core might want to do a quick test before
+ a commit, and use
+ extraVMargs="-Dcompliance=1.7"
+ in some local version of testing scripts.
+
+ timeout - overrides default test timeout value (in milliseconds). [May not currently override default?]
+
+ test-output - overrides default output file produced from test run. [May not currently override default?]
+
+ plugin-path - path to root of plug-in
+
+ useEclipseExe - property setting forces test to launch via eclipse executable. [Not fully supported. See bug 387638.]
+
+ junit-report-output - output directory for junit reports produced for specified classname.
+
+
+ (Environment Variables - environment variables that the test framework uses or passes through)
+
+ ANT_OPTS (1) - Carry through the ANT_OPTS environment variable settings, if any. As described in
+ http://ant.apache.org/manual/running.html
+ <quote>
+ ANT_OPTS - command-line arguments that should be passed to the JVM.
+ For example, you can define system properties or set the
+ maximum Java heap size here.
+ </quote>
+ This can be important for some environments such as running tests on eclipse.org Hudson,
+ where proxy servers, etc., can be defined for that Hudson instance by the machine itself.
+
+ (Reserved - documented here for awareness, but reserved for use by the test infrastructure
+ itself. The test infrastructure sets these based on typical, common, or required values
+ for the production test environment.)
+
+ frameworkvmargs (1) - vm args provided by the automated test infrastructure. Normally, these arguments
+ provide parameters for cases that apply to all test suites as ran in a production environment,
+ such as -Xms, -Xmx, -XX:MaxPermSize, -XstartOnFirstThread
+ where these values may vary based on machine or VM being used.
+
+ loglocation - some VMs allow crash log location to specified as VM parameter (but,
+ pretty special, limited usefulness and may be removed.
+
+ Notes:
+
+ 1) Note how vm arguments are ordered. The vm arguments variables are combined in order:
+
+ ${frameworkvmargs} ${ANT_OPTS} ${vmargs} ${extraVMargs}
+
+ Typically (as far as is known) if the same argument is specified twice,
+ the one appearing last in the line takes priority. For example, if
+ vmargs specified -Dtestarg=one and
+ extraVMargs specified -Dtestarg=two,
+ then "two" could be the value of the testarg property at runtime.
+
+ -->
+ <property environment="env" />
+
+ <condition
+ property="envantopts"
+ value="${env.ANT_OPTS}"
+ else="">
+ <isset property="env.ANT_OPTS" />
+ </condition>
+
+
+ <echo message="ANT_OPTS: ${env.ANT_OPTS}" />
+
+ <tstamp>
+ <format
+ property="TIMENOW"
+ pattern="HHmmssSSSS" />
+ </tstamp>
+ <!--property setting useEclipseExe launches tests using the eclipse executable-->
+ <condition
+ property="launchTarget"
+ value="eclipse-test">
+ <isset property="useEclipseExe" />
+ </condition>
+ <!--default launch target for launching tests-->
+ <property
+ name="launchTarget"
+ value="java-test" />
+ <property
+ name="formatter"
+ value="org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter" />
+
+ <tstamp prefix="NOW" />
+ <property
+ name="coverage-output"
+ value="${eclipse-home}/coverage" />
+ <property file="${basedir}/finalPluginsVersions.properties" />
+ <echo message="basedir = ${basedir}" />
+ <property
+ name="vmargs"
+ value="" />
+ <property
+ name="extraVMargs"
+ value="" />
+ <property
+ name="plugin-path"
+ value="" />
+
+ <property
+ name="timeout"
+ value="7200000" />
+ <property
+ name="test-output"
+ value="${eclipse-home}/${classname}.xml" />
+ <property
+ name="junit-report-output"
+ value="${eclipse-home}/results" />
+ <mkdir dir="${junit-report-output}" />
+ <property
+ name="junit-stylesheet"
+ value="${basedir}/JUNIT.XSL" />
+ <property
+ name="testframeworkinitialized"
+ value="true" />
+ <echoproperties description="Echo Properties at end of init in library.xml" />
+ </target>
+
+ <target
+ name="core-test"
+ description="Eclipse application used to launch HEADLESS plugin tests."
+ depends="init">
+ <antcall target="${launchTarget}">
+ <param
+ name="application"
+ value="org.eclipse.test.coretestapplication" />
+ </antcall>
+ </target>
+
+ <target
+ name="ui-test"
+ description="Eclipse application used to launch UI plugin tests."
+ depends="init">
+ <antcall target="${launchTarget}">
+ <param
+ name="application"
+ value="org.eclipse.test.uitestapplication" />
+ </antcall>
+ </target>
+
+ <target
+ name="java-test"
+ depends="init">
+ <echo
+ level="debug"
+ message="DEBUG: Running tests using java-test" />
+ <!--default vm args Note: the goal is to use same values as what would be in eclipse.ini -->
+ <condition
+ property="frameworkvmargs"
+ value=" -Xms256m -Xmx1024m -XX:MaxPermSize=256m ${envantopts}">
+ <os family="windows" />
+ </condition>
+ <!--
+ For more info on -XstartOnFirstThread, see
+ http://stackoverflow.com/questions/3976342/running-swt-based-cross-platform-jar-properly-on-a-mac
+ -->
+ <condition
+ property="frameworkvmargs"
+ value=" -XstartOnFirstThread -Xms256m -Xmx1024m -XX:MaxPermSize=256m ${envantopts}">
+ <os family="mac" />
+ </condition>
+ <property
+ name="frameworkvmargs"
+ value=" -Xms256m -Xmx1024m -XX:MaxPermSize=256m ${envantopts}" />
+
+ <condition
+ property="loglocation"
+ value=" ${loglocationarg}=${junit-report-output}/${classname}-crash.log"
+ else="">
+ <isset property="loglocationarg" />
+ </condition>
+
+ <!--set default jvm to use for testing-->
+ <property
+ name="jvm"
+ value="${java.home}/bin/java" />
+
+ <!-- if not set by caller, set frameworkperfargs to blank -->
+ <property name="frameworkperfargs" value=""/>
+
+ <echo message="Running ${classname}. Result file: ${junit-report-output}/${classname}.xml" />
+ <echo message="timout property: ${timeout}" />
+
+ <echo message="frameworkvmargs: ${frameworkvmargs}" />
+ <echo message="vmargs: ${vmargs}" />
+ <echo message="extraVMargs: ${extraVMargs}" />
+ <echo message="frameworkperfargs: ${frameworkperfargs}" />
+ <echo message="crash loglocationarg (if any): ${loglocationarg}" />
+ <echo message="crash loglocation (if not default): ${loglocation}" />
+
+ <java
+ fork="true"
+ dir="."
+ timeout="${timeout}"
+ jvm="${jvm}"
+ logError="true"
+ classname="org.eclipse.core.launcher.Main"
+ output="${junit-report-output}/${classname}.txt">
+ <classpath>
+ <fileset dir="${eclipse-home}/plugins">
+ <include name="org.eclipse.equinox.launcher_*.jar" />
+ </fileset>
+ </classpath>
+ <arg line="-application ${application}" />
+ <arg line="-data ${data-dir}" />
+ <arg line="formatter=${formatter},${test-output}" />
+ <arg line="-testPluginName ${plugin-name}" />
+ <arg line="-className ${classname}" />
+ <arg line="-os ${os}" />
+ <arg line="-ws ${ws}" />
+ <arg line="-arch ${arch}" />
+ <arg line="-consolelog" />
+ <arg line="-timeout ${timeout}" />
+ <arg value="-junitReportOutput" />
+ <arg path="${junit-report-output}" />
+ <jvmarg line="${frameworkvmargs} ${loglocation} ${vmargs} ${extraVMargs} ${frameworkperfargs}" />
+ <sysproperty
+ key="PLUGIN_PATH"
+ value="${plugin-path}" />
+ </java>
+ <antcall target="collect-results" />
+ </target>
+
+ <target
+ name="eclipse-test"
+ description="Runs the specified classname as a plug-in test."
+ depends="init">
+ <echo
+ level="debug"
+ message="DEBUG: Running tests using eclipse-test" />
+
+ <!--use -consolelog if launching a headless test-->
+ <condition
+ property="consolelog"
+ value="-consolelog">
+ <equals
+ arg1="${application}"
+ arg2="org.eclipse.test.coretestapplication" />
+ </condition>
+ <property
+ name="consolelog"
+ value="" />
+
+ <!--
+ vm selection priority:
+ 1. user-specified java executable via outer Ant property setting of "jvm".
+ 2. java executable on path.
+ -->
+ <condition
+ property="test-vm"
+ value="-vm ${jvm}">
+ <isset property="jvm" />
+ </condition>
+ <property
+ name="test-vm"
+ value="" />
+
+ <!--ensure executable has execute permission-->
+ <chmod
+ file="${eclipse-home}/eclipse"
+ perm="ugo+rx" />
+
+
+ <echo message="Running ${classname}. Result file: ${junit-report-output}/${classname}.xml." />
+
+ <exec
+ executable="${eclipse-home}/eclipse"
+ dir="${eclipse-home}"
+ timeout="${timeout}"
+ logError="true"
+ failonerror="false"
+ output="${junit-report-output}/${classname}.txt">
+ <arg line="-data ${data-dir}" />
+ <arg line="${test-vm}" />
+ <arg line="-application ${application}" />
+ <arg line="formatter=${formatter},${test-output}" />
+ <arg line="-testPluginName ${plugin-name}" />
+ <arg line="-className ${classname}" />
+ <arg line="-nosplash" />
+ <arg line="--launcher.suppressErrors" />
+ <arg line="${consolelog}" />
+ <arg line="-vmargs ${frameworkvmargs} ${loglocation} ${vmargs} ${extraVMargs} -DPLUGIN_PATH=${plugin-path}" />
+ </exec>
+ <antcall target="collect-results" />
+ </target>
+
+ <target name="collect-results">
+ <dirname
+ property="output-dir"
+ file="${test-output}" />
+ <basename
+ property="output-file-name"
+ file="${test-output}" />
+ <junitreport
+ todir="${junit-report-output}"
+ tofile="${classname}.xml">
+ <fileset dir="${output-dir}">
+ <include name="${output-file-name}" />
+ </fileset>
+ </junitreport>
+
+
+ <!--save .log content and *.log content from configuration directory-->
+ <concat destfile="${junit-report-output}/${classname}.log">
+ <fileset
+ dir="${eclipse-home}"
+ includes="${data-dir}/.metadata/*.log" />
+ <fileset
+ dir="${eclipse-home}"
+ includes="configuration/*.log" />
+ </concat>
+
+ <!-- save any crash logs generated (before they are deleted by subsequent test runs -->
+ <!--
+ TODO: not all VM's call their crash logs "hs_err_pid*.log".
+ We can expand the list as we learn of others
+ -->
+ <copy todir="${junit-report-output}/crashlogs/">
+ <fileset dir="${eclipse-home}">
+ <include name="**/hs_err_pid*.log" />
+ </fileset>
+ <globmapper
+ from="*"
+ to="${classname}.*" />
+ </copy>
+ </target>
+
+ <target name="collect">
+ <!--
+ This target can be used to aggragate test runs from multiple test suites into a single report.
+
+ Parameters to this target:
+ includes - the names of the files to include
+ output-file - the name of the output file to produce
+ -->
+ <junitreport
+ todir="."
+ tofile="${output-file}">
+ <fileset dir=".">
+ <include name="${includes}" />
+ </fileset>
+ </junitreport>
+ </target>
+
+</project>
+
diff --git a/org.eclipse.ajdt.releng/build_bundles/readme b/org.eclipse.ajdt.releng/build_bundles/readme
new file mode 100644
index 0000000..ddbb744
--- /dev/null
+++ b/org.eclipse.ajdt.releng/build_bundles/readme
@@ -0,0 +1,3 @@
+For Eclipse 4.5 I had to download a new test framework zip - this did not include library.xml and JUNIT.XSL
+like older versions so I downloaded those separately and put them here. The build copies them
+into the right place before they are used (copies them to where the build is still looking for them)