X-Git-Url: http://nitlanguage.org diff --git a/tests/test_jvm.nit b/tests/test_jvm.nit index b5876bc..d921bf4 100644 --- a/tests/test_jvm.nit +++ b/tests/test_jvm.nit @@ -15,11 +15,22 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Manipulats the Java Virtual Machine -# -# See: http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/jniTOC.html +# No alt works +# alt1 sets a wrong classpath and should fail on class loading +# alt2 looks for a non existant class +# alt3-4 looks for non existant methods + import jvm +redef extern class JniEnv + fun print_error(msg: String) + do + print "Error: {msg}" + if "NIT_TESTING".environ != "true" then exception_describe + exit 1 + end +end + print "Compilation des classes Java ..." assert sys.system("javac test_jvm/Queue.java") == 0 assert sys.system("javac test_jvm/Test2.java") == 0 @@ -29,24 +40,31 @@ print "Initialisation de la JVM ..." var builder = new JavaVMBuilder builder.options.add "-Djava.class.path=." +#alt1#builder.options.clear +#alt1#builder.options.add "-Djava.class.path=/tmp/" var jvm = builder.create_jvm -var env = builder.jni_env -assert env != null +assert jvm != null + +var env = jvm.env +assert not env.address_is_null print "---------------------Test 1----------------------" # get the class var queue_c = env.find_class("test_jvm/Queue") -if queue_c.address_is_null then print("Error, Queue class not found") +#alt2#queue_c = env.find_class("test_jvm/Queue_error_in_name") +if queue_c.address_is_null then env.print_error("Queue class not found") # get the methods of the class var f_init = env.get_method_id(queue_c, "", "()V") -if f_init.address_is_null then print("Error, fInit not found") +if f_init.address_is_null then env.print_error("fInit not found") var f_push = env.get_method_id(queue_c, "push", "(Ljava/lang/String;)V") -if f_push.address_is_null then print("Error, fPush not found") +#alt3#f_push = env.get_method_id(queue_c, "push_error", "(Ljava/lang/String;)V") +#alt4#f_push = env.get_method_id(queue_c, "push", "(Ljava/lang/String;ZZZ)V") +if f_push.address_is_null then env.print_error("fPush not found") var f_pop = env.get_method_id(queue_c, "pop", "()Ljava/lang/String;") -if f_pop.address_is_null then print("Error, fPop not found") +if f_pop.address_is_null then env.print_error("fPop not found") var element1 = "premier" var element2 = "deuxième" @@ -54,7 +72,7 @@ var element3 = "troisième" # instanciate class var queue = env.new_object(queue_c, f_init) -if queue.address_is_null then print("Error, object not initialized") +if queue.address_is_null then env.print_error("object not initialized") var arg_tab = new Array[Object].with_items(element1) @@ -75,49 +93,44 @@ print el.to_s print "--------------------Test 2---------------------" var test_c = env.find_class("test_jvm/TestJvm") -if test_c.address_is_null then print("Error, TestJvm class not found") +if test_c.address_is_null then env.print_error("TestJvm class not found") f_init = env.get_method_id(test_c, "", "()V") -if f_init.address_is_null then print("Error, finit not found") +if f_init.address_is_null then env.print_error("finit not found") # Get the different methods ids var m_bool = env.get_method_id(test_c, "isBool", "()Z") -if m_bool.address_is_null then print("Error, mbool not found") +if m_bool.address_is_null then env.print_error("mbool not found") var m_char = env.get_method_id(test_c, "getC", "()C") -if m_char.address_is_null then print("Error, mchar not found") +if m_char.address_is_null then env.print_error("mchar not found") var m_i = env.get_method_id(test_c, "getI", "()I") -if m_i.address_is_null then print ("Error, mi not found") +if m_i.address_is_null then env.print_error ("mi not found") var m_f = env.get_method_id(test_c, "getF", "()F") -if m_f.address_is_null then print("Error, mf not found") +if m_f.address_is_null then env.print_error("mf not found") var m_test = env.get_method_id(test_c, "getTest", "()Ltest_jvm/Test2;") -if m_test.address_is_null then print("Error, mtest not found") +if m_test.address_is_null then env.print_error("mtest not found") # Get the Field ids var f_bool =env.get_field_id(test_c, "bool", "Z") -if f_bool.address_is_null then print("Error, fbool not found") +if f_bool.address_is_null then env.print_error("fbool not found") var f_char = env.get_field_id(test_c, "c", "C") -if f_char.address_is_null then print("Error, fchar not found") +if f_char.address_is_null then env.print_error("fchar not found") var f_i =env.get_field_id(test_c, "i", "I") -if f_i.address_is_null then print("Error, fi not found") +if f_i.address_is_null then env.print_error("fi not found") var f_f = env.get_field_id(test_c, "f", "F") -if f_f.address_is_null then print("Error, ff not found") +if f_f.address_is_null then env.print_error("ff not found") var f_test = env.get_field_id(test_c, "test", "Ltest_jvm/TestJvm;") # Instanciate var test = env.new_object(test_c, f_init) -if test.address_is_null then print("Error, object test not initialized") +if test.address_is_null then env.print_error("object test not initialized") # Retrieve field value with field ids var v_bool = env.get_boolean_field(test, f_bool) -if v_bool == null then print("Error, vbool not found") var v_char = env.get_char_field(test, f_char) -if v_char == null then print("Error, vchar not found") var v_i = env.get_int_field(test, f_i) -if v_i == null then print("Error, vi not found") var v_f = env.get_float_field(test, f_f) -if v_f == null then print("Error, vf not found") var v_test1 = env.get_object_field(test, f_test) -if v_test1 == null then print("Error, vtest1 not found") # Set the new values for the fields env.set_boolean_field(test, f_bool, true) @@ -132,10 +145,11 @@ v_char = env.call_char_method(test, m_char, null) v_i = env.call_int_method(test, m_i, null) v_f = env.call_float_method(test, m_f, null) var v_test2 = env.call_object_method(test, m_test, null) -if v_test2 == null then print("Error, vtest2 not found") # assert the values of the fields print v_bool print v_char print v_i print v_f + +jvm.destroy