From aa3ad84fd24967756cb031c4f3529198afdba900 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Sat, 23 Apr 2011 20:42:30 +0200 Subject: [PATCH] java coverage: try to build and run a java program * tests/java-compile-run-flat.test: New test, try to build and run a "UNIX-style" java program (complete with wrapper shell script and the like) with a "flat" source-tree setup (i.e., everything in the top-level directory). * tests/java-compile-nested.test: Likewise, but using a more typical "nested" source-tree setup. * tests/Makefile.am (TESTS): Update. --- ChangeLog | 11 ++ tests/Makefile.am | 2 + tests/Makefile.in | 4 + tests/java-compile-run-flat.test | 235 +++++++++++++++++++++++++++ tests/java-compile-run-nested.test | 248 +++++++++++++++++++++++++++++ 5 files changed, 500 insertions(+) create mode 100755 tests/java-compile-run-flat.test create mode 100755 tests/java-compile-run-nested.test diff --git a/ChangeLog b/ChangeLog index 9e32286f4..26c177e8c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2011-04-26 Stefano Lattarini + + java coverage: try to build and run a java program + * tests/java-compile-run-flat.test: New test, try to build and run + a "UNIX-style" java program (complete with wrapper shell script + and the like) with a "flat" source-tree setup (i.e., everything in + the top-level directory). + * tests/java-compile-nested.test: Likewise, but using a more + typical "nested" source-tree setup. + * tests/Makefile.am (TESTS): Update. + 2011-04-23 Stefano Lattarini test defs: new requirement for the default java interpreter diff --git a/tests/Makefile.am b/tests/Makefile.am index 8eb06d6c7..ff56b3317 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -440,6 +440,8 @@ java-extra.test \ java-noinst.test \ java-nobase.test \ java-compile-install.test \ +java-compile-run-flat.test \ +java-compile-run-nested.test \ java-sources.test \ java-no-duplicate.test \ java-mix.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index a3859fe1e..ea6b48508 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -302,6 +302,8 @@ color2-p.test \ comment9-p.test \ dejagnu-p.test \ exeext4-p.test \ +java-compile-run-flat-p.test \ +java-compile-run-nested-p.test \ maken3-p.test \ maken4-p.test \ pr401-p.test \ @@ -711,6 +713,8 @@ java-extra.test \ java-noinst.test \ java-nobase.test \ java-compile-install.test \ +java-compile-run-flat.test \ +java-compile-run-nested.test \ java-sources.test \ java-no-duplicate.test \ java-mix.test \ diff --git a/tests/java-compile-run-flat.test b/tests/java-compile-run-flat.test new file mode 100755 index 000000000..ccf7c11a3 --- /dev/null +++ b/tests/java-compile-run-flat.test @@ -0,0 +1,235 @@ +#! /bin/sh +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Test on compilation and execution of Java class files. +# Also meddle with wrapper scripts, as would be probably seen in a real +# "UNIX-style" use case. +# This test uses a "flat" setup for the source tree (i.e., everything in +# the top-level directory); the sister test `java-compile-run-nested.test' +# do similar checks with a more usual, "nested" setup. + +required='java javac' +. ./defs || Exit 1 + +set -e + +cat >> configure.in <<'END' +AC_SUBST([JAVA], [java]) +AC_CONFIG_SRCDIR([PkgLocation.jin]) +AC_CONFIG_FILES([PkgLocation.java:PkgLocation.jin]) +AC_OUTPUT +END + +## TOP-LEVEL SETUP AND TARGETS ## + +cat > Makefile.am <<'END' +EXTRA_DIST = # Will be updated later. + +test-built: + ls -l $(srcdir) ;: For debugging. + test $(srcdir) = . || ls -l . ;: Likewise. + test -f $(srcdir)/Main.java + test -f $(srcdir)/HelloStream.java + test -f $(srcdir)/PkgLocation.jin + test -f PkgLocation.java + test -f HelloStream.class + test -f PkgLocation.class + test -f Main.class + test -f classjava.stamp + +test-installed: + ls -l $(javadir) ;: For debugging. + test -f $(javadir)/HelloStream.class + test -f $(javadir)/PkgLocation.class + test -f $(javadir)/Main.class + if find $(prefix) | grep '\.stamp$$'; then exit 1; else :; fi + +run-installed: + jprog_doing_installcheck=yes $(MAKE) $(AM_MAKEFLAGS) check + +check-local: test-built +installcheck-local: test-installed run-installed + +.PHONY: test-built test-installed run-installed +END + +## WRAPPER SCRIPT ## + +cat >> Makefile.am <<'END' +bin_SCRIPTS = jprog + +edit_script = sed -e 's|[@]JAVA@|$(JAVA)|g' \ + -e 's|[@]javadir@|$(javadir)|g' \ + -e 's|[@]SHELL@|$(SHELL)|g' + +jprog: jprog.sh + rm -f $@ $@-t + $(edit_script) `test -f '$@.sh' || echo $(srcdir)/`$@.sh >$@-t + chmod a-w $@-t && chmod a+x $@-t && mv -f $@-t $@ + sed 's/^/ | /' $@ ;: for debugging. + +EXTRA_DIST += jprog.sh +CLEANFILES = jprog +END + +cat > jprog.sh <<'END' +#!@SHELL@ +CLASSPATH=${jprog_classpath-'@javadir@'}${CLASSPATH+":$CLASSPATH"} +export CLASSPATH +case $# in + 0) exec @JAVA@ Main;; + *) exec @JAVA@ Main "$@";; +esac +END + +## JAVA SOURCES ## + +cat >> Makefile.am <<'END' +javadir = $(pkgdatadir)/java + +dist_java_JAVA = Main.java HelloStream.java +nodist_java_JAVA = PkgLocation.java +END + +cat > PkgLocation.jin <<'END' +public class PkgLocation { + public static String prefix() { + return new String("@prefix@"); + } +} +END + +cat > Main.java <<'END' +public class Main { + public static void main(String[] args) { + for (int i = 0; i < args.length; i++) { + if (args[i].equals("--print-prefix")) { + System.out.println(PkgLocation.prefix()); + } else if (args[i].equals("--hello-stdout")) { + HelloStream.to(System.out); + } else if (args[i].equals("--hello-stderr")) { + HelloStream.to(System.err); + } else { + System.err.println("jprog: invalid option '" + args[i] + + "'"); + System.exit(2); + } + } + System.exit(0); + } +} +END + +cat > HelloStream.java <<'END' +import java.io.PrintStream; +class HelloStream { + public static void to(PrintStream stream) { + stream.println("Hello, Stream!"); + } +} +END + +## TESTS ## + +cat >> Makefile.am <<'END' +## FIXME: Use AM_TESTS_ENVIRONMENT here when it becomes available. +TESTS_ENVIRONMENT = \ + if test x"$$jprog_doing_installcheck" != x"yes"; then \ + jprog_classpath='$(abs_top_builddir):$(abs_top_srcdir)'; \ + export jprog_classpath; \ + PATH='$(abs_top_builddir)':$$PATH; \ + export PATH; \ + else \ + unset jprog_classpath || :; \ + PATH='$(prefix)/bin':$$PATH; \ + export PATH; \ + fi; \ + config_time_prefix='@prefix@'; export config_time_prefix; + +TESTS = \ + simple.test \ + prefix.test \ + stdout.test \ + stderr.test \ + badarg.test + +XFAIL_TESTS = badarg.test + +EXTRA_DIST += $(TESTS) +END + +cat > simple.test <<'END' +#!/bin/sh +jprog +END + +cat > prefix.test <<'END' +#!/bin/sh +jprefix=`jprog --print-prefix` || exit 1 +echo "$0: exp prefix: $config_time_prefix" +echo "$0: got prefix: $jprefix" +test x"$jprefix" = x"$config_time_prefix" +END + +cat > stdout.test <<'END' +#!/bin/sh +rc=0 +jprog --hello-stdout >stdout.out 2>stdout.err || { echo \$?=$?; rc=1; } +sed 's/^/out:/' &2 # Likewise. +test -s stdout.err && rc=1 +test "`cat stdout.out`" = 'Hello, Stream!' || rc=1 +rm -f stdout.out stdout.err || rc=1 +exit $rc +END + +cat > stderr.test <<'END' +#!/bin/sh +rc=0 +jprog --hello-stderr >stderr.out 2>stderr.err || { echo \$?=$?; rc=1; } +sed 's/^/out:/' &2 # Likewise. +test -s stderr.out && rc=1 +test "`cat stderr.err`" = 'Hello, Stream!' || rc=1 +rm -f stderr.out stderr.err || rc=1 +exit $rc +END + +cat > badarg.test <<'END' +#!/bin/sh +jprog --bad-argument +END + +chmod a+x *.test + +## DO CHECKS ## + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +# To have the parallel testsuite more verbose. +VERBOSE=yes; export VERBOSE + +./configure --prefix="`pwd`/_inst" +cat PkgLocation.java # For debugging. +$MAKE check +$MAKE install +$MAKE test-installed +$MAKE run-installed +$MAKE distcheck + +: diff --git a/tests/java-compile-run-nested.test b/tests/java-compile-run-nested.test new file mode 100755 index 000000000..f5fcaa12e --- /dev/null +++ b/tests/java-compile-run-nested.test @@ -0,0 +1,248 @@ +#! /bin/sh +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Test on compilation and execution of Java class files. +# Also meddle with wrapper scripts, as would be probably seen in a real +# "UNIX-style" use case. +# This test uses a typical "nested" source tree setup (i.e., different +# componenets/aspects are separeted into different subdirectories); the +# sister test `java-compile-run-flat.test' do similar checks with a +# "flat" setup (i.e., everything in the top-level directory). + +required='java javac' +. ./defs || Exit 1 + +set -e + +cat >> configure.in <<'END' +AC_SUBST([JAVA], [java]) +AC_CONFIG_SRCDIR([jprog/PkgLocation.jin]) +AC_SUBST([jprogdatadir], ['${pkgdatadir}']) +AC_SUBST([jprogclassdir], ['${jprogdatadir}/jprog']) +AC_CONFIG_FILES([jprog/PkgLocation.java:jprog/PkgLocation.jin]) +AC_CONFIG_FILES([jprog/Makefile bin/Makefile tests/Makefile]) +AC_OUTPUT +END + +## TOP-LEVEL SETUP AND TARGETS ## + +cat > Makefile.am <<'END' +SUBDIRS = bin jprog tests + +test-built: + ls -l $(srcdir)/* ;: For debugging. + test $(srcdir) = . || ls -l * ;: Likewise. + test -f $(srcdir)/jprog/Main.java + test -f $(srcdir)/jprog/HelloStream.java + test -f $(srcdir)/jprog/PkgLocation.jin + test -f jprog/PkgLocation.java + test -f jprog/HelloStream.class + test -f jprog/Main.class + test -f jprog/PkgLocation.class + test -f jprog/classjprogclass.stamp + +test-installed: + ls -l $(jprogclassdir) ;: For debugging. + test -f $(jprogclassdir)/HelloStream.class + test -f $(jprogclassdir)/Main.class + test -f $(jprogclassdir)/PkgLocation.class + if find $(prefix) | grep '\.stamp$$'; then exit 1; else :; fi + +run-installed: + jprog_doing_installcheck=yes $(MAKE) $(AM_MAKEFLAGS) check + +check-local: test-built +installcheck-local: test-installed run-installed + +.PHONY: test-built test-installed run-installed +END + +## WRAPPER SCRIPT ## + +mkdir bin + +cat > bin/Makefile.am <<'END' +bin_SCRIPTS = jprog + +edit_script = sed -e 's|[@]JAVA@|$(JAVA)|g' \ + -e 's|[@]jprogdatadir@|$(jprogdatadir)|g' \ + -e 's|[@]SHELL@|$(SHELL)|g' + +jprog: jprog.sh + rm -f $@ $@-t + $(edit_script) `test -f '$@.sh' || echo $(srcdir)/`$@.sh >$@-t + chmod a-w $@-t && chmod a+x $@-t && mv -f $@-t $@ + sed 's/^/ | /' $@ ;: for debugging. + +EXTRA_DIST = jprog.sh +CLEANFILES = jprog +END + +cat > bin/jprog.sh <<'END' +#!@SHELL@ +CLASSPATH=${jprog_classpath-'@jprogdatadir@'}${CLASSPATH+":$CLASSPATH"} +export CLASSPATH +case $# in + 0) exec @JAVA@ jprog.Main;; + *) exec @JAVA@ jprog.Main "$@";; +esac +END + +## JAVA SOURCES ## + +mkdir jprog + +cat > jprog/Makefile.am <<'END' +dist_jprogclass_JAVA = Main.java HelloStream.java +nodist_jprogclass_JAVA = PkgLocation.java +END + +cat > jprog/PkgLocation.jin <<'END' +package jprog; +public class PkgLocation { + public static String prefix() { + return new String("@prefix@"); + } +} +END + +cat > jprog/Main.java <<'END' +package jprog; +import jprog.PkgLocation; +import jprog.HelloStream; +public class Main { + public static void main(String[] args) { + for (int i = 0; i < args.length; i++) { + if (args[i].equals("--print-prefix")) { + System.out.println(PkgLocation.prefix()); + } else if (args[i].equals("--hello-stdout")) { + HelloStream.to(System.out); + } else if (args[i].equals("--hello-stderr")) { + HelloStream.to(System.err); + } else { + System.err.println("jprog: invalid option '" + args[i] + + "'"); + System.exit(2); + } + } + System.exit(0); + } +} +END + +cat > jprog/HelloStream.java <<'END' +package jprog; +import java.io.PrintStream; +class HelloStream { + public static void to(PrintStream stream) { + stream.println("Hello, Stream!"); + } +} +END + +## TESTS ## + +mkdir tests + +cat > tests/Makefile.am <<'END' +## FIXME: Use AM_TESTS_ENVIRONMENT here when it becomes available. +TESTS_ENVIRONMENT = \ + if test x"$$jprog_doing_installcheck" != x"yes"; then \ + jprog_classpath='$(abs_top_builddir):$(abs_top_srcdir)'; \ + export jprog_classpath; \ + PATH='$(abs_top_builddir)/bin':$$PATH; \ + export PATH; \ + else \ + unset jprog_classpath || :; \ + PATH='$(prefix)/bin':$$PATH; \ + export PATH; \ + fi; \ + config_time_prefix='@prefix@'; export config_time_prefix; + +TESTS = \ + simple.test \ + prefix.test \ + stdout.test \ + stderr.test \ + badarg.test + +XFAIL_TESTS = badarg.test + +EXTRA_DIST = $(TESTS) +END + +cat > tests/simple.test <<'END' +#!/bin/sh +jprog +END + +cat > tests/prefix.test <<'END' +#!/bin/sh +jprefix=`jprog --print-prefix` || exit 1 +echo "$0: exp prefix: $config_time_prefix" +echo "$0: got prefix: $jprefix" +test x"$jprefix" = x"$config_time_prefix" +END + +cat > tests/stdout.test <<'END' +#!/bin/sh +rc=0 +jprog --hello-stdout >stdout.out 2>stdout.err || { echo \$?=$?; rc=1; } +sed 's/^/out:/' &2 # Likewise. +test -s stdout.err && rc=1 +test "`cat stdout.out`" = 'Hello, Stream!' || rc=1 +rm -f stdout.out stdout.err || rc=1 +exit $rc +END + +cat > tests/stderr.test <<'END' +#!/bin/sh +rc=0 +jprog --hello-stderr >stderr.out 2>stderr.err || { echo \$?=$?; rc=1; } +sed 's/^/out:/' &2 # Likewise. +test -s stderr.out && rc=1 +test "`cat stderr.err`" = 'Hello, Stream!' || rc=1 +rm -f stderr.out stderr.err || rc=1 +exit $rc +END + +cat > tests/badarg.test <<'END' +#!/bin/sh +jprog --bad-argument +END + +chmod a+x tests/*.test + +## DO CHECKS ## + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +# To have the parallel testsuite more verbose. +VERBOSE=yes; export VERBOSE + +./configure --prefix="`pwd`/_inst" +cat jprog/PkgLocation.java # For debugging. +$MAKE check +$MAKE install +$MAKE test-installed +$MAKE run-installed +$MAKE distcheck + +: -- 2.47.2