automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FYI 6/8] java coverage: try to build and run a java program


From: Stefano Lattarini
Subject: [FYI 6/8] java coverage: try to build and run a java program
Date: Tue, 26 Apr 2011 18:17:33 +0200

* 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(+), 0 deletions(-)
 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 9e32286..26c177e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2011-04-26  Stefano Lattarini  <address@hidden>
+
+       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  <address@hidden>
 
        test defs: new requirement for the default java interpreter
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 8eb06d6..ff56b33 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 a3859fe..ea6b485 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 0000000..ccf7c11
--- /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 <http://www.gnu.org/licenses/>.
+
+# 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|address@hidden@|$(JAVA)|g' \
+                  -e 's|address@hidden@|$(javadir)|g' \
+                  -e 's|address@hidden@|$(SHELL)|g'
+
+jprog: jprog.sh
+       rm -f $@ address@hidden
+       $(edit_script) `test -f 'address@hidden' || echo 
$(srcdir)/address@hidden >address@hidden
+       chmod a-w address@hidden && chmod a+x address@hidden && mv -f 
address@hidden $@
+       sed 's/^/ | /' $@ ;: for debugging.
+
+EXTRA_DIST += jprog.sh
+CLEANFILES = jprog
+END
+
+cat > jprog.sh <<'END'
address@hidden@
+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:/' <stdout.out      # For debugging.
+sed 's/^/err:/' <stdout.err >&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:/' <stderr.out      # For debugging.
+sed 's/^/err:/' <stderr.err >&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 0000000..f5fcaa1
--- /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 <http://www.gnu.org/licenses/>.
+
+# 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|address@hidden@|$(JAVA)|g' \
+                  -e 's|address@hidden@|$(jprogdatadir)|g' \
+                  -e 's|address@hidden@|$(SHELL)|g'
+
+jprog: jprog.sh
+       rm -f $@ address@hidden
+       $(edit_script) `test -f 'address@hidden' || echo 
$(srcdir)/address@hidden >address@hidden
+       chmod a-w address@hidden && chmod a+x address@hidden && mv -f 
address@hidden $@
+       sed 's/^/ | /' $@ ;: for debugging.
+
+EXTRA_DIST = jprog.sh
+CLEANFILES = jprog
+END
+
+cat > bin/jprog.sh <<'END'
address@hidden@
+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:/' <stdout.out      # For debugging.
+sed 's/^/err:/' <stdout.err >&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:/' <stderr.out      # For debugging.
+sed 's/^/err:/' <stderr.err >&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
+
+:
-- 
1.7.2.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]