diff options
Diffstat (limited to 'libjava/testsuite/libjava.loader')
16 files changed, 251 insertions, 0 deletions
diff --git a/libjava/testsuite/libjava.loader/MyLoader.java b/libjava/testsuite/libjava.loader/MyLoader.java new file mode 100644 index 000000000..40c31d7f6 --- /dev/null +++ b/libjava/testsuite/libjava.loader/MyLoader.java @@ -0,0 +1,14 @@ +import java.net.*; + +public class MyLoader extends URLClassLoader +{ + public MyLoader (URL urls[]) + { + super (urls); + } + + public MyLoader (URL urls[], ClassLoader parent) + { + super (urls, parent); + } +} diff --git a/libjava/testsuite/libjava.loader/TestEarlyGC.jar b/libjava/testsuite/libjava.loader/TestEarlyGC.jar Binary files differnew file mode 100644 index 000000000..7a9c0ef1f --- /dev/null +++ b/libjava/testsuite/libjava.loader/TestEarlyGC.jar diff --git a/libjava/testsuite/libjava.loader/TestEarlyGC.java b/libjava/testsuite/libjava.loader/TestEarlyGC.java new file mode 100644 index 000000000..f3bfa0946 --- /dev/null +++ b/libjava/testsuite/libjava.loader/TestEarlyGC.java @@ -0,0 +1,64 @@ +public class TestEarlyGC extends ClassLoader { + + static TestEarlyGC[] a = new TestEarlyGC[10]; + + // Jeff Sturm writes: + // Reconstructed from bytecode (and memory). The singleton pattern + // is used as a class finalizer. + // public class C { + // private static C c; + // public C() { + // c = this; + // } + // protected void finalize() { + // System.out.println("finalized"); + // } + // } + byte[] code = { + -54,-2,-70,-66,0,3,0,45,0,32,1,0,1,67,7,0, + 1,1,0,16,106,97,118,97,47,108,97,110,103,47,79,98, + 106,101,99,116,7,0,3,1,0,1,99,1,0,3,76,67, + 59,1,0,6,60,105,110,105,116,62,1,0,3,40,41,86, + 1,0,4,67,111,100,101,12,0,7,0,8,10,0,4,0, + 10,12,0,5,0,6,9,0,2,0,12,1,0,15,76,105, + 110,101,78,117,109,98,101,114,84,97,98,108,101,1,0,8, + 102,105,110,97,108,105,122,101,1,0,16,106,97,118,97,47, + 108,97,110,103,47,83,121,115,116,101,109,7,0,16,1,0, + 3,111,117,116,1,0,21,76,106,97,118,97,47,105,111,47, + 80,114,105,110,116,83,116,114,101,97,109,59,12,0,18,0, + 19,9,0,17,0,20,1,0,9,102,105,110,97,108,105,122, + 101,100,8,0,22,1,0,19,106,97,118,97,47,105,111,47, + 80,114,105,110,116,83,116,114,101,97,109,7,0,24,1,0, + 7,112,114,105,110,116,108,110,1,0,21,40,76,106,97,118, + 97,47,108,97,110,103,47,83,116,114,105,110,103,59,41,86, + 12,0,26,0,27,10,0,25,0,28,1,0,10,83,111,117, + 114,99,101,70,105,108,101,1,0,6,67,46,106,97,118,97, + 0,33,0,2,0,4,0,0,0,1,0,10,0,5,0,6, + 0,0,0,2,0,1,0,7,0,8,0,1,0,9,0,0, + 0,33,0,1,0,1,0,0,0,9,42,-73,0,11,42,-77, + 0,13,-79,0,0,0,1,0,14,0,0,0,6,0,1,0, + 4,0,5,0,4,0,15,0,8,0,1,0,9,0,0,0, + 33,0,2,0,1,0,0,0,9,-78,0,21,18,23,-74,0, + 29,-79,0,0,0,1,0,14,0,0,0,6,0,1,0,0, + 0,9,0,1,0,30,0,0,0,2,0,31 + }; + + TestEarlyGC() throws Throwable { + defineClass("C", code, 0, code.length).newInstance(); + } + + public static void main(String[] args) { + Runtime r = Runtime.getRuntime(); + + try { + for (int n = 0; n < a.length; n++) { + a[n] = new TestEarlyGC(); + r.gc(); + r.runFinalization(); + Thread.yield(); + } + } catch (Throwable t) { + t.printStackTrace(); + } + } +} diff --git a/libjava/testsuite/libjava.loader/TestEarlyGC.out b/libjava/testsuite/libjava.loader/TestEarlyGC.out new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/libjava/testsuite/libjava.loader/TestEarlyGC.out diff --git a/libjava/testsuite/libjava.loader/TestLeak.jar b/libjava/testsuite/libjava.loader/TestLeak.jar Binary files differnew file mode 100644 index 000000000..d7bd24737 --- /dev/null +++ b/libjava/testsuite/libjava.loader/TestLeak.jar diff --git a/libjava/testsuite/libjava.loader/TestLeak.java b/libjava/testsuite/libjava.loader/TestLeak.java new file mode 100644 index 000000000..3ef452595 --- /dev/null +++ b/libjava/testsuite/libjava.loader/TestLeak.java @@ -0,0 +1,33 @@ +import java.net.*; +import java.lang.reflect.Proxy; + +public class TestLeak +{ + static class MyLoader extends URLClassLoader + { + public MyLoader (URL urls[]) + { + super (urls); + } + } + + public static void main (String[] args) + { + URLClassLoader ucl = + (URLClassLoader) ClassLoader.getSystemClassLoader(); + URL urls[] = ucl.getURLs (); + Class ifaces[] = new Class[1]; + ifaces[0] = java.lang.Comparable.class; + + try { + for (int i = 0; i < 100; i++) + { + Proxy.getProxyClass (new MyLoader (urls), ifaces); + } + } catch (Exception e) { + e.printStackTrace (); + } + } +} + + diff --git a/libjava/testsuite/libjava.loader/TestLeak.out b/libjava/testsuite/libjava.loader/TestLeak.out new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/libjava/testsuite/libjava.loader/TestLeak.out diff --git a/libjava/testsuite/libjava.loader/TestMultiple.jar b/libjava/testsuite/libjava.loader/TestMultiple.jar Binary files differnew file mode 100644 index 000000000..dfb454cfe --- /dev/null +++ b/libjava/testsuite/libjava.loader/TestMultiple.jar diff --git a/libjava/testsuite/libjava.loader/TestMultiple.java b/libjava/testsuite/libjava.loader/TestMultiple.java new file mode 100644 index 000000000..1a56fc487 --- /dev/null +++ b/libjava/testsuite/libjava.loader/TestMultiple.java @@ -0,0 +1,28 @@ +import java.net.*; + +public class TestMultiple +{ + public static void main (String[] args) + { + URLClassLoader ucl = + (URLClassLoader) ClassLoader.getSystemClassLoader(); + URL urls[] = ucl.getURLs (); + + MyLoader t1 = new MyLoader (urls); + MyLoader t2 = new MyLoader (urls); + + Class c1, c2; + + try { + + c1 = t1.loadClass ("dummy"); + c2 = t2.loadClass ("dummy"); + + } + catch (Exception e) { + e.printStackTrace (); + } + } +} + + diff --git a/libjava/testsuite/libjava.loader/TestMultiple.out b/libjava/testsuite/libjava.loader/TestMultiple.out new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/libjava/testsuite/libjava.loader/TestMultiple.out diff --git a/libjava/testsuite/libjava.loader/TestParent.jar b/libjava/testsuite/libjava.loader/TestParent.jar Binary files differnew file mode 100644 index 000000000..41f66db52 --- /dev/null +++ b/libjava/testsuite/libjava.loader/TestParent.jar diff --git a/libjava/testsuite/libjava.loader/TestParent.java b/libjava/testsuite/libjava.loader/TestParent.java new file mode 100644 index 000000000..3996b7671 --- /dev/null +++ b/libjava/testsuite/libjava.loader/TestParent.java @@ -0,0 +1,29 @@ +import java.net.*; + +public class TestParent +{ + public static void main (String[] args) + { + URLClassLoader ucl = + (URLClassLoader) ClassLoader.getSystemClassLoader(); + URL urls[] = ucl.getURLs (); + + MyLoader parent = new MyLoader (urls); + + MyLoader t1 = new MyLoader (urls, parent); + MyLoader t2 = new MyLoader (urls, parent); + + Class c1, c2; + + try { + + c1 = t1.loadClass ("dummy"); + c2 = t2.loadClass ("dummy"); + + } + catch (Exception e) { + e.printStackTrace (); + } + } +} + diff --git a/libjava/testsuite/libjava.loader/TestParent.out b/libjava/testsuite/libjava.loader/TestParent.out new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/libjava/testsuite/libjava.loader/TestParent.out diff --git a/libjava/testsuite/libjava.loader/dummy.class b/libjava/testsuite/libjava.loader/dummy.class Binary files differnew file mode 100644 index 000000000..58ffb90f2 --- /dev/null +++ b/libjava/testsuite/libjava.loader/dummy.class diff --git a/libjava/testsuite/libjava.loader/dummy.java b/libjava/testsuite/libjava.loader/dummy.java new file mode 100644 index 000000000..67bb4a79f --- /dev/null +++ b/libjava/testsuite/libjava.loader/dummy.java @@ -0,0 +1,6 @@ +// A dummy class + +public class dummy +{ +} + diff --git a/libjava/testsuite/libjava.loader/loader.exp b/libjava/testsuite/libjava.loader/loader.exp new file mode 100644 index 000000000..a94e4e9ea --- /dev/null +++ b/libjava/testsuite/libjava.loader/loader.exp @@ -0,0 +1,77 @@ +# Tests for ClassLoader and native library loader code. + +# Compute the correct name for an object file. +# This is an awful hack. +proc gcj_object_file_name {compiler base} { + verbose "OBJECT: compiler = $compiler" + if {[string match *libtool* $compiler]} { + return $base.lo + } + return $base.o +} + +# Do all the work for a single JNI test. Return 0 on failure. +proc gcj_loader_test_one {srcfile} { + global objdir srcdir subdir + + set resfile $srcdir/$subdir/[file rootname [file tail $srcfile]].out + + regsub "^.*/(\[^/.\]+)\[.\]\[^/]*$" "$srcfile" "\\1" out + set executable "${objdir}/$out.exe" + + set errname [file rootname [file tail $srcfile]] + set args [libjava_arguments link] + lappend args "additional_flags=--main=[file rootname [file tail $srcfile]] [gcj_object_file_name $args dummy]" + set x [libjava_prune_warnings \ + [libjava_tcompile $srcfile "$executable" executable $args]] + + if { $x != "" } { + verbose "target_compile failed: $x" 2 + + fail "$errname compilation from source" + untested "$errname execution from source compiled test" + return + } + pass "$errname compilation from source" + + libjava_invoke $executable $executable "" $executable "" $resfile "" + + return 1 +} + +# Run the bytecode loader tests. +proc gcj_loader_run {} { + global srcdir subdir objdir + global build_triplet host_triplet + global GCJ_UNDER_TEST + +# set file "${srcdir}/${subdir}/dummy.java" +# if {! [bytecompile_file $file [pwd]]} { +# fail "bytecompile $file" +# # FIXME - should use `untested' on all remaining tests. +# # But that is hard. +# return 0 +# } +# pass "bytecompile $file" + + set args [libjava_arguments compile] + lappend args "additional_flags=--resource $srcdir/$subdir/dummy.class" + set x [libjava_prune_warnings \ + [libjava_tcompile "$srcdir/$subdir/dummy.class" "$objdir/[gcj_object_file_name $args dummy]" object $args]] + + if { $x != "" } { + verbose "resource compilation failed: $x" 2 + + fail "resource compilation dummy.class" + return 0; + } + pass "resource compilation: dummy.class" + + catch { lsort [glob -nocomplain ${srcdir}/${subdir}/Test*.jar] } srcfiles + + foreach x $srcfiles { + gcj_loader_test_one $x + } +} + +gcj_loader_run |