#!/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.