This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch: FYI: CNI test directory


I'm checking this in on the trunk.

This adds support for CNI tests to the libjava test suite.

This patch also adds a couple tests.  One, shortfield, is the test
that Andrew wrote for the old gcj/g++ layout disagreement.  The other,
longfield, shows the current Process bug.

Tom

Index: libjava/testsuite/ChangeLog
from  Tom Tromey  <tromey at redhat dot com>

	* lib/libjava.exp (gcj_invoke): Moved...
	* libjava.jni/jni.exp: ...from here.

	* libjava.cni/shortfield.out: New file.
	* libjava.cni/shortfield.java: New file.
	* libjava.cni/natshortfield.cc: New file.
	* libjava.cni/natlongfield.cc: New file.
	* libjava.cni/longfield.out: New file.
	* libjava.cni/longfield.java: New file.

	* libjava.cni/cni.exp: New file.

Index: libjava/testsuite/lib/libjava.exp
===================================================================
RCS file: /cvs/gcc/gcc/libjava/testsuite/lib/libjava.exp,v
retrieving revision 1.50
diff -u -r1.50 libjava.exp
--- libjava/testsuite/lib/libjava.exp 15 Feb 2003 16:39:28 -0000 1.50
+++ libjava/testsuite/lib/libjava.exp 22 Mar 2003 07:12:33 -0000
@@ -457,6 +457,50 @@
     return 1
 }
 
+# Invoke the program and see what happens.  Return 0 on failure.
+proc gcj_invoke {program expectFile ld_library_additions} {
+  global env
+  set lib_path $env(LD_LIBRARY_PATH)
+
+  set newval .
+  if {[llength $ld_library_additions] > 0} {
+    append newval :[join $ld_library_additions :]
+  }
+  append newval :$lib_path
+
+  setenv LD_LIBRARY_PATH $newval
+  setenv SHLIB_PATH $newval
+
+  verbose "LD_LIBRARY_PATH=$env(LD_LIBRARY_PATH)"
+
+  set result [libjava_load ./$program]
+  set status [lindex $result 0]
+  set output [lindex $result 1]
+
+  # Restore setting
+  setenv LD_LIBRARY_PATH $lib_path
+  setenv SHLIB_PATH $lib_path
+
+  if {$status != "pass"} {
+    verbose "got $output"
+    fail "$program run"
+    untested "$program output"
+    return 0
+  }
+
+  set id [open $expectFile r]
+  set expected [read $id]
+  close $id
+
+  if {! [string compare $output $expected]} {
+    pass "$program output"
+    return 1
+  } else {
+    fail "$program output"
+    return 0
+  }
+}
+
 # Invoke a program and check its output.  EXECUTABLE is the program;
 # ARGS are the arguments to the program.  Returns 1 if tests passed
 # (or things were left untested), 0 otherwise.
Index: libjava/testsuite/libjava.cni/cni.exp
===================================================================
RCS file: libjava/testsuite/libjava.cni/cni.exp
diff -N libjava/testsuite/libjava.cni/cni.exp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libjava/testsuite/libjava.cni/cni.exp 22 Mar 2003 07:12:33 -0000
@@ -0,0 +1,119 @@
+# Tests for CNI code.
+
+# Compile a single C++ file and produce a .o file.  OPTIONS is a list
+# of options to pass to the compiler.  Returns 0 on failure, 1 on
+# success.
+proc gcj_cni_compile_cxx_to_o {file {options {}}} {
+  global srcdir
+
+  set name [file rootname [file tail $file]]
+  set oname ${name}.o
+
+  # Find the generated header.
+  lappend options "additional_flags=-I. -I.."
+  # Find libgcj headers.
+  lappend options "additional_flags=-I$srcdir/.."
+
+  set x [libjava_prune_warnings \
+	   [target_compile $file $oname object $options]]
+  if {$x != ""} {
+    verbose "target_compile failed: $x" 2
+    fail "[file tail $file] compilation"
+    return 0
+  }
+
+  pass "[file tail $file] compilation"
+  return 1
+}
+
+# Build header files given name of .java file.  Return 0 on failure.
+proc gcj_cni_build_headers {file} {
+  set gcjh [find_gcjh]
+  set jvscan [find_jvscan]
+
+  set class_out [string trim \
+		   [libjava_prune_warnings \
+		      [lindex [local_exec "$jvscan --encoding=UTF-8 $file --list-class" "" "" 300] 1]]]
+  if {[string match "*parse error*" $class_out]} {
+    fail "$file header generation"
+    return 0
+  }
+
+  foreach file [split $class_out] {
+    set x [string trim [libjava_prune_warnings \
+			  [lindex [local_exec "$gcjh $file" "" "" 300] 1]]]
+    if {$x != ""} {
+      verbose "local_exec failed: $x" 2
+      fail "$file header generation"
+      return 0
+    }
+  }
+
+  pass "$file header generation"
+  return 1
+}
+
+# Do all the work for a single CNI test.  Return 0 on failure.
+proc gcj_cni_test_one {file} {
+  global runtests
+
+  # The base name.  We use it for several purposes.
+  set main [file rootname [file tail $file]]
+  if {! [runtest_file_p $runtests $main]} {
+    # Simply skip it.
+    return 1
+  }
+
+  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"
+
+  if {! [gcj_cni_build_headers $file]} {
+    # FIXME
+    return 0
+  }
+
+  set cfile [file join [file dirname $file] nat$main.cc]
+  if {! [gcj_cni_compile_cxx_to_o $cfile]} {
+    # FIXME
+    return 0
+  }
+
+  if {! [gcj_link $main $main [list $file nat$main.o]]} {
+    # FIXME
+    return 0
+  }
+
+  if {! [gcj_invoke $main [file rootname $file].out {}]} {
+    # FIXME
+    return 0
+  }
+
+  # When we succeed we remove all our clutter.
+  eval gcj_cleanup [glob -nocomplain -- ${main}.*] [list $main nat$main.o]
+
+  return 1
+}
+
+# Run the CNI tests.
+proc gcj_cni_run {} {
+  global srcdir subdir
+  global build_triplet host_triplet
+
+  # For now we only test CNI on native builds.
+  if {$build_triplet == $host_triplet} {
+    catch { lsort [glob -nocomplain ${srcdir}/${subdir}/*.java] } srcfiles
+
+    foreach x $srcfiles {
+      gcj_cni_test_one $x
+    }
+  } else {
+    verbose "CNI tests not run in cross-compilation environment"
+  }
+}
+
+gcj_cni_run
Index: libjava/testsuite/libjava.cni/longfield.java
===================================================================
RCS file: libjava/testsuite/libjava.cni/longfield.java
diff -N libjava/testsuite/libjava.cni/longfield.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libjava/testsuite/libjava.cni/longfield.java 22 Mar 2003 07:12:33 -0000
@@ -0,0 +1,22 @@
+public class longfield
+{
+  long lval = 232300;
+  boolean bval = true;
+  String sval = "maude";
+
+  public native void doitc ();
+
+  public void doitj()
+  {
+    System.out.println(lval);
+    System.out.println(bval);
+    System.out.println(sval);
+  }
+
+  public static void main(String[] args)
+  {
+    longfield f = new longfield();
+    f.doitc();
+    f.doitj();
+  }
+}
Index: libjava/testsuite/libjava.cni/longfield.out
===================================================================
RCS file: libjava/testsuite/libjava.cni/longfield.out
diff -N libjava/testsuite/libjava.cni/longfield.out
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libjava/testsuite/libjava.cni/longfield.out 22 Mar 2003 07:12:33 -0000
@@ -0,0 +1,6 @@
+232300
+true
+maude
+232300
+true
+maude
Index: libjava/testsuite/libjava.cni/natlongfield.cc
===================================================================
RCS file: libjava/testsuite/libjava.cni/natlongfield.cc
diff -N libjava/testsuite/libjava.cni/natlongfield.cc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libjava/testsuite/libjava.cni/natlongfield.cc 22 Mar 2003 07:12:33 -0000
@@ -0,0 +1,15 @@
+#include <gcj/cni.h>
+
+#include "longfield.h"
+#include <java/lang/System.h>
+#include <java/io/PrintStream.h>
+
+void
+longfield::doitc ()
+{
+  java::io::PrintStream *ps = java::lang::System::out;
+
+  ps->println(lval);
+  ps->println(bval);
+  ps->println(sval);
+}
Index: libjava/testsuite/libjava.cni/natshortfield.cc
===================================================================
RCS file: libjava/testsuite/libjava.cni/natshortfield.cc
diff -N libjava/testsuite/libjava.cni/natshortfield.cc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libjava/testsuite/libjava.cni/natshortfield.cc 22 Mar 2003 07:12:33 -0000
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include "shortfield.h"
+
+void shortfield::ouch ()
+{
+  printf ("list: %d %d 0x%x\n",
+	  modCount,
+	  size__,
+	  data);
+}
Index: libjava/testsuite/libjava.cni/shortfield.java
===================================================================
RCS file: libjava/testsuite/libjava.cni/shortfield.java
diff -N libjava/testsuite/libjava.cni/shortfield.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libjava/testsuite/libjava.cni/shortfield.java 22 Mar 2003 07:12:33 -0000
@@ -0,0 +1,21 @@
+class shortfieldbase
+{
+   short modCount;
+}
+
+public class shortfield extends shortfieldbase
+{
+  short size__;
+  int data;
+  
+  native void ouch ();
+  
+  public static void main (String[] s)
+  {
+    shortfield f = new shortfield();
+    f.modCount = 99;
+    f.size__ = 2;
+    f.data = 0x12345678;
+    f.ouch();
+  }
+}
Index: libjava/testsuite/libjava.cni/shortfield.out
===================================================================
RCS file: libjava/testsuite/libjava.cni/shortfield.out
diff -N libjava/testsuite/libjava.cni/shortfield.out
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libjava/testsuite/libjava.cni/shortfield.out 22 Mar 2003 07:12:33 -0000
@@ -0,0 +1 @@
+list: 99 2 0x12345678
Index: libjava/testsuite/libjava.jni/jni.exp
===================================================================
RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.jni/jni.exp,v
retrieving revision 1.9
diff -u -r1.9 jni.exp
--- libjava/testsuite/libjava.jni/jni.exp 13 Dec 2002 05:00:14 -0000 1.9
+++ libjava/testsuite/libjava.jni/jni.exp 22 Mar 2003 07:12:33 -0000
@@ -43,50 +43,6 @@
   return 1
 }
 
-# Invoke the program and see what happens.  Return 0 on failure.
-proc gcj_invoke {program expectFile ld_library_additions} {
-  global env
-  set lib_path $env(LD_LIBRARY_PATH)
-
-  set newval .
-  if {[llength $ld_library_additions] > 0} {
-    append newval :[join $ld_library_additions :]
-  }
-  append newval :$lib_path
-
-  setenv LD_LIBRARY_PATH $newval
-  setenv SHLIB_PATH $newval
-
-  verbose "LD_LIBRARY_PATH=$env(LD_LIBRARY_PATH)"
-
-  set result [libjava_load ./$program]
-  set status [lindex $result 0]
-  set output [lindex $result 1]
-
-  # Restore setting
-  setenv LD_LIBRARY_PATH $lib_path
-  setenv SHLIB_PATH $lib_path
-
-  if {$status != "pass"} {
-    verbose "got $output"
-    fail "$program run"
-    untested "$program output"
-    return 0
-  }
-
-  set id [open $expectFile r]
-  set expected [read $id]
-  close $id
-
-  if {! [string compare $output $expected]} {
-    pass "$program output"
-    return 1
-  } else {
-    fail "$program output"
-    return 0
-  }
-}
-
 # Do all the work for a single JNI test.  Return 0 on failure.
 proc gcj_jni_test_one {file} {
   global runtests


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]