<?xml version="1.0"?>
<project name="fixcrlf" default="cleanup" basedir=".">
  <target name="init">
    <mkdir dir="result" />
  </target>

  <target name="cleanup">
    <delete dir="result" />
  </target>

  <macrodef name="assertequal">
    <attribute name="junk" default="" />
    <attribute name="name" default="Junk@{junk}.java" />
    <attribute name="file1" default="result/@{name}" />
    <attribute name="file2" default="expected/@{name}" />
    <sequential>
      <fail message="@{file1} and @{file2} are different">
        <condition>
          <not>
            <filesmatch file1="@{file1}" file2="@{file2}" />
          </not>
        </condition>
      </fail>
    </sequential>
  </macrodef>

  <target name="test1" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="Junk1.java"
             javafiles="true" tab="add" eol="crlf" eof="asis" />
    <assertequal junk="1" />
  </target>

  <target name="test2" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="Junk2.java"
             javafiles="true" tab="add" cr="add" eol="crlf" eof="asis" />
    <assertequal junk="2" />
  </target>

  <target name="test3" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="Junk3.java"
             javafiles="true" tab="remove" eol="lf" eof="asis" />
    <assertequal junk="3" />
  </target>

  <target name="test4" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="Junk4.java"
             javafiles="true" tab="remove" eol="lf" eof="asis" />
    <assertequal junk="4" />
  </target>

  <target name="test5" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="Junk5.java"
             tab="remove" eol="lf" eof="asis" />
    <assertequal junk="5" />
  </target>

  <target name="test6" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="Junk6.java"
             tab="add" cr="remove" eol="crlf" eof="asis" />
    <assertequal junk="6" />
  </target>

  <target name="test7" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="Junk7.java"
             tab="add" cr="add" eof="asis" />
    <assertequal junk="7" />
  </target>

  <target name="test8" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="Junk8.java"
             javafiles="true" tab="add" cr="add" eof="add" />
    <assertequal junk="8" />
  </target>

  <target name="test9" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="Junk9.java"
             javafiles="true" tab="remove" cr="remove" eof="remove" />
    <assertequal junk="9" />
  </target>

  <target name="testMacLines" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="Mac2Unix" eol="lf" />
    <assertequal name="Mac2Unix" />
  </target>

  <target name="testNoOverwrite" depends="test1">
    <touch file="result/Junk1.java" millis="0" />
    <fixcrlf srcdir="input" destdir="result"
             includes="Junk1.java" preservelastmodified="false"
             javafiles="true" tab="add" eol="crlf" eof="asis" />
    <fail message="overwrote unchanged output file">Q
      <condition>
        <not>
          <isfileselected file="result/Junk1.java">
            <date when="equal" millis="0" />
          </isfileselected>
        </not>
      </condition>
    </fail>
  </target>

  <target name="testEncoding" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="input.crlf.utf16"
             javafiles="false" cr="remove" encoding="UnicodeBig" />
    <assertequal file1="result/input.crlf.utf16"
                 file2="expected/input.lf.utf16" />
  </target>

  <target name="testLongLines" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="longlines.crlf"
             javafiles="false" cr="remove" />
    <assertequal file1="result/longlines.crlf"
                 file2="expected/longlines.lf" />
  </target>

  <target name="testCrCrLfSequence-unix" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="crcrlf" eol="lf" />
    <assertequal file1="result/crcrlf"
                 file2="expected/crcrlf.unix" />
  </target>

  <target name="testCrCrLfSequence-dos" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="crcrlf" eol="crlf" />
    <assertequal file1="result/crcrlf"
                 file2="expected/crcrlf.dos" />
  </target>

  <target name="testCrCrLfSequence-mac" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="crcrlf" eol="cr" />
    <assertequal file1="result/crcrlf"
                 file2="expected/crcrlf.mac" />
  </target>

  <target name="testFixlastDos" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="fixlastfalse.lf" eol="crlf" />
    <assertequal file1="result/fixlastfalse.lf"
                 file2="expected/fixlast.dos" />
  </target>

  <target name="testFixlastFalseMac" depends="init">
    <fixcrlf srcdir="input" destdir="result"
             includes="fixlastfalse.lf" eol="cr" fixlast="false" />
    <assertequal file1="result/fixlastfalse.lf"
                 file2="expected/fixlastfalse.mac" />
  </target>

  <!-- Bugzilla Report 20840 -->
  <target name="createParentDirs" depends="init">
    <fixcrlf srcdir="." destdir="result" includes="input/Junk1.java" />
  </target>

  <target name="testFixFile" depends="init">
    <fixcrlf file="input/longlines.crlf" destdir="result" />
    <fail message="didn't create output file">
      <condition>
        <not>
          <available file="result/longlines.crlf" />
        </not>
      </condition>
    </fail>
  </target>

  <target name="testFixFileExclusive" depends="init">
    <fixcrlf file="input/longlines.crlf" srcdir="input" destdir="result"/>
  </target>

  <target name="testPreserveLastModified" depends="init">
    <fixcrlf file="input/longlines.crlf" destdir="result"
             preservelastmodified="true" />
    <fail>
      <condition>
        <not>
          <uptodate srcfile="result/longlines.crlf"
                    targetfile="input/longlines.crlf" />
        </not>
      </condition>
    </fail>

    <touch file="result/longlines.crlf" millis="0" />

    <fixcrlf file="result/longlines.crlf" destdir="result" eol="lf"
             preservelastmodified="true" />

    <fileset id="fs" file="result/longlines.crlf">
      <date when="equal" millis="0" />
    </fileset>
    <property name="fs" refid="fs" />
    <fail unless="fs" />
  </target>

  <target name="testFilter1" depends="init">
    <copy file="input/Junk1.java" todir="result" overwrite="true">
      <filterchain>
        <fixcrlf javafiles="true" tab="add"
                 eol="crlf" eof="asis" />
      </filterchain>
    </copy>
    <assertequal junk="1" />
  </target>

  <target name="testFilter2" depends="init">
    <copy file="input/Junk2.java" todir="result" overwrite="true">
      <filterchain>
        <fixcrlf javafiles="true" tab="add" cr="add" eol="crlf" eof="asis" />
      </filterchain>
    </copy>
    <assertequal junk="2" />
  </target>

  <target name="testFilter3" depends="init">
    <copy file="input/Junk3.java" todir="result" overwrite="true">
      <filterchain>
        <fixcrlf javafiles="true" tab="remove" eol="lf" eof="asis" />
      </filterchain>
    </copy>
    <assertequal junk="3" />
  </target>

  <target name="testFilter4" depends="init">
    <copy file="input/Junk4.java" todir="result" overwrite="true">
      <filterchain>
        <fixcrlf javafiles="true" tab="remove" eol="lf" eof="asis" />
      </filterchain>
    </copy>
    <assertequal junk="4" />
  </target>

  <target name="testFilter5" depends="init">
    <copy file="input/Junk5.java" todir="result" overwrite="true">
      <filterchain>
        <fixcrlf tab="remove" eol="lf" eof="asis" />
      </filterchain>
    </copy>
    <assertequal junk="5" />
  </target>

  <target name="testFilter6" depends="init">
    <copy file="input/Junk6.java" todir="result" overwrite="true">
      <filterchain>
        <fixcrlf tab="add" cr="remove" eol="crlf" eof="asis" />
      </filterchain>
    </copy>
    <assertequal junk="6" />
  </target>

  <target name="testFilter7" depends="init">
    <copy file="input/Junk7.java" todir="result" overwrite="true">
      <filterchain>
        <fixcrlf tab="add" cr="add" eof="asis" />
      </filterchain>
    </copy>
    <assertequal junk="7" />
  </target>

  <target name="testFilter8" depends="init">
    <copy file="input/Junk8.java" todir="result" overwrite="true">
      <filterchain>
        <fixcrlf javafiles="true" tab="add" cr="add" eof="add" />
      </filterchain>
    </copy>
    <assertequal junk="8" />
  </target>

  <target name="testFilter9" depends="init">
    <copy file="input/Junk9.java" todir="result" overwrite="true">
      <filterchain>
        <fixcrlf javafiles="true" tab="remove" cr="remove" eof="remove" />
      </filterchain>
    </copy>
    <assertequal junk="9" />
  </target>

  <target name="testCannotDoubleEof" depends="test8">
    <fixcrlf file="result/Junk8.java"
             javafiles="true" tab="add" cr="add" eof="add" />
    <assertequal junk="8" />
  </target>

  <target name="testTabInLiteralInComment">
    <copy file="input/tab_in_literal_in_comment" todir="result"
          overwrite="true">
      <filterchain>
        <fixcrlf javafiles="true" tab="remove" eol="lf" fixlast="false" />
      </filterchain>
    </copy>
    <assertequal name="tab_in_literal_in_comment" />
  </target>
</project>
