* tests/java-rebuild.test: New test. * tests/Makefile.am (TESTS): Update. --- ChangeLog | 6 ++ tests/Makefile.am | 1 + tests/Makefile.in | 1 + tests/java-rebuild.test | 126 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 134 insertions(+), 0 deletions(-) create mode 100755 tests/java-rebuild.test
diff --git a/ChangeLog b/ChangeLog index 26c177e..9c71828 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2011-04-26 Stefano Lattarini <[email protected]> + java coverage: test rebuild rules for java + * tests/java-rebuild.test: New test. + * tests/Makefile.am (TESTS): Update. + +2011-04-26 Stefano Lattarini <[email protected]> + 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 diff --git a/tests/Makefile.am b/tests/Makefile.am index ff56b33..0e55109 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -446,6 +446,7 @@ java-sources.test \ java-no-duplicate.test \ java-mix.test \ java-uninstall.test \ +java-rebuild.test \ ldadd.test \ ldflags.test \ lex.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index ea6b485..a0e6c70 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -719,6 +719,7 @@ java-sources.test \ java-no-duplicate.test \ java-mix.test \ java-uninstall.test \ +java-rebuild.test \ ldadd.test \ ldflags.test \ lex.test \ diff --git a/tests/java-rebuild.test b/tests/java-rebuild.test new file mode 100755 index 0000000..75be5f7 --- /dev/null +++ b/tests/java-rebuild.test @@ -0,0 +1,126 @@ +#! /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 rebuild rules for Java class files. + +required='javac' +. ./defs || Exit 1 + +set -e + +cat >> configure.in <<'END' +AC_OUTPUT +END + +cat > Makefile.am <<'END' +AM_JAVACFLAGS = -verbose +foodir = $(datadir)/java +foo_JAVA = a.java +dist_foo_JAVA = d.java +nodist_foo_JAVA = n.java +nobase_foo_JAVA = Nobase.java +nobase_dist_foo_JAVA = NobaseDist.java +nobase_nodist_foo_JAVA = NobaseNoDist.java +END + +echo 'class _x {}' > a.java +echo 'class x_ {}' > d.java +echo 'class a {} class d {}' > n.java +echo 'class Nobase_Foo {} class Nobase_Bar {}' > Nobase.java +echo 'class NobaseDist {}' > NobaseDist.java +echo 'class NobaseNoDist {}' > NobaseNoDist.java + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +all_classes='_x x_ a d Nobase_Foo Nobase_Bar NobaseDist NobaseNoDist' + +for vpath in : false; do + + if $vpath; then + srcdir=.. + mkdir build + cd build + else + srcdir=. + fi + + $srcdir/configure + $MAKE + ls -l # For debugging. + + # Sanity check. + test -f classfoo.stamp + for cls in $all_classes; do + test -f $cls.class + done + + # When the stampfile is removed, all the *.class files should + # be considered out-of-date. + echo timestamp > older + $sleep + rm -f classfoo.stamp + $MAKE + for cls in $all_classes; do + is_newest $cls.class older + done + + # When only a java file is modified, only the *.class files derived from + # it should be updated. + # The strings we loop on here have the following format: + # ``JAVA-FILES-TO-BE-TOUCHED -- CLASSES-THAT-SHOULD-BE-UPDATED'' + for args in \ + 'a -- _x' \ + 'd -- x_' \ + 'n -- a d' \ + 'a d Nobase -- _x x_ Nobase_Foo Nobase_Bar' \ + 'n NobaseDist -- a d NobaseDist' \ + 'd NobaseNoDist -- x_ NobaseNoDist' \ + "a d n Nobase NobaseDist NobaseNoDist -- $all_classes" \ + ; do + set $args + touched_javas= + while test $# -gt 0; do + if test x"$1" = x"--"; then + shift + break + else + touched_javas="$touched_javas $1" + shift + fi + done + updated_classes=$* + echo timestamp > older + $sleep + for j in $touched_javas; do + touch $srcdir/$j.java + done + $MAKE + is_newest classfoo.stamp older + for cls in $all_classes; do + case " $updated_classes " in + *" $cls "*) is_newest $cls.class older;; + *) is_newest older $cls.class;; + esac + done + done # $args ... + + cd $srcdir + +done # $vpath ... + +: -- 1.7.2.3
