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

<!--Defines the list of test code coverage targets for core android platform 
    Intent is to list all modules that are present in a typical 'user' build
    
    TODO: auto-generate this file from build 

  Expected syntax in this file is 
  <coverage_targets>
    <coverage_target name type build_path
      [<src path=""/>] (0..*)  
    >/coverage_target>
    
   Where
     name - unique name of Android target
     type - one of JAVA_LIBRARIES,APPS 
     build_path - path to build directory for this module, relative to android
       source tree root
     src - optional sub-elements. Contains complete set of source code locations
       for target, relative to build_path. If not present, assumes valeu of "src"
      
       
-->

<coverage_targets>
   <!-- Java libs -->
    <coverage_target name="framework" type="JAVA_LIBRARIES" 
        build_path="frameworks/base">
        <src path="core/java" />
        <src path="graphics/java" />
        <src path="im/java" />
        <src path="location/java" />
        <src path="media/java" />
        <src path="opengl/java" />
        <src path="sax/java" />
        <src path="telephony/java" />
        <src path="wifi/java" />
    </coverage_target>
    <coverage_target name="android.test.runner"
        build_path="frameworks/base/test-runner" type="JAVA_LIBRARIES" />
   
   <!-- apps -->
    <coverage_target name="ApiDemos" build_path="development/samples/ApiDemos"
        type="APPS" />
    <coverage_target name="Calculator" build_path="packages/apps/Calculator"
        type="APPS" />
    <coverage_target name="Calendar" build_path="packages/apps/Calendar"
        type="APPS" />
    <coverage_target name="Camera" build_path="packages/apps/Camera"
        type="APPS" />
    <coverage_target name="Contacts" build_path="packages/apps/Contacts"
        type="APPS" />
    <coverage_target name="DeskClock" build_path="packages/apps/DeskClock"
        type="APPS" />
    <coverage_target name="Dialer" build_path="packages/apps/Dialer"
        type="APPS" />
    <coverage_target name="Email" build_path="packages/apps/Email"
        type="APPS" />
    <coverage_target name="Exchange" build_path="packages/apps/Exchange"
        type="APPS" />
    <coverage_target name="Settings" build_path="packages/apps/Settings"
        type="APPS" />
    <coverage_target name="Phone" build_path="packages/apps/Phone"
        type="APPS" />
    <coverage_target name="QuickSearchBox" build_path="packages/apps/QuickSearchBox"
        type="APPS" />
    <coverage_target name="Launcher2" build_path="packages/apps/Launcher2"
        type="APPS" />
    <coverage_target name="Mms" build_path="packages/apps/Mms" type="APPS" />
    <coverage_target name="Music" build_path="packages/apps/Music"
        type="APPS" />
    <coverage_target name="SystemUI" build_path="frameworks/base/packages/SystemUI"
        type="APPS" />
    <coverage_target name="VoiceDialer" build_path="packages/apps/VoiceDialer"
        type="APPS" />

   <!-- content providers -->
    <coverage_target name="CalendarProvider"
        build_path="packages/providers/CalendarProvider" type="APPS" />
    <coverage_target name="ContactsProvider"
        build_path="packages/providers/ContactsProvider" type="APPS" />
    <coverage_target name="DownloadProvider"
        build_path="packages/providers/DownloadProvider" type="APPS" />
    <coverage_target name="DrmProvider" build_path="packages/providers/drm"
        type="APPS" />
    <coverage_target name="MediaProvider"
        build_path="packages/providers/MediaProvider" type="APPS" />
    <coverage_target name="SettingsProvider"
        build_path="frameworks/base/packages/SettingsProvider" type="APPS" />
    <coverage_target name="TelephonyProvider"
        build_path="packages/providers/telephony" type="APPS" />

    <!-- input methods -->
    <coverage_target name="LatinIME" build_path="packages/inputmethods/LatinIME"
        type="APPS" />

</coverage_targets>
