<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright (C) 2009 The Android Open Source Project

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

<!--  Contains the schema definition for Android test definitions xml -->

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://schemas.android.com/testrunner/test_defs/1.0"
    xmlns="http://schemas.android.com/testrunner/test_defs/1.0"
    elementFormDefault="qualified">

    <xs:element name="test-definitions">
        <xs:complexType>
            <xs:sequence>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="test" type="javaTestType" />
                    <xs:element name="test-native" type="nativeTestType" />
                    <xs:element name="test-host" type="hostTestType" />
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- Generic, abstract test definition. Contains attributes common to all
    test types. -->
    <xs:complexType name="testType">

        <!-- Self-descriptive name used to uniquely identify the test. -->
        <xs:attribute name="name" type="xs:string" use="required" />

        <!-- File system path, relative to Android build root, to this
        package's Android.mk file.-->
        <xs:attribute name="build_path" type="xs:string" use="required" />

        <!-- Include test in continuous test system. -->
        <xs:attribute name="continuous" type="xs:boolean" use="optional"
            default="false" />

        <!-- Include test as part of named suite. -->
        <xs:attribute name="suite" type="xs:string" use="optional" />

        <!--  Short description (typically less than 60 characters) about this
        test. -->
        <xs:attribute name="description" type="xs:string" use="optional" />

        <!-- Specifies that a full 'make', as opposed to 'mmm' command, is
        needed to build this test. The build command used will be
        'make extra_build_args' -->
        <xs:attribute name="full_make" type="xs:boolean"
                    use="optional" />

        <!--  Extra arguments to append to build command when building this
        test. -->
        <xs:attribute name="extra_build_args" type="xs:string"
                    use="optional" />

    </xs:complexType>

    <!-- Java on device instrumentation test.

      The test attributes map to the following commands:
      (if class is defined)
          adb shell am instrument -w <package>/<runner>
      (else)
          adb shell am instrument -w -e class <class> <package>/<runner>
    -->
    <xs:complexType name="javaTestType">
        <xs:complexContent>
            <xs:extension base="testType">

                <!--  Android application package that contains the tests. -->
                <xs:attribute name="package" type="xs:string" use="required" />

                <!-- Fully qualified Java test class to run. -->
                <xs:attribute name="class" type="xs:string" use="optional" />

                <!-- Fully qualified InstrumentationTestRunner to execute. -->
                <xs:attribute name="runner" type="xs:string" use="optional"
                    default="android.test.InstrumentationTestRunner" />

                <!-- Build name of Android package this test targets. These
                targets are defined in the coverage_targets.xml file.  Used as
                basis for code coverage metrics. If omitted, code coverage will
                not be supported for this test. -->
                <xs:attribute name="coverage_target" type="xs:string"
                    use="optional" />

            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <!-- Native (C/C++) on device tests.

    The native test attributes map to the following commands:
        make <build_path>/Android.mk <extra_build_args>
        adb sync
        for test_prog in <tests built>; do
            adb shell "/system/bin/${test_prog} >/dev/null 2>&1;echo \$?"
            adb shell "rm /system/bin/${test_prog}"
        done
    -->
    <xs:complexType name="nativeTestType">
        <xs:complexContent>
            <xs:extension base="testType" />
            <!-- no additional attributes -->
        </xs:complexContent>
    </xs:complexType>

    <!-- Host java tests.

    Uses hosttestlib to execute tests on host. Maps to following command:
        java -cp <libs>:jar_name com.android.hosttest.DeviceTestRunner \
            <class> -s <device serial> -p <app build path>
    -->
    <xs:complexType name="hostTestType">
        <xs:complexContent>
            <xs:extension base="testType">

                <!--  The test class to run. Must extend DeviceTestSuite, and
                implement a public static suite() method that returns a Test to
                run. -->
                <xs:attribute name="class" type="xs:string" use="required" />

                <!-- built jar name of host library that includes the tests. -->
                <xs:attribute name="jar_name" type="xs:string" use="required" />
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>
