1_lite_test_general() {
2  usage="
3  Usage: $0 [-c CLASSNAME] [-d] [-a | -i] [-e], where
4
5  -c CLASSNAME          Run tests only for the specified class/method. CLASSNAME
6                          should be of the form SomeClassTest or SomeClassTest#testMethod.
7  -d                    Waits for a debugger to attach before starting to run tests.
8  -i                    Rebuild and reinstall the test apk before running tests (mmm).
9  -a                    Rebuild all dependencies and reinstall the test apk before/
10                          running tests (mmma).
11  -e                    Run code coverage. Coverage will be output into the coverage/
12                          directory in the repo root.
13  -g                    Run build commands with USE_GOMA=true
14  -h                    This help message.
15  "
16
17  local OPTIND=1
18  local class=
19  local project=
20  local install=false
21  local installwdep=false
22  local debug=false
23  local coverage=false
24  local goma=false
25
26  while getopts "c:p:hadieg" opt; do
27    case "$opt" in
28      h)
29        echo "$usage"
30        return 0;;
31      \?)
32        echo "$usage"
33        return 0;;
34      c)
35        class=$OPTARG;;
36      d)
37        debug=true;;
38      i)
39        install=true;;
40      a)
41        install=true
42        installwdep=true;;
43      e)
44        coverage=true;;
45      g)
46        goma=true;;
47      p)
48        project=$OPTARG;;
49    esac
50  done
51
52  local build_dir=
53  local apk_loc=
54  local package_prefix=
55  local instrumentation=
56  case "$project" in
57    "telecom")
58      build_dir="packages/services/Telecomm/tests"
59      apk_loc="data/app/TelecomUnitTests/TelecomUnitTests.apk"
60      package_prefix="com.android.server.telecom.tests"
61      instrumentation="android.test.InstrumentationTestRunner";;
62    "telephony")
63      build_dir="frameworks/opt/telephony/tests/"
64      apk_loc="data/app/FrameworksTelephonyTests/FrameworksTelephonyTests.apk"
65      package_prefix="com.android.frameworks.telephonytests"
66      instrumentation="android.support.test.runner.AndroidJUnitRunner";;
67  esac
68
69  local T=$(gettop)
70
71  if [ $install = true ] ; then
72    local olddir=$(pwd)
73    local emma_opt=
74    local goma_opt=
75
76    cd $T
77    # Build and exit script early if build fails
78
79    if [ $coverage = true ] ; then
80      emma_opt="EMMA_INSTRUMENT=true LOCAL_EMMA_INSTRUMENT=true EMMA_INSTRUMENT_STATIC=true"
81    else
82      emma_opt="EMMA_INSTRUMENT=false"
83    fi
84
85    if [ $goma = true ] ; then
86        goma_opt="USE_GOMA=true"
87    fi
88
89    if [ $installwdep = true ] ; then
90      (export ${emma_opt}; mmma ${goma_opt} -j40 "$build_dir")
91    else
92      (export ${emma_opt}; mmm ${goma_opt} "$build_dir")
93    fi
94    if [ $? -ne 0 ] ; then
95      echo "Make failed! try using -a instead of -i if building with coverage"
96      return
97    fi
98
99    # Strip off any possible aosp_ prefix from the target product
100    local canonical_product=$(sed 's/^aosp_//' <<< "$TARGET_PRODUCT")
101
102    adb install -r -t "out/target/product/$canonical_product/$apk_loc"
103    if [ $? -ne 0 ] ; then
104      cd "$olddir"
105      return $?
106    fi
107    cd "$olddir"
108  fi
109
110  local e_options=""
111  if [ -n "$class" ] ; then
112    if [[ "$class" =~ "\." ]] ; then
113      e_options="${e_options} -e class ${class}"
114    else
115      e_options="${e_options} -e class ${package_prefix}.${class}"
116    fi
117  fi
118  if [ $debug = true ] ; then
119    e_options="${e_options} -e debug 'true'"
120  fi
121  if [ $coverage = true ] && [ $project =~ "telecom" ] ; then
122    e_options="${e_options} -e coverage 'true'"
123  fi
124  adb shell am instrument ${e_options} -w "$package_prefix/$instrumentation"
125
126  # Code coverage only enabled for Telecom.
127  if [ $coverage = true ] && [ $project =~ "telecom" ] ; then
128    adb root
129    adb wait-for-device
130    adb pull /data/user/0/com.android.server.telecom.tests/files/coverage.ec /tmp/
131    if [ ! -d "$T/coverage" ] ; then
132      mkdir -p "$T/coverage"
133    fi
134    java -jar "$T/prebuilts/sdk/tools/jack-jacoco-reporter.jar" \
135      --report-dir "$T/coverage/" \
136      --metadata-file "$T/out/target/common/obj/APPS/TelecomUnitTests_intermediates/coverage.em" \
137      --coverage-file "/tmp/coverage.ec" \
138      --source-dir "$T/packages/services/Telecomm/src/"
139  fi
140}
141
142lite_test_telecom() {
143  _lite_test_general -p telecom $@
144}
145
146lite_test_telephony() {
147  _lite_test_general -p telephony $@
148}
149