<?xml version="1.0" encoding="UTF-8"?>
<!--
 Copyright 2010-2014, Google Inc.
 All rights reserved.

 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
 met:

     * Redistributions of source code must retain the above copyright
 notice, this list of conditions and the following disclaimer.
     * Redistributions in binary form must reproduce the above
 copyright notice, this list of conditions and the following disclaimer
 in the documentation and/or other materials provided with the
 distribution.
     * Neither the name of Google Inc. nor the names of its
 contributors may be used to endorse or promote products derived from
 this software without specific prior written permission.

 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<project>
  <target name="run-tests"
          description="Runs the test suite.">
    <!-- Name of the application package extracted from manifest file
         NOTE: Android SDK r14 doesn't extract manifest.package at "test"
         target, though it should take care of it.
         r15 has fixed this issue.
         TODO(matsuzakit): Remove below hack if possible.
    -->
    <xpath input="AndroidManifest.xml" expression="/manifest/@package"
           output="manifest.package"/>
    <if>
      <condition>
        <equals arg1="${build_type}" arg2="Release"/>
      </condition>
      <then>
        <!-- If we could have an obfuscation stage here, it would be a good
             testing. -->
      </then>
    </if>
    <antcall target="installt"/>
    <antcall target="test"/>
  </target>

  <target name="test" depends="-test-project-check"
              description="Runs tests from the package defined in test.package property">
    <property name="tested.project.absolute.dir" location="${tested.project.dir}" />
    <if condition="${mozc.stresstest}">
      <then>
        <property name="test.runner" value="org.mozc.android.inputmethod.japanese.stresstest.MozcStressTestRunner" />
      </then>
      <else>
        <property name="test.runner" value="org.mozc.android.inputmethod.japanese.testing.MozcTestRunner" />
      </else>
    </if>
    <!-- Application package of the tested project extracted from its manifest file -->
    <xpath input="${tested.project.absolute.dir}/AndroidManifest.xml"
           expression="/manifest/@package" output="tested.manifest.package" />
    <property name="emma.dump.file"
              value="/data/data/${tested.manifest.package}/coverage.ec" />
    <run-tests-helper />
  </target>
</project>
