<?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="Browser" build_path="packages/apps/Browser"
        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="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="ApplicationsProvider"
        build_path="packages/providers/ApplicationsProvider" type="APPS" />
    <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>
