<?xml version="1.0" encoding="utf-8"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<!DOCTYPE document
[
<!ELEMENT document (properties?, release+)>
<!ELEMENT properties (title)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT release (action*)>
<!ELEMENT action (#PCDATA)>
<!ATTLIST release
          version CDATA #REQUIRED
          date CDATA #REQUIRED
          description CDATA #IMPLIED>
<!ATTLIST action
          issue CDATA #IMPLIED
          type (add|fix|remove|update) #REQUIRED
          breaks-bwc (true|false) #IMPLIED>
]
>
<document>
  <properties>
    <title>Apache AntUnit</title>
  </properties>

  <release version="1.4" date="unreleased">
    <action type="update" breaks-bwc="true">
      The coordinates inside the Ivy file have been changed to match
      those of the POM.
    </action>
    <action type="fix" issue="57341">
      The br-replace template inside the XSLT stylesheets used by
      for reports could cause stack overflows or out-of-memory errors
      when applied to big outputs.
    </action>
  </release>

  <release version="1.3" date="2014-05-14">
    <action type="add" issue="53383">
      New assertion assertRefResourceExists,
      assertRefResourceDoesntExist, assertRefResourceContains,
      assertRefResourceDoesntContain, assertNestedResourceExists,
      assertNestedResourceDoesntExist have been added.  These new
      assertions work for non-filesystem resources unlike their
      existing cousins of AntUnit 1.2.
    </action>
    <action type="add" issue="43582">
      A new AntUnitListener named "logforwarder" can be attached to
      forward any log output from the project under test to the
      project running the AntUnit task immediately.
    </action>
    <action type="fix" issue="56470">
      LogCapturer can now optionally add (platform dependent) line
      breaks between log messages that it records.
      The log related assertions and the logcontent resource have a
      new attribute "mergeLines" that controls the line breaks, it
      defaults to "true" - i.e. no line breaks - to preserve backwards
      compatibility.
    </action>
  </release>

  <release version="1.2" date="2011-08-16">
    <action type="update" breaks-bwc="true">
      assertResourceContains now first validates that the given
      resource actually exists using assertResourceExists - this may
      lead to a different error message than the ones generated with
      AntUnit 1.1.
    </action>
    <action type="add">
      New assertion assertResourceExists and assertResourceDoesntExist
      have been added.
    </action>
    <action type="fix" breaks-bwc="true">
      The XSLT stylesheets now create HTML files instead of plain text
      for logs sent to System.err and System.out.  You can always get
      back to your own reporting by providing custom stylesheets.
    </action>
    <action type="add" issue="49168">
      It is now possible to pass references from the build file
      containing the &lt;antunit&gt; task to the build files under
      test.
    </action>
    <action type="add">
      Add experimental JUnit3 and JUnit4 adapters allowing to launch
      AntUnit script from JUnit runner.  The API of that code is not
      fixed and may change in future releases.
    </action>
    <action type="update">
      expectfailure report the original build exception chained when failing
    </action>
    <action type="fix">
      Default XSLT stylesheets now properly escape XML in exception
      stack traces.
    </action>
    <action type="fix">
      assertPropertyContains was not checking the value of the property but
      the name of the property.
    </action>
    <action type="add">
      Add a fail task that makes a test case fail if no condition is provided or
      if the provided one is evaluated to false.
    </action>
  </release>
  
  <release version="1.1" date="2008-09-26">
    <action type="fix" issue="42745">
      assertFileExists example wrong, should use @file instead of @name
    </action>
    <action type="fix" issue="43466">
      Failure in tearDown doesn't result in failed test run
    </action>
    <action type="fix" issue="43639">
      assertMatches' casesensitive attribute didn't default to true as
      documented
    </action>
    <action type="add" issue="43639">
      added a new assertDoesntMatch assertion
    </action>
    <action type="add" issue="43475">
      added suiteSetUp and suiteTearDown targets
    </action>
    <action type="add" issue="43604">
      plainlistener and xmllistener can now optionally contain the
      test's log output in their reports
    </action>
    <action type="add" issue="43614">
      xmllistener will now log the properties of the project under
      test
    </action>
    <action type="add">
      added new assertResourceContains and assertResourceDoesntContain
      assertion
    </action>
  </release>

</document>
