1# This defines a shell function called run_emma_calp() that rebuilds 2# the Calendar provider with EMMA coverage, executes the Calendar CTS 3# tests, and generates results into ~/emmaReport/. The previous emmaReport 4# directory, if any, will be removed. 5# 6# This expects that ". build/envsetup.sh" and an appropriate "lunch" 7# command have already been issued. 8# 9# Also, since we're doing this "the hard way", it's necessary to have 10# /system/framework/emma.jar in BOOTCLASSPATH. Basic steps: 11# - edit system/core/rootdir/init.rc 12# - insert "/system/framework/emma.jar" right before framework.jar 13# - mmm -j8 external/emma 14# - make -j8 15# - adb reboot-bootloader 16# - fastboot flashall 17# 18# This also defines a no_emma_calp() function that rebuilds the provider 19# without emma. 20# 21# NOTE: interrupting execution may leave you in a different directory 22 23function run_emma_calp() 24{ 25 # rebuild provider with emma coverage 26 _build_install_calp true 27 if [ $? -ne 0 ]; then 28 echo Build failed. 29 return 1 30 fi 31 32 # run the CTS tests; note we can't get success/failure result in $? 33 adb shell am instrument -w -e coverage true \ 34 -e class android.provider.cts.CalendarTest \ 35 -w 'com.android.cts.provider/android.provider.cts.CalendarTest\$CalendarEmmaTestRunner' 36 37 # this path is hard-coded into the CalendarEmmaTestRunner 38 output=/sdcard/calendar-provider.ec 39 40 # extract and generate the report 41 rm -rf ~/emmaReport 42 mkdir ~/emmaReport 43 pushd ~/emmaReport 44 adb pull $output coverage.ec 45 adb shell rm $output 46 java -cp ${ANDROID_BUILD_TOP}/external/emma/lib/emma.jar \ 47 emma report -r html -in coverage.ec \ 48 -sp ${ANDROID_BUILD_TOP}/packages/providers/CalendarProvider/src \ 49 -in ${ANDROID_BUILD_TOP}/out/target/common/obj/APPS/CalendarProvider_intermediates/coverage.em 50 popd 51 52 echo "Report is in $HOME/emmaReport" 53 54 return 0 55} 56 57function no_emma_calp() 58{ 59 # rebuild provider without emma coverage 60 _build_install_calp false 61} 62 63function _build_install_calp() 64{ 65 emma=$1 66 67 # switch to root on userdebug builds - this may take a second to finish 68 adb root 69 70 pushd $ANDROID_BUILD_TOP 71 72 # force rebuild 73 rm -rf out/target/common/obj/APPS/CalendarProvider_intermediates 74 ##rm -rf out/target/common/obj/APPS/CalendarProviderTests_intermediates 75 rm -rf out/target/common/obj/APPS/CtsProviderTestCases_intermediates 76 EMMA_INSTRUMENT=$emma mmm -j4 packages/providers/CalendarProvider \ 77 && EMMA_INSTRUMENT=$emma mmm -j4 cts/tests/tests/provider 78 if [ $? -ne 0 ]; then 79 popd 80 return 1 81 fi 82 83 # copy the instrumented APKs to the device 84 adb remount 85 adb push ${ANDROID_PRODUCT_OUT}/system/app/CalendarProvider.apk /system/app/ 86 ##adb push ${ANDROID_PRODUCT_OUT}/data/app/CalendarProviderTests.apk /data/app/ 87 adb push ${ANDROID_PRODUCT_OUT}/data/app/CtsProviderTestCases.apk /data/app/ 88 popd 89 90 # give the device a couple of seconds to install the packages 91 sleep 2 92} 93 94