# This defines a shell function called run_emma_calp() that rebuilds # the Calendar provider with EMMA coverage, executes the Calendar CTS # tests, and generates results into ~/emmaReport/. The previous emmaReport # directory, if any, will be removed. # # This expects that ". build/envsetup.sh" and an appropriate "lunch" # command have already been issued. # # Also, since we're doing this "the hard way", it's necessary to have # /system/framework/emma.jar in BOOTCLASSPATH. Basic steps: # - edit system/core/rootdir/init.rc # - insert "/system/framework/emma.jar" right before framework.jar # - mmm -j8 external/emma # - make -j8 # - adb reboot-bootloader # - fastboot flashall # # This also defines a no_emma_calp() function that rebuilds the provider # without emma. # # NOTE: interrupting execution may leave you in a different directory function run_emma_calp() { # rebuild provider with emma coverage _build_install_calp true if [ $? -ne 0 ]; then echo Build failed. return 1 fi # run the CTS tests; note we can't get success/failure result in $? adb shell am instrument -w -e coverage true \ -e class android.provider.cts.CalendarTest \ -w 'com.android.cts.provider/android.provider.cts.CalendarTest\$CalendarEmmaTestRunner' # this path is hard-coded into the CalendarEmmaTestRunner output=/sdcard/calendar-provider.ec # extract and generate the report rm -rf ~/emmaReport mkdir ~/emmaReport pushd ~/emmaReport adb pull $output coverage.ec adb shell rm $output java -cp ${ANDROID_BUILD_TOP}/external/emma/lib/emma.jar \ emma report -r html -in coverage.ec \ -sp ${ANDROID_BUILD_TOP}/packages/providers/CalendarProvider/src \ -in ${ANDROID_BUILD_TOP}/out/target/common/obj/APPS/CalendarProvider_intermediates/coverage.em popd echo "Report is in $HOME/emmaReport" return 0 } function no_emma_calp() { # rebuild provider without emma coverage _build_install_calp false } function _build_install_calp() { emma=$1 # switch to root on userdebug builds - this may take a second to finish adb root pushd $ANDROID_BUILD_TOP # force rebuild rm -rf out/target/common/obj/APPS/CalendarProvider_intermediates ##rm -rf out/target/common/obj/APPS/CalendarProviderTests_intermediates rm -rf out/target/common/obj/APPS/CtsProviderTestCases_intermediates EMMA_INSTRUMENT=$emma mmm -j4 packages/providers/CalendarProvider \ && EMMA_INSTRUMENT=$emma mmm -j4 cts/tests/tests/provider if [ $? -ne 0 ]; then popd return 1 fi # copy the instrumented APKs to the device adb remount adb push ${ANDROID_PRODUCT_OUT}/system/app/CalendarProvider.apk /system/app/ ##adb push ${ANDROID_PRODUCT_OUT}/data/app/CalendarProviderTests.apk /data/app/ adb push ${ANDROID_PRODUCT_OUT}/data/app/CtsProviderTestCases.apk /data/app/ popd # give the device a couple of seconds to install the packages sleep 2 }