changeset 313:71f338e881d2

Added targets to calcualte code coverage by tests
author Jiri Vanek <jvanek@redhat.com>
date Tue, 29 Nov 2011 17:13:03 +0100
parents 22db4e09bbc7
children df87375f72cd
files ChangeLog Makefile.am configure.ac tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java
diffstat 4 files changed, 316 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Nov 11 14:40:26 2011 +0100
+++ b/ChangeLog	Tue Nov 29 17:13:03 2011 +0100
@@ -1,3 +1,26 @@
+2011-11-28 Jiri Vanek <jvanek@redhat.com>
+
+	Added code-coverage generation targets
+	* configure.ac: added search for optional emma.jar
+	* makefile.am: added UNIT_CLASS_NAMES and REPRODUCERS_CLASS_NAMES variables
+	to store tests clases for reuse in emmarun. Both also moved to separate target
+	(run-netx-unit-tests): made dependent on reused stamped version
+	(run-netx-dist-tests): made dependent on reused stamped version
+	(stamps/run-netx-dist-tests): stamped rusable version of run-netx-dist-tests
+	(run-unit-test-code-coverage) targets to generate report from unit-tests. 
+	 Result binary and xml file and html report in tests.build/netx/unit
+	(run-reproducers-test-code-coverage) targets to generate report from
+	 reproducers-test. Result binary file, xml and html report in
+	 tests.build/netx/jnlp_testsengine
+	(run-test-code-coverage): merges binary results from unit and reproducers
+	(clean-unit-test-code-coverage) conditionaly removes html,xml report
+	 and es and ec files from tests.build/netx/unit
+	(clean-reproducers-test-code-coverage) condtionlay removes html and xml 
+	 report and es file from tests.build/netx/jnlp_testsengine
+	(clean-test-code-coverage) conditionlay removes merged html, xml es and em 
+	files from tests.build
+	(clean-netx-tests) now depends also on clean-test-code-coverage
+
 2011-11-11  Jiri Vanek  <jvanek@redhat.com>
 
 	Added reproducer for PR804 and PR8011
--- a/Makefile.am	Fri Nov 11 14:40:26 2011 +0100
+++ b/Makefile.am	Tue Nov 29 17:13:03 2011 +0100
@@ -25,6 +25,8 @@
 KEYSTORE_NAME=teststore.ks
 
 JUNIT_RUNNER_JAR=$(abs_top_builddir)/junit-runner.jar
+UNIT_CLASS_NAMES = $(abs_top_builddir)/unit_class_names
+REPRODUCERS_CLASS_NAMES = $(abs_top_builddir)/reproducers_class_names
 
 # Build directories
 
@@ -106,7 +108,7 @@
 endif
 
 if WITH_JUNIT
-  JUNIT_TESTS=run-netx-unit-tests
+  JUNIT_TESTS=stamps/run-netx-unit-tests.stamp
 else
   JUNIT_TESTS=
 endif
@@ -146,7 +148,7 @@
 
 .PHONY: clean-IcedTeaPlugin clean-add-netx clean-add-netx-debug clean-add-plugin clean-add-plugin-debug \
  clean-bootstrap-directory clean-native-ecj clean-desktop-files clean-netx-docs clean-docs clean-plugin-docs \
- clean-tests check-local clean-launchers check-pac-functions run-netx-unit-tests clean-netx-tests \
+ clean-tests check-local clean-launchers check-pac-functions stamps/run-netx-unit-tests.stamp clean-netx-tests \
  clean-junit-runner clean-netx-unit-tests
 
 install-exec-local:
@@ -539,8 +541,7 @@
 	mkdir -p stamps && \
 	touch $@
 
-run-netx-dist-tests: all-local stamps/netx.stamp stamps/junit-jnlp-dist-dirs stamps/netx-dist-tests-sign-some-reproducers.stamp \
- stamps/netx-dist-tests-compile.stamp stamps/netx-dist-tests-compile-testcases.stamp $(JUNIT_RUNNER_JAR) $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME)
+$(REPRODUCERS_CLASS_NAMES):
 	cd $(JNLP_TESTS_ENGINE_DIR) ; \
 	class_names= ; \
 	for test in `find -type f` ; do \
@@ -548,7 +549,15 @@
 	  class_name=`echo $$class_name | sed -e 's|/|.|g' ` ; \
 	  class_names="$$class_names $$class_name" ; \
 	done ; \
-	echo $$class_names ; \
+	echo $$class_names > $(REPRODUCERS_CLASS_NAMES)
+
+stamps/run-netx-dist-tests.stamp: stamps/netx-dist.stamp extra-lib/about.jar stamps/plugin.stamp launcher.build/$(javaws) \
+ javaws.desktop stamps/docs.stamp launcher.build/$(itweb_settings) itweb-settings.desktop \
+ stamps/netx.stamp stamps/junit-jnlp-dist-dirs stamps/netx-dist-tests-sign-some-reproducers.stamp \
+ stamps/netx-dist-tests-compile.stamp stamps/netx-dist-tests-compile-testcases.stamp $(JUNIT_RUNNER_JAR) \
+ $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME) $(REPRODUCERS_CLASS_NAMES)
+	cd $(JNLP_TESTS_ENGINE_DIR) ; \
+	class_names=`cat $(REPRODUCERS_CLASS_NAMES)` ; \
 	CLASSPATH=$(NETX_DIR)/lib/classes.jar:$(JUNIT_JAR):$(JUNIT_RUNNER_JAR):. \
 	  $(BOOT_DIR)/bin/java -Dtest.server.dir=$(JNLP_TESTS_SERVER_DEPLOYDIR) -Djavaws.build.bin=$(DESTDIR)$(bindir)/javaws \
 	 -Xbootclasspath:$(RUNTIME) CommandLine $$class_names \
@@ -556,6 +565,7 @@
 	 cat stdout.log ; \
 	 cat stderr.log >&2
 	-xsltproc $(TESTS_SRCDIR)/$(REPORT_STYLES_DIRNAME)/jreport.xsl $(JNLP_TESTS_ENGINE_DIR)/tests-output.xml > $(TESTS_DIR)/index_reproducers.html
+	touch $@
 
 netx-unit-tests-source-files.txt:
 	find $(NETX_UNIT_TEST_SRCDIR) -name '*.java' | sort > $@
@@ -575,8 +585,18 @@
 	cp $(TESTS_SRCDIR)/$(REPORT_STYLES_DIRNAME)/*.css $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME)/
 	cp $(TESTS_SRCDIR)/$(REPORT_STYLES_DIRNAME)/*.js $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME)/
 
-run-netx-unit-tests: stamps/netx-unit-tests-compile.stamp \
- $(JUNIT_RUNNER_JAR) $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME) 
+$(UNIT_CLASS_NAMES):
+	cd $(NETX_UNIT_TEST_DIR) ; \
+	class_names= ; \
+	for test in `find -type f` ; do \
+	  class_name=`echo $$test | sed -e 's|\.class$$||' -e 's|^\./||'` ; \
+	  class_name=`echo $$class_name | sed -e 's|/|.|g' ` ; \
+	  class_names="$$class_names $$class_name" ; \
+	done ; \
+	echo $$class_names > $(UNIT_CLASS_NAMES);
+
+stamps/run-netx-unit-tests.stamp: stamps/netx-unit-tests-compile.stamp $(JUNIT_RUNNER_JAR)  \
+ $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME)  $(UNIT_CLASS_NAMES)
 	filename=" " ; \
 	cd $(NETX_UNIT_TEST_SRCDIR) ; \
 	for file in `find . -type f \! -iname "*.java"`; do\
@@ -584,21 +604,168 @@
 		cp --parents $$filename $(NETX_UNIT_TEST_DIR) ; \
 	done ; \
 	cd $(NETX_UNIT_TEST_DIR) ; \
-	class_names= ; \
-	for test in `find -type f` ; do \
-	  class_name=`echo $$test | sed -e 's|\.class$$||' -e 's|^\./||'` ; \
-	  class_name=`echo $$class_name | sed -e 's|/|.|g' ` ; \
-	  class_names="$$class_names $$class_name" ; \
-	done ; \
-	echo $$class_names ; \
+	class_names=`cat $(UNIT_CLASS_NAMES)` ; \
 	CLASSPATH=$(NETX_DIR)/lib/classes.jar:$(JUNIT_JAR):$(JUNIT_RUNNER_JAR):. \
 	  $(BOOT_DIR)/bin/java -Xbootclasspath:$(RUNTIME) CommandLine $$class_names \
 	  > stdout.log 2> stderr.log ; \
 	cat stdout.log ; \
-	cat stderr.log >&2
+	cat stderr.log >&2 ; 
 	-xsltproc $(TESTS_SRCDIR)/$(REPORT_STYLES_DIRNAME)/jreport.xsl $(NETX_UNIT_TEST_DIR)/tests-output.xml > $(TESTS_DIR)/index_unit.html
+	touch $@
 
-clean-netx-tests: clean-netx-unit-tests clean-junit-runner clean-netx-dist-tests
+#warning,  during this target tests.build/netx/unit/tests-output.xml is backup and rewriten (but not coresponding html file)
+#xml results run from emma sandbox, however, can be wrong, co the new tests-output.xml is then renamed and orginal one restored
+#you can add -ix "-*Test*" -ix "-*test*"  to ignore all test cases from statistics
+stamps/run-unit-test-code-coverage.stamp: check  $(UNIT_CLASS_NAMES);
+if WITH_EMMA
+	mv $(NETX_UNIT_TEST_DIR)/tests-output.xml  $(NETX_UNIT_TEST_DIR)/tests-output.xml_noEmma ; \
+	cd $(NETX_UNIT_TEST_DIR) ; \
+	class_names=`cat $(UNIT_CLASS_NAMES)` ; \
+	$(BOOT_DIR)/bin/java -Xbootclasspath:$(RUNTIME) -cp $(EMMA_JAR) -Demma.report.html.out.encoding=UTF-8 emmarun \
+	 -Dreport.html.out.encoding=UTF-8 \
+	 -raw \
+	 -sp $(NETX_SRCDIR) \
+	 -sp $(NETX_UNIT_TEST_SRCDIR) \
+	 -sp $(JUNIT_RUNNER_SRCDIR) \
+	 -r html \
+	 -r xml \
+	 -cp $(NETX_DIR)/lib/classes.jar \
+	 -cp $(JUNIT_JAR) \
+	 -cp $(JUNIT_RUNNER_JAR) \
+	 -cp $(BOOT_DIR)/jre/lib/rt.jar \
+	 -cp $(BOOT_DIR)/jre/lib/jsse.jar \
+	 -cp $(RHINO_RUNTIME) \
+	 -cp . \
+	 -ix "-org.junit.*" \
+	 -ix "-junit.*" \
+	 CommandLine $$class_names ;  \
+	mv $(NETX_UNIT_TEST_DIR)/tests-output.xml  $(NETX_UNIT_TEST_DIR)/tests-output_withEmma.xml ; \
+	mv $(NETX_UNIT_TEST_DIR)/tests-output.xml_noEmma  $(NETX_UNIT_TEST_DIR)/tests-output.xml ; 
+else 
+	echo "Sorry, coverage report cant be run without emma installed. Try install emma or specify with-emma value" ;
+	exit 5
+endif 
+	touch $@
+
+#warning,  during this target tests.build/netx/jnlp_testsengine/tests-output.xml is backup and rewriten (but not coresponding html file)
+#xml results run from emma sandbox, however, can be wrong, co the new tests-output.xml is then renamed and orginal one restored
+stamps/run-reproducers-test-code-coverage.stamp: stamps/run-netx-dist-tests.stamp $(REPRODUCERS_CLASS_NAMES)
+if WITH_EMMA
+	cd $(TESTS_DIR) ; \
+	mv $(JNLP_TESTS_ENGINE_DIR)/tests-output.xml  $(JNLP_TESTS_ENGINE_DIR)/tests-output.xml_noEmma ; \
+	echo "backuping javaws and netx.jar in $(DESTDIR)" ; \
+	netx_backup=$(DESTDIR)$(datadir)/$(PACKAGE_NAME)/netx_backup.jar ; \
+	javaws_backup=$(DESTDIR)$(bindir)/javaws_backup ; \
+	mv $(DESTDIR)$(bindir)/javaws $$javaws_backup ;  \
+	mv $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/netx.jar $$netx_backup ; \
+	nw_bootclasspath="$(LAUNCHER_BOOTCLASSPATH):$(EMMA_JAR):$$netx_backup" ; \
+	instructed_dir=$(TESTS_DIR)/instr ; \
+	echo "instrumenting netx.jar from $$netx_backup through $$instructed_dir" ; \
+	$(BOOT_DIR)/bin/java -cp  $(EMMA_JAR) emma instr -d $$instructed_dir -ip $$netx_backup ; \
+	pushd $$instructed_dir ; \
+	$(BOOT_DIR)/bin/jar -cf $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/netx.jar * ; \
+	popd ; \
+	rm -rf $$instructed_dir ; \
+	echo "patching javaws" ; \
+	cat $$javaws_backup | sed "s,$(LAUNCHER_BOOTCLASSPATH),$$nw_bootclasspath," > $(DESTDIR)$(bindir)/javaws ; \
+	chmod 777 $(DESTDIR)$(bindir)/javaws ; \
+	testcases_srcs=( ) ; \
+	k=0 ; \
+	types=(simple signed); \
+	for which in "$${types[@]}" ; do \
+	  . $(abs_top_builddir)/NEW_LINE_IFS ; \
+	  simpleReproducers=(`cat $(abs_top_builddir)/junit-jnlp-dist-$$which.txt `); \
+	  IFS="$$IFS_BACKUP" ; \
+	  for dir in "$${simpleReproducers[@]}" ; do \
+	    testcases_srcs[k]="-sp" ; \
+	    k=$$((k+1)) ; \
+	    testcases_srcs[k]="$(JNLP_TESTS_SRCDIR)/$$which/$$dir/testcases/" ; \
+	    k=$$((k+1)) ; \
+	    done ; \
+	  done ; \
+	cd $(JNLP_TESTS_ENGINE_DIR) ; \
+	class_names=`cat $(REPRODUCERS_CLASS_NAMES)` ; \
+	$(BOOT_DIR)/bin/java  \
+	 -Dtest.server.dir=$(JNLP_TESTS_SERVER_DEPLOYDIR) \
+	 -Djavaws.build.bin=$(DESTDIR)$(bindir)/javaws \
+	 -Xbootclasspath:$(RUNTIME) -cp $(EMMA_JAR) emmarun  \
+	   -raw \
+	   -cp $(NETX_DIR)/lib/classes.jar \
+	   -cp $(JUNIT_JAR) \
+	   -cp $(JUNIT_RUNNER_JAR) \
+	   -cp $(BOOT_DIR)/jre/lib/rt.jar \
+	   -cp $(BOOT_DIR)/jre/lib/jsse.jar \
+	   -cp $(RHINO_RUNTIME) \
+	   -cp . \
+	   -ix "-org.junit.*" \
+	   -ix "-junit.*" \
+	   CommandLine $$class_names ; \
+	mv $(JNLP_TESTS_ENGINE_DIR)/coverage.ec $(JNLP_TESTS_ENGINE_DIR)/coverageX.ec ; \
+	mv $(JNLP_TESTS_ENGINE_DIR)/coverage.es $(JNLP_TESTS_ENGINE_DIR)/coverageX.es ; \
+	$(BOOT_DIR)/bin/java -cp $(EMMA_JAR) emma merge \
+	  -in $(TESTS_DIR)/coverage.em \
+	  -in $(JNLP_TESTS_ENGINE_DIR)/coverageX.ec \
+	  -in $(JNLP_TESTS_ENGINE_DIR)/coverageX.es ; \
+	$(BOOT_DIR)/bin/java -cp $(EMMA_JAR)  -Demma.report.html.out.encoding=UTF-8 emma report \
+	  -Dreport.html.out.encoding=UTF-8 \
+	  -in $(JNLP_TESTS_ENGINE_DIR)/coverage.es  \
+	  -sp $(NETX_SRCDIR) \
+	  -sp $(NETX_UNIT_TEST_SRCDIR) \
+	  -sp $(JUNIT_RUNNER_SRCDIR) \
+	  -sp $(JNLP_TESTS_ENGINE_SRCDIR) \
+	  -r html \
+	  -r xml \
+	  "$${testcases_srcs[@]}" ; \
+	echo "restoring javaws and netx.jar in $(DESTDIR)" ; \
+	rm -f $(DESTDIR)$(bindir)/javaws $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/netx.jar ; \
+	rm -f $(DESTDIR)$(bindir)/javaws;  \
+	mv $$javaws_backup $(DESTDIR)$(bindir)/javaws;  \
+	mv $$netx_backup $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/netx.jar ; \
+	mv $(JNLP_TESTS_ENGINE_DIR)/tests-output.xml  $(JNLP_TESTS_ENGINE_DIR)/tests-output_withEmma.xml ; \
+	mv $(JNLP_TESTS_ENGINE_DIR)/tests-output.xml_noEmma  $(JNLP_TESTS_ENGINE_DIR)/tests-output.xml ; \
+	rm $(JNLP_TESTS_ENGINE_DIR)/coverage.txt ; 
+else
+	echo "Sorry, coverage report cant be run without emma installed. Try install emma or specify with-emma value" ;
+	exit 5
+endif
+	touch $@
+
+run-test-code-coverage: run-unit-test-code-coverage run-reproducers-test-code-coverage
+if WITH_EMMA
+	cd $(TESTS_DIR) ; \
+	k=0 ; \
+	types=(simple signed); \
+	for which in "$${types[@]}" ; do \
+	  . $(abs_top_builddir)/NEW_LINE_IFS ; \
+	  simpleReproducers=(`cat $(abs_top_builddir)/junit-jnlp-dist-$$which.txt `); \
+	  IFS="$$IFS_BACKUP" ; \
+	  for dir in "$${simpleReproducers[@]}" ; do \
+	    testcases_srcs[k]="-sp" ; \
+	    k=$$((k+1)) ; \
+	    testcases_srcs[k]="$(JNLP_TESTS_SRCDIR)/$$which/$$dir/testcases/" ; \
+	    k=$$((k+1)) ; \
+	  done ; \
+	done ; \
+	$(BOOT_DIR)/bin/java -cp $(EMMA_JAR) emma merge \
+	 -in $(NETX_UNIT_TEST_DIR)/coverage.es \
+	 -in $(JNLP_TESTS_ENGINE_DIR)/coverage.es ; \
+	$(BOOT_DIR)/bin/java -cp $(EMMA_JAR)  -Demma.report.html.out.encoding=UTF-8 emma report \
+	 -Dreport.html.out.encoding=UTF-8 \
+	 -in $(TESTS_DIR)/coverage.es \
+	 -in $(TESTS_DIR)/coverage.em \
+	 -sp $(NETX_SRCDIR) \
+	 -sp $(NETX_UNIT_TEST_SRCDIR) \
+	 -sp $(JUNIT_RUNNER_SRCDIR) \
+	 -sp $(JNLP_TESTS_ENGINE_SRCDIR) \
+	 "$${testcases_srcs[@]}" \
+	 -r html \
+	 -r xml ; 
+else
+	echo "Sorry, coverage report cant be run without emma installed. Try install emma or specify with-emma value" ;
+	exit 5
+endif
+
+clean-netx-tests: clean-netx-unit-tests clean-junit-runner clean-netx-dist-tests clean-test-code-coverage
 	if [ -e $(TESTS_DIR)/netx ]; then \
 	  rmdir $(TESTS_DIR)/netx ; \
 	fi
@@ -611,6 +778,8 @@
 clean-netx-unit-tests: clean_tests_reports
 	rm -f netx-unit-tests-source-files.txt
 	rm -rf $(NETX_UNIT_TEST_DIR)
+	rm -f $(UNIT_CLASS_NAMES)
+	rm -f stamps/run-netx-unit-tests.stamp
 	rm -f stamps/netx-unit-tests-compile.stamp
 
 clean_tests_reports:
@@ -629,7 +798,38 @@
 	rm -f stamps/netx-dist-tests-sign-some-reproducers.stamp
 	rm -f junit-jnlp-dist-simple.txt
 	rm -f junit-jnlp-dist-signed.txt
+	rm -f $(REPRODUCERS_CLASS_NAMES)
 	rm -f $(abs_top_builddir)/$(KEYSTORE_NAME)
+	rm -f stamps/run-netx-dist-tests.stamp
+
+clean-unit-test-code-coverage:
+	if [ -e stamps/run-unit-test-code-coverage.stamp ]; then \
+	  rm -rf $(NETX_UNIT_TEST_DIR)/coverage ; \
+	  rm -f $(NETX_UNIT_TEST_DIR)/coverage.xml ; \
+	  rm -f $(NETX_UNIT_TEST_DIR)/coverageX.es ; \
+	  rm -f $(NETX_UNIT_TEST_DIR)/coverageX.ec ; \
+	  rm -f $(NETX_UNIT_TEST_DIR)/coverage.es ; \
+	  rm -f $(NETX_UNIT_TEST_DIR)/tests-output_withEmma.xml ; \
+	  rm -f stamps/run-unit-test-code-coverage.stamp ; \
+	fi
+
+clean-reproducers-test-code-coverage:
+	if [ -e stamps/run-reproducers-test-code-coverage.stamp ]; then \
+	 rm -rf $(JNLP_TESTS_ENGINE_DIR)/coverage ; \
+	 rm -f $(JNLP_TESTS_ENGINE_DIR)/coverage.xml ; \
+	 rm -f $(JNLP_TESTS_ENGINE_DIR)/coverage.es ; \
+	 rm -f $(JNLP_TESTS_ENGINE_DIR)/tests-output_withEmma.xml ; \
+	 rm -f stamps/run-reproducers-test-code-coverage.stamp ; \
+	fi
+
+clean-test-code-coverage: clean-unit-test-code-coverage clean-reproducers-test-code-coverage
+	if [ -e $(TESTS_DIR)/coverage.xml ]; then \
+	  rm -rf $(TESTS_DIR)/coverage  ; \
+	  rm -f $(TESTS_DIR)/coverage.xml  ; \
+	  rm -f $(TESTS_DIR)/coverage.es  ; \
+	  rm -f $(TESTS_DIR)/coverage.em ; \
+	fi
+
 
 # plugin tests
 
@@ -730,3 +930,11 @@
 plugin: stamps/plugin.stamp
 
 plugin-tests: stamps/plugin-tests.stamp
+
+run-netx-unit-tests: stamps/run-netx-unit-tests.stamp
+
+run-netx-dist-tests: stamps/run-netx-dist-tests.stamp
+
+run-unit-test-code-coverage: stamps/run-unit-test-code-coverage.stamp
+
+run-reproducers-test-code-coverage: stamps/run-reproducers-test-code-coverage.stamp
--- a/configure.ac	Fri Nov 11 14:40:26 2011 +0100
+++ b/configure.ac	Tue Nov 29 17:13:03 2011 +0100
@@ -90,6 +90,8 @@
     [/usr/share/java/js.jar /usr/share/rhino-1.6/lib/js.jar])
 IT_FIND_OPTIONAL_JAR([junit], JUNIT,
     [/usr/share/java/junit4.jar /usr/share/junit-4/lib/junit.jar])
+IT_FIND_OPTIONAL_JAR([emma], EMMA,
+    [/usr/share/java/emma.jar])
 
 AC_CONFIG_FILES([jrunscript], [chmod u+x jrunscript])
 AC_CONFIG_FILES([build.properties])
--- a/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java	Fri Nov 11 14:40:26 2011 +0100
+++ b/tests/netx/jnlp_testsengine/net/sourceforge/jnlp/ServerAccess.java	Tue Nov 29 17:13:03 2011 +0100
@@ -208,6 +208,66 @@
     }
 
     @Test
+    public void testsProcessResultFiltering() throws Exception {
+        ProcessResult pn = new ProcessResult(null, null, null, true, 0);
+        Assert.assertNull(pn.notFilteredStdout);
+        Assert.assertNull(pn.stdout);
+        Assert.assertNull(pn.stderr);
+        String fakeOut2 =
+                "EMMA: processing instrumentation path ...\n"
+                + "EMMA: package [net.sourceforge.filebrowser] contains classes [ArrayOfString] without full debug info\n"
+                + "EMMA: instrumentation path processed in 1407 ms\n"
+                + "test stage 1\n"
+                + "test stage 2\n"
+                + "EMMA: The intruder!\n"
+                + "test stage 3\n"
+                + "EMMA: [45 class(es) instrumented, 13 resource(s) copied]\n"
+                + "EMMA: metadata merged into [icedtea-web/inc] {in 105 ms}\n"
+                + "EMMA: processing instrumentation path ...";
+        String filteredOut2 =
+                "test stage 1\n"
+                + "test stage 2\n"
+                + "test stage 3\n";
+        ProcessResult p2 = new ProcessResult(fakeOut2, fakeOut2, null, true, 0);
+        Assert.assertEquals(p2.notFilteredStdout, fakeOut2);
+        Assert.assertEquals(p2.stdout, filteredOut2);
+        Assert.assertEquals(p2.stderr, fakeOut2);
+        fakeOut2+="\n";
+        p2 = new ProcessResult(fakeOut2, fakeOut2, null, true, 0);
+        Assert.assertEquals(p2.notFilteredStdout, fakeOut2);
+        Assert.assertEquals(p2.stdout, filteredOut2);
+        Assert.assertEquals(p2.stderr, fakeOut2);
+        String fakeOut =
+                "test string\n"
+                + "EMMA: processing instrumentation path ...\n"
+                + "EMMA: package [net.sourceforge.filebrowser] contains classes [ArrayOfString] without full debug info\n"
+                + "EMMA: instrumentation path processed in 1407 ms\n"
+                + "test stage 1\n"
+                + "test stage 2\n"
+                + "test stage 3\n"
+                + "EMMA: [45 class(es) instrumented, 13 resource(s) copied]\n"
+                + "EMMA: metadata merged into [icedtea-web/inc] {in 105 ms}\n"
+                + "EMMA: processing instrumentation path ...\n"
+                + "test ends";
+        String filteredOut =
+                "test string\n"
+                + "test stage 1\n"
+                + "test stage 2\n"
+                + "test stage 3\n"
+                + "test ends";
+        ProcessResult p = new ProcessResult(fakeOut, fakeOut, null, true, 0);
+        Assert.assertEquals(p.notFilteredStdout, fakeOut);
+        Assert.assertEquals(p.stdout, filteredOut);
+        Assert.assertEquals(p.stderr, fakeOut);
+        fakeOut+="\n";
+        filteredOut+="\n";
+        p = new ProcessResult(fakeOut, fakeOut, null, true, 0);
+        Assert.assertEquals(p.notFilteredStdout, fakeOut);
+        Assert.assertEquals(p.stdout, filteredOut);
+        Assert.assertEquals(p.stderr, fakeOut);
+    }
+
+    @Test
     public void ensureJavaws() throws Exception {
         String javawsValue = getJavawsLocation();
         Assert.assertNotNull(javawsValue);
@@ -215,8 +275,6 @@
         File javawsFile = getJavawsFile();
         Assert.assertTrue(javawsFile.exists());
         Assert.assertFalse(javawsFile.isDirectory());
-
-
     }
 
     @Test
@@ -864,13 +922,19 @@
     public static class ProcessResult {
 
         public final String stdout;
+        public final String notFilteredStdout;
         public final String stderr;
         public final Process process;
         public final Integer returnValue;
         public final boolean wasTerminated;
 
         public ProcessResult(String stdout, String stderr, Process process, boolean wasTerminated, Integer r) {
-            this.stdout = stdout;
+            this.notFilteredStdout = stdout;
+            if (stdout == null) {
+                this.stdout = null;
+            } else {
+                this.stdout = stdout.replaceAll("EMMA:.*\n?", "");
+            }
             this.stderr = stderr;
             this.process = process;
             this.wasTerminated = wasTerminated;