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

   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.
  -->
<project default="antunit" xmlns:au="antlib:org.apache.ant.antunit">
  <import file="../antunit-base.xml" />

  <target name="setUp">
    <mkdir dir="${output}"/>
  </target>

  <target name="testUniqFilter" depends="setUp">
    <copy file="input/uniq.txt"
          tofile="${output}/uniq.txt">
      <filterchain>
        <uniqfilter/>
      </filterchain>
    </copy>
    <au:assertFilesMatch
       expected="expected/uniq.txt"
       actual="${output}/uniq.txt"/>
  </target>

  <target name="testUniqTokenFilter" depends="setUp">
    <copy file="input/uniq.txt"
          tofile="${output}/uniq.txt">
      <filterchain>
        <tokenfilter>
          <uniqfilter/>
        </tokenfilter>
      </filterchain>
    </copy>
    <au:assertFilesMatch
       expected="expected/uniq.txt"
       actual="${output}/uniq.txt"/>
  </target>

  <target name="testSortUniq" depends="setUp">
    <copy file="input/uniq.txt"
          tofile="${output}/uniq.txt">
      <filterchain>
        <sortfilter/>
        <tokenfilter>
          <uniqfilter/>
        </tokenfilter>
      </filterchain>
    </copy>
    <au:assertFilesMatch
       expected="expected/sortuniq.txt"
       actual="${output}/uniq.txt"/>
  </target>

  <target name="testUniqueColumns" depends="setUp">
    <copy file="input/unique-columns.txt"
          tofile="${output}/unique-columns.txt">
      <filterchain>
        <tokenfilter>
          <stringtokenizer/>
          <uniqfilter/>
        </tokenfilter>
      </filterchain>
    </copy>
    <au:assertFilesMatch
       expected="expected/unique-columns.txt"
       actual="${output}/unique-columns.txt"/>
  </target>

</project>
