blob: c8ec3c89c686e1a39495ca3cc78ba7168f1edd2e [file] [log] [blame]
# 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
}