#!/bin/bash # # Copyright 2009 Google Inc. All Rights Reserved. # Author: weasel@google.com (Tim Baverstock) # # This program and the accompanying materials are made available under # the terms of the Common Public License v1.0 which accompanies this # distribution, and is available at http://www.eclipse.org/legal/cpl-v10.html # # This script tests the emma jar from the sources in this directory. # This script has to be run from its current directory ONLY. # Sample usages: # To just test emma.jar: # ./test.sh TESTDIR=/tmp/test-emma/$$ JAVADIR=$TESTDIR/android3/java SOURCEDIR=$JAVADIR/com/android/bunnies mkdir -p $SOURCEDIR cat <<END >$SOURCEDIR/Bunny.java package com.android.bunnies; import java.util.Random; public class Bunny { int randomNumber1 = (new Random()).nextInt(); int randomNumber2; { Random r = new Random(); randomNumber2 = r.nextInt(); } int addOne(int a) { int b = a + 1; return identity(a + 1) ? 1 : 0; } int dontAddOne(int a) { return a; } boolean identity(int a) { return a != a; } public static void main(String[] args) { Bunny thisThing = new Bunny(); SubBunny thatThing = new SubBunny(); System.out.println(thisThing.addOne(2)); System.out.println(thatThing.addOne(2)); } } END cat <<END >$SOURCEDIR/SubBunny.java package com.android.bunnies; import com.android.bunnies.Bunny; class SubBunny extends Bunny { int addOne(int a) { int b = a + 2; return identity(a) && identity(b) || identity(b) ? 1 : 0; } boolean identity(int a) { return a == a; } } END GOLDEN=$TESTDIR/golden.lcov cat <<END >$GOLDEN SF:com/android/bunnies/SubBunny.java FN:5,SubBunny::addOne (int): int FNDA:1,SubBunny::addOne (int): int FN:12,SubBunny::identity (int): boolean FNDA:1,SubBunny::identity (int): boolean FN:3,SubBunny::SubBunny (): void FNDA:1,SubBunny::SubBunny (): void DA:3,1 DA:5,1 DA:6,1 DA:12,1 end_of_record SF:com/android/bunnies/Bunny.java FN:23,Bunny::dontAddOne (int): int FNDA:0,Bunny::dontAddOne (int): int FN:27,Bunny::identity (int): boolean FNDA:1,Bunny::identity (int): boolean FN:16,Bunny::addOne (int): int FNDA:1,Bunny::addOne (int): int FN:5,Bunny::Bunny (): void FNDA:1,Bunny::Bunny (): void FN:31,Bunny::main (String []): void FNDA:1,Bunny::main (String []): void DA:5,1 DA:6,1 DA:11,1 DA:12,1 DA:13,1 DA:16,1 DA:17,1 DA:23,0 DA:27,1 DA:31,1 DA:32,1 DA:33,1 DA:34,1 DA:35,1 end_of_record END javac -g $(find $SOURCEDIR -name \*.java) COVERAGE=$TESTDIR/coverage.dat java -cp dist/emma.jar emmarun -r lcov -cp $JAVADIR \ -sp $JAVADIR -Dreport.lcov.out.file=$COVERAGE com.android.bunnies.Bunny # Don't really need to test these separately, but it's useful to me for now. if ! diff <(sort $GOLDEN) <(sort $COVERAGE) >$TESTDIR/diff-sorted; then echo Tests failed: Additional or missing lines: See $TESTDIR/diff-sorted exit fi if ! diff $GOLDEN $COVERAGE >$TESTDIR/diff-ordered; then echo Tests failed: same lines, different order: See $TESTDIR/diff-ordered exit fi rm -rf $TESTDIR echo Tests passed.