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 &gt; 0">Failure</xsl:when>
+                            <xsl:when test="$errorCount &gt; 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 &#187;
+                </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 &gt; 0">Failure</xsl:when>
+                    <xsl:when test="$errorCount &gt; 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);">&#x25B2;</button>
+        <button title="Scroll to next failure/error (Ctrl+.)"     onclick="javascript:jumpToNextError(true );">&#x25BC;</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[.&gt; 0]">Failure</xsl:when>
+                <xsl:when test="@errors[.&gt; 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)),&quot;'&quot;,&quot;\\&apos;&quot;)"/>
+    <xsl:param name="tmp3" select="string:replaceAll(string:new(string($tmp2)),&quot;&#10;&quot;,'\\n')"/>
+    <xsl:param name="tmp4" select="string:replaceAll(string:new(string($tmp3)),&quot;&#13;&quot;,'\\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, '&#xa;')">
+        <xsl:value-of select="substring-before($word, '&#xa;')"/>
+        <br/>
+        <xsl:call-template name="br-replace">
+          <xsl:with-param name="word" select="substring-after($word, '&#xa;')"/>
+        </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)
