<!--
   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.
-->
<html>
  <head>
    <meta http-equiv="Content-Language" content="en-us"></meta>
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>More Assertion Tasks</title>
  </head>

  <body>
    <h1>More Assertion Tasks</h1>

    <p>This Ant library also provides a couple of pre-defined
    assertions that are specializations of the <a
    href="assert.html">&lt;assertTrue&gt;</a> task.</p>

    <h2><a name="assertFalse">assertFalse</a></h2>

    <h3>Description</h3>

    <p>Negates &lt;assertTrue&gt;.  Supports the same attributes and
    nested elements as &lt;assertTrue&gt; but makes the build fail if
    the nested condition is true.</p>

    <h3>Examples</h3>

    <p>Make the build fail with the message "foo is bar" if the
      property foo has the value bar:</p>

    <pre>
      &lt;assertFalse message="foo is bar"&gt;
        &lt;equals arg1="${foo}" arg2="bar"/&gt;
      &lt;/assertFalse&gt;
    </pre>

    <h2><a name="assertEquals">assertEquals</a></h2>

    <p>Asserts that its two arguments are equal.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">expected</td>
          <td valign="top">First string to test.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">actual</td>
          <td valign="top">Second string to test.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Expected
            '<em>expected</em>' but was '<em>actual</em>'".</td>
          <td align="center">No.</td>
        </tr>
        <tr>
          <td valign="top">casesensitive</td>
          <td valign="top">Perform a case sensitive comparision.
            Default is true.</td>
          <td valign="top" align="center">No</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail with the message "foo is not bar" if the
      property foo doesn't hold the value bar regardless of case:</p>

    <pre>
      &lt;assertEquals message="foo is not bar" expected="bar"
                      actual="${foo}" casesensitive="false"/&gt;
    </pre>

    <h2><a name="assertPropertySet">assertPropertySet</a></h2>

    <p>Asserts that a property has a value.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">name</td>
          <td valign="top">Name of the property.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Expected
            property '<em>name</em>'".</td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail with the message "Expected property 'foo'"
    if the property foo is not defined:</p>

    <pre>
      &lt;assertPropertySet name="foo"/&gt;
    </pre>

    <h2><a name="assertPropertyEquals">assertPropertyEquals</a></h2>

    <p>Asserts that a given property is set and holds a certain
    value.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">name</td>
          <td valign="top">Name of the property.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">value</td>
          <td valign="top">Expected value.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true. Defaults to "Expected property
            '<em>name</em>' to have value '<em>value</em>' but was
            '<em>value of property name</em>'".</td>
          <td align="center">No.</td>
        </tr>
        <tr>
          <td valign="top">casesensitive</td>
          <td valign="top">Perform a case sensitive comparision.
            Default is true.</td>
          <td valign="top" align="center">No</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail with the message "foo is not bar" if the
      property foo doesn't hold the value bar regardless of case:</p>

    <pre>
      &lt;assertPropertyEquals message="foo is not bar" value="bar"
                              name="foo" casesensitive="false"/&gt;
    </pre>

    <h2><a name="assertPropertyContains">assertPropertyContains</a></h2>

    <p>Asserts that a given property is set and holds a certain
    value as substring.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">name</td>
          <td valign="top">Name of the property.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">value</td>
          <td valign="top">Expected substring value.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true. Defaults to "Expected property
            '<em>name</em>' to contain value '<em>value</em>' but was
            '<em>value of property name</em>'".</td>
          <td align="center">No.</td>
        </tr>
        <tr>
          <td valign="top">casesensitive</td>
          <td valign="top">Perform a case sensitive comparision.
            Default is true.</td>
          <td valign="top" align="center">No</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail with the message "foo doesn't contain bar" if the
      property foo doesn't contain the value bar regardless of case:</p>

    <pre>
      &lt;assertPropertyContains message="foo doesn't contain bar" value="bar"
                              name="foo" casesensitive="false"/&gt;
    </pre>

    <h2><a name="assertFileExists">assertFileExists</a></h2>

    <p>Asserts that a given file exists.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">file</td>
          <td valign="top">Location of the file.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Expected
            file '<em>file</em>' to exist".</td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail if the file ${ant.home}/lib/ant.jar doesn't
      exist:</p>

    <pre>
      &lt;assertFileExists file="${ant.home}/lib/ant.jar"/&gt;
    </pre>

    <h2><a name="assertFileDoesntExist">assertFileDoesntExist</a></h2>

    <p>Asserts that a given file does not exist.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">file</td>
          <td valign="top">Location of the file.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Didn't expect
            file '<em>file</em>' to exist".</td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail if the file ${ant.home}/lib/ant.jar
      exists:</p>

    <pre>
      &lt;assertFileDoesntExist file="${ant.home}/lib/ant.jar"/&gt;
    </pre>

    <h2><a name="assertResourceExists">assertResourceExists</a></h2>

    <p><em>Since AntUnit 1.2</em></p>

    <p>Asserts that a given resource exists.  This was intended as a
      generalization of <code>assertFileExists</code> but still really
      only works for file resources.
      Use <code>assertNestedResourceExists</code>
      or <code>assertRefResourceExists</code> for non-filesystem
      resources.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">resource</td>
          <td valign="top">Location of the resource.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Expected
            resource '<em>resource</em>' to exist".</td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail if the resource ${ant.home}/lib/ant.jar doesn't
      exist:</p>

    <pre>
      &lt;assertResourceExists resource="${ant.home}/lib/ant.jar"/&gt;
    </pre>

    <h3>Ant 1.7.x Note</h3>

    <p><code>assertResourceExists</code> relies on Ant 1.8.0 or later,
      it doesn't work with Ant 1.7.x.  You can simulate the assertion
      using the <code>resourceExists</code> condition
      and <code>assertTrue</code>, for example</p>

    <pre>
      &lt;au:assertTrue message="Expected resource '${ant.home}/lib/ant.jar' to exist"&gt;
        &lt;au:resourceExists&gt;
          &lt;file file="${ant.home}/lib/ant.jar"/&gt;
        &lt;/au:resourceExists&gt;
      &lt;/au:assertTrue&gt;
    </pre>

    <h2><a name="assertRefResourceExists">assertRefResourceExists</a></h2>

    <p><em>Since AntUnit 1.3</em></p>

    <p>Asserts that a resource given by its id exists.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">refid</td>
          <td valign="top">Reference to a resource defined inside the project.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Expected
            resource '<em>refid</em>' to exist".</td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail if the resource ${ant.home}/lib/ant.jar doesn't
      exist:</p>

    <pre>
      &lt;file file="${ant.home}/lib/ant.jar" id="ant.jar"/&gt;
      &lt;assertRefResourceExists refid="ant.jar"/&gt;
    </pre>

    <h3>Ant 1.7.x Note</h3>

    <p><code>assertRefResourceExists</code> relies on Ant 1.8.0 or later,
      it doesn't work with Ant 1.7.x.</p>

    <h2><a name="assertNestedResourceExists">assertNestedResourceExists</a></h2>

    <p><em>Since AntUnit 1.3</em></p>

    <p>Asserts that a resource given as nested element exists.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Expected resource to exist".</td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail if the resource ${ant.home}/lib/ant.jar doesn't
      exist:</p>

    <pre>
      &lt;assertNestedResourceExists&gt;
        &lt;file file="${ant.home}/lib/ant.jar"/&gt;
      &lt;/assertNestedResourceExists&gt;
    </pre>

    <h3>Ant 1.7.x Note</h3>

    <p><code>assertNestedResourceExists</code> relies on Ant 1.8.0 or later,
      it doesn't work with Ant 1.7.x.</p>

    <h2><a name="assertResourceDoesntExist">assertResourceDoesntExist</a></h2>

    <p><em>Since AntUnit 1.2</em></p>

    <p>Asserts that a given resource does not exist.  This was
      intended as a generalization
      of <code>assertFileDoesntExist</code> but still really only
      works for file resources.
      Use <code>assertNestedResourceDoesntExist</code>
      or <code>assertRefResourceDoesntExist</code> for non-filesystem
      resources.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">resource</td>
          <td valign="top">Location of the resource.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Didn't expect
            resource '<em>resource</em>' to exist".</td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail if the resource ${ant.home}/lib/ant.jar
      exists:</p>

    <pre>
      &lt;assertResourceDoesntExist resource="${ant.home}/lib/ant.jar"/&gt;
    </pre>

    <h3>Ant 1.7.x Note</h3>

    <p><code>assertResourceDoesntExist</code> relies on Ant 1.8.0 or later,
      it doesn't work with Ant 1.7.x.  You can simulate the assertion
      using the <code>resourceExists</code> condition
      and <code>assertFalse</code>, for example</p>

    <pre>
      &lt;au:assertFalse message="Didn't expect resource '${ant.home}/lib/ant.jar' to exist"&gt;
        &lt;au:resourceExists&gt;
          &lt;file file="${ant.home}/lib/ant.jar"/&gt;
        &lt;/au:resourceExists&gt;
      &lt;/au:assertFalse&gt;
    </pre>

    <h2><a name="assertRefResourceDoesntExist">assertRefResourceDoesntExist</a></h2>

    <p><em>Since AntUnit 1.3</em></p>

    <p>Asserts that a resource given by its id exists.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">refid</td>
          <td valign="top">Reference to a resource defined inside the project.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Didn't expect
            resource '<em>refid</em>' to exist".</td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail if the resource ${ant.home}/lib/ant.jar
      exists:</p>

    <pre>
      &lt;file file="${ant.home}/lib/ant.jar" id="ant.jar"/&gt;
      &lt;assertRefResourceDoesntExist refid="ant.jar"/&gt;
    </pre>

    <h3>Ant 1.7.x Note</h3>

    <p><code>assertRefResourceDoesntExist</code> relies on Ant 1.8.0 or later,
      it doesn't work with Ant 1.7.x.</p>

    <h2><a name="assertNestedResourceDoesntExist">assertNestedResourceDoesntExist</a></h2>

    <p><em>Since AntUnit 1.3</em></p>

    <p>Asserts that a resource given as nested element exists.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Didn't expect
            resource to exist".</td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail if the resource ${ant.home}/lib/ant.jar
      exists:</p>

    <pre>
      &lt;assertNestedResourceDoesntExist&gt;
        &lt;file file="${ant.home}/lib/ant.jar"/&gt;
      &lt;/assertNestedResourceDoesntExist&gt;
    </pre>

    <h3>Ant 1.7.x Note</h3>

    <p><code>assertNestedResourceDoesntExist</code> relies on Ant 1.8.0 or later,
      it doesn't work with Ant 1.7.x.</p>

    <h2><a name="assertDestIsUptodate">assertDestIsUptodate</a></h2>

    <p>Asserts that a dest file is more recent than the source
      file.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">src</td>
          <td valign="top">source file.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">dest</td>
          <td valign="top">dest file.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Expected '<em>dest</em>'
            to be more recent than '<em>src</em>'".</td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail if the file ${ant.home}/lib/ant.jar is
      more recent than the current build file:</p>

    <pre>
      &lt;assertDestIsUptodate dest="${ant.file}" src="${ant.home}/lib/ant.jar"/&gt;
    </pre>

    <h2><a name="assertDestIsOutofdate">assertDestIsOutofdate</a></h2>

    <p>Asserts that a source file is more recent than the dest
      file.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">src</td>
          <td valign="top">source file.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">dest</td>
          <td valign="top">dest file.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Expected '<em>src</em>'
            to be more recent than '<em>dest</em>'".</td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail if the file ${ant.home}/lib/ant.jar is
      older than the current build file:</p>

    <pre>
      &lt;assertDestIsOutofdate dest="${ant.file}" src="${ant.home}/lib/ant.jar"/&gt;
    </pre>

    <h2><a name="assertFilesMatch">assertFilesMatch</a></h2>

    <p>Asserts that two files have the same content.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">expected</td>
          <td valign="top">first file.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">actual</td>
          <td valign="top">second file.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Expected files '<em>expected</em>'
            and '<em>actual</em>' to match".</td>
          <td align="center">No.</td>
        </tr>
    </table>
    
    <h3>Example</h3>

    <p>Make the build fail if the file build.xml and backups/build.xml
    differ.</p>

    <pre>
      &lt;assertFilesMatch expected="backups/build.xml" actual="build.xml"/&gt;
    </pre>

    <h2><a name="assertFilesDiffer">assertFilesDiffer</a></h2>

    <p>Asserts that two files have different content.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">expected</td>
          <td valign="top">first file.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">actual</td>
          <td valign="top">second file.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Expected files '<em>expected</em>'
            and '<em>actual</em>' to differ".</td>
          <td align="center">No.</td>
        </tr>
    </table>
    
    <h3>Example</h3>

    <p>Make the build fail if the file build.xml and backups/build.xml
    match.</p>

    <pre>
      &lt;assertFilesDiffer expected="backups/build.xml" actual="build.xml"/&gt;
    </pre>

    <h2><a name="assertReferenceSet">assertReferenceSet</a></h2>

    <p>Asserts that a reference has a value.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">refid</td>
          <td valign="top">Id of the reference.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Expected
            reference '<em>id</em>'".</td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail with the message "Expected reference 'foo'"
    if the reference foo is not defined:</p>

    <pre>
      &lt;assertReferenceSet name="foo"/&gt;
    </pre>

    <h2><a name="assertReferenceIsType">assertReferenceIsType</a></h2>

    <p>Asserts that a reference has a value of a given type.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">refid</td>
          <td valign="top">Id of the reference.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">type</td>
          <td valign="top">Name of the data type or task this
          reference is expected to be.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">message</td>
          <td valign="top">Message for the exception if the condition
            doesn't hold true.  Defaults to "Expected
            reference '<em>id</em>' to be a '<em>type</em>'".</td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail if the reference <em>classpath</em> has not
    been set or doesn't point to a &lt;path&gt;.</p>

    <pre>
      &lt;assertReferenceIsType refid="classpath" type="path"/>
    </pre>

    <h2><a name="assertMatches">assertMatches</a></h2>

    <p>Asserts that a string matches a given regular expression.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">string</td>
          <td valign="top">The string to test.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">pattern</td>
          <td valign="top">The pattern to test the string against.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">casesensitive</td>
          <td valign="top">
            Perform a case sensitive match.
            Default is true.
          </td>
          <td align="center">No.</td>
        </tr>
        <tr>
          <td valign="top">multiline</td>
          <td valign="top">
          Perform a multi line match.
          Default is false.
          </td>
          <td align="center">No.</td>
        </tr>
        <tr>
          <td valign="top">singleline</td>
          <td valign="top">
            This allows '.' to match new lines.
            SingleLine is not to be confused with multiline,
            SingleLine is a perl
            regex term, it corresponds to dotall in java regex.
            Default is false.
          </td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail if the property abc does not contain
      "abc" regardless of case:
    </p>
    <pre>
      &lt;assertMatches string="${abc}" pattern="abc" 
                     casesensitive="false"/></pre>


    <h2><a name="assertDoesntMatch">assertDoesntMatch</a></h2>

    <p>Asserts that a string doesn't match a given regular expression.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">string</td>
          <td valign="top">The string to test.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">pattern</td>
          <td valign="top">The pattern to test the string against.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">casesensitive</td>
          <td valign="top">
            Perform a case sensitive match.
            Default is true.
          </td>
          <td align="center">No.</td>
        </tr>
        <tr>
          <td valign="top">multiline</td>
          <td valign="top">
          Perform a multi line match.
          Default is false.
          </td>
          <td align="center">No.</td>
        </tr>
        <tr>
          <td valign="top">singleline</td>
          <td valign="top">
            This allows '.' to match new lines.
            SingleLine is not to be confused with multiline,
            SingleLine is a perl
            regex term, it corresponds to dotall in java regex.
            Default is false.
          </td>
          <td align="center">No.</td>
        </tr>
    </table>

    <h3>Examples</h3>

    <p>Make the build fail if the property abc contains
      "abc" regardless of case:
    </p>
    <pre>
      &lt;assertDoesntMatch string="${abc}" pattern="abc" 
                     casesensitive="false"/></pre>

    <h2><a name="assertLogContains">assertLogContains</a></h2>

    <p>Asserts that the build log contains a given message.</p>

    <p>Only works in the context of an &lt;antunit&gt; task.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">text</td>
          <td valign="top">The text to search for.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">level</td>
          <td valign="top">The level the message should have been
          logged at - the task will also look into more severe
          levels.  One of "error", "warning", "info", "verbose", "debug".</td>
          <td valign="top" align="center">No</td>
        </tr>
        <tr>
          <td valign="top">mergeLines</td>
          <td valign="top">Whether to merge messages into a single
            line or split them into multiple lines.  <em>since AntUnit
            1.3</em></td>
          <td valign="top" align="center">No, defaults
            to <code>true</code></td>
        </tr>
    </table>

    <h2><a name="assertLogDoesntContain">assertLogDoesntContain</a></h2>

    <p>Asserts that the build log doesn't contain a given message.</p>

    <p>Only works in the context of an &lt;antunit&gt; task.</p>

    <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">text</td>
          <td valign="top">The text to search for.</td>
          <td valign="top" align="center">Yes</td>
        </tr>
        <tr>
          <td valign="top">level</td>
          <td valign="top">The level the message should have been
          logged at - the task will also look into more severe
          levels.  One of "error", "warning", "info", "verbose", "debug".</td>
          <td valign="top" align="center">No</td>
        </tr>
        <tr>
          <td valign="top">mergeLines</td>
          <td valign="top">Whether to merge messages into a single
            line or split them into multiple lines.  <em>since AntUnit
            1.3</em></td>
          <td valign="top" align="center">No, defaults
            to <code>true</code></td>
        </tr>
    </table>

    <h2><a name="assertResourceContains">assertResourceContains</a></h2>

    <p>Asserts that a resource's content includes a given string.
      This task anly really works for filesystem resources.
      Use <code>assertRefResourceContains</code> when using non-file
      resources.</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">resource</td>
        <td valign="top">Location of the resource to load.</td>
        <td valign="top" align="center">Yes</td>
      </tr>
      <tr>
        <td valign="top">value</td>
        <td valign="top">The text to search for.</td>
        <td valign="top" align="center">Yes</td>
      </tr>
        <tr>
          <td valign="top">casesensitive</td>
          <td valign="top">
            Perform a case sensitive match.
            Default is true.
          </td>
          <td align="center">No.</td>
        </tr>
      <tr>
        <td valign="top">message</td>
        <td valign="top">Message for the exception if the condition
          doesn't hold true.  Defaults to "Expected resource
          '<em>resource</em>' to contain value '<em>value</em>' but
          was '<em>content of resource</em>'".</td>
        <td align="center">No.</td>
      </tr>
    </table>

    <h2><a name="assertRefResourceContains">assertRefResourceContains</a></h2>

    <p><em>Since AntUnit 1.3</em></p>

    <p>Asserts that a resource's content includes a given string.</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">refid</td>
        <td valign="top">Reference to a resource defined inside the project.</td>
        <td valign="top" align="center">Yes</td>
      </tr>
      <tr>
        <td valign="top">value</td>
        <td valign="top">The text to search for.</td>
        <td valign="top" align="center">Yes</td>
      </tr>
        <tr>
          <td valign="top">casesensitive</td>
          <td valign="top">
            Perform a case sensitive match.
            Default is true.
          </td>
          <td align="center">No.</td>
        </tr>
      <tr>
        <td valign="top">message</td>
        <td valign="top">Message for the exception if the condition
          doesn't hold true.  Defaults to "Expected resource
          '<em>refeid</em>' to contain value '<em>value</em>'."</td>
        <td align="center">No.</td>
      </tr>
    </table>

    <h2><a name="assertResourceDoesntContain">assertResourceDoesntContain</a></h2>

    <p>Asserts that a resource's content doesn't include a given string.
      This task anly really works for filesystem resources.
      Use <code>assertRefResourceDoesntContain</code> when using non-file
      resources.</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">resource</td>
        <td valign="top">Location of the resource to load.</td>
        <td valign="top" align="center">Yes</td>
      </tr>
      <tr>
        <td valign="top">value</td>
        <td valign="top">The text to search for.</td>
        <td valign="top" align="center">Yes</td>
      </tr>
        <tr>
          <td valign="top">casesensitive</td>
          <td valign="top">
            Perform a case sensitive match.
            Default is true.
          </td>
          <td align="center">No.</td>
        </tr>
      <tr>
        <td valign="top">message</td>
        <td valign="top">Message for the exception if the condition
          doesn't hold true.  Defaults to "Didn't expect resource
          '<em>resource</em>' to contain value '<em>value</em>' but
          was '<em>content of resource</em>'".</td>
        <td align="center">No.</td>
      </tr>
    </table>

    <h2><a name="assertRefResourceDoesntContain">assertRefResourceDoesntContain</a></h2>

    <p><em>Since AntUnit 1.3</em></p>

    <p>Asserts that a resource's content doesn't include a given string.</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">refid</td>
        <td valign="top">Reference to a resource defined inside the project.</td>
        <td valign="top" align="center">Yes</td>
      </tr>
      <tr>
        <td valign="top">value</td>
        <td valign="top">The text to search for.</td>
        <td valign="top" align="center">Yes</td>
      </tr>
        <tr>
          <td valign="top">casesensitive</td>
          <td valign="top">
            Perform a case sensitive match.
            Default is true.
          </td>
          <td align="center">No.</td>
        </tr>
      <tr>
        <td valign="top">message</td>
        <td valign="top">Message for the exception if the condition
          doesn't hold true.  Defaults to "Didn't expect resource
          '<em>refid</em>' to contain value '<em>value</em>'".</td>
        <td align="center">No.</td>
      </tr>
    </table>

    <hr/>
  </body>
</html>
