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 &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)