<!--
   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

       https://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>

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

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

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

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

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

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