<?xml version="1.0"?>
<!--
  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.
-->
<project xmlns:au="antlib:org.apache.ant.antunit" default="antunit">

  <import file="../antunit-base.xml"/>

  <target name="setUp">
    <mkdir dir="${input}/org/example"/>
    <mkdir dir="${output}"/>
    <echo file="${input}/org/example/CreateBoolean.java"><![CDATA[
package org.example;

import org.apache.tools.ant.ProjectComponent;

public class CreateBoolean extends ProjectComponent {
    public void execute() {
        getProject().addReference("true", Boolean.TRUE);
        getProject().addReference("false", Boolean.FALSE);
    }
}]]></echo>
    <javac srcdir="${input}" destdir="${output}"/>
    <taskdef name="cb" classname="org.example.CreateBoolean"
             classpath="${output}"/>
    <cb/>
  </target>

  <target name="testReferencesNotSet" depends="setUp">
    <ant antfile="target-test-helper.xml" target="all"
         inheritrefs="false"/>
    <au:assertLogContains text="unless-true called"/>
    <au:assertLogContains text="unless-false called"/>
    <au:assertLogDoesntContain text="if-true called"/>
    <au:assertLogDoesntContain text="if-false called"/>
    <au:assertLogContains text="unless-string-true called"/>
    <au:assertLogContains text="unless-string-false called"/>
    <au:assertLogDoesntContain text="if-string-true called"/>
    <au:assertLogDoesntContain text="if-string-false called"/>
  </target>

  <target name="testReferencesSet" depends="setUp">
    <ant antfile="target-test-helper.xml" target="all"
         inheritrefs="true"/>
    <au:assertLogDoesntContain text="unless-true called"/>
    <au:assertLogContains text="unless-false called"/>
    <au:assertLogContains text="if-true called"/>
    <au:assertLogDoesntContain text="if-false called"/>
    <au:assertLogContains text="unless-string-true called"/>
    <au:assertLogContains text="unless-string-false called"/>
    <au:assertLogDoesntContain text="if-string-true called"/>
    <au:assertLogDoesntContain text="if-string-false called"/>
  </target>

  <target name="testProperttiesSet">
    <ant antfile="target-test-helper.xml" target="all">
      <property name="true" value="true"/>
      <property name="false" value="false"/>
    </ant>
    <au:assertLogDoesntContain text="unless-string-true called"/>
    <au:assertLogContains text="unless-string-false called"/>
    <au:assertLogContains text="if-string-true called"/>
    <au:assertLogDoesntContain text="if-string-false called"/>
    <au:assertLogContains text="unless-true called"/>
    <au:assertLogContains text="unless-false called"/>
    <au:assertLogDoesntContain text="if-true called"/>
    <au:assertLogDoesntContain text="if-false called"/>
  </target>
</project>
