From 3cfe83da32c5a2481588307377897d26713efaee Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Thu, 12 Sep 2024 16:53:39 +0200 Subject: [PATCH] Fix simple tests and adjust runtime error handling --- libcob/java.c | 6 ++--- tests/testsuite.src/run_java.at | 47 ++++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/libcob/java.c b/libcob/java.c index e6fd2a908..3e9840300 100644 --- a/libcob/java.c +++ b/libcob/java.c @@ -81,7 +81,7 @@ resolve_java (const char *class_name, cob_free(jni_class_name); if (!cls) { cob_runtime_error(_("Java class '%s' not found"), class_name); - return NULL; + cob_hard_failure (); } mid = (*env)->GetStaticMethodID(env, cls, method_name, method_signature); @@ -89,14 +89,14 @@ resolve_java (const char *class_name, cob_runtime_error(_("Java method '%s' with signature '%s' not found in class '%s'"), method_name, method_signature, class_name); (*env)->DeleteLocalRef(env, cls); - return NULL; + cob_hard_failure (); } handle = (cob_java_handle*)cob_malloc(sizeof(cob_java_handle)); if (!handle) { cob_runtime_error(_("Memory allocation failed for Java method handle")); (*env)->DeleteLocalRef(env, cls); - return NULL; + cob_hard_failure (); } handle->cls = (*env)->NewGlobalRef(env, cls); diff --git a/tests/testsuite.src/run_java.at b/tests/testsuite.src/run_java.at index ee5d7af04..5a76a239c 100644 --- a/tests/testsuite.src/run_java.at +++ b/tests/testsuite.src/run_java.at @@ -48,7 +48,26 @@ AT_CHECK([$COBCRUN_DIRECT ./prog], [0], AT_CLEANUP -AT_SETUP([CALL Java static void (void) (missing)]) +AT_SETUP([CALL Java with malformed method name]) +AT_KEYWORDS([extensions jni malformed]) + +AT_SKIP_IF([test "$COB_HAS_JNI" = "no"]) + +AT_DATA([prog.cob], [ + IDENTIFICATION DIVISION. + PROGRAM-ID. prog. + PROCEDURE DIVISION. + CALL "Java.InvalidName" + STOP RUN. +]) + +AT_CHECK([$COMPILE prog.cob], [1], [], +[prog.cob:5: error: malformed Java method name 'Java.InvalidName', expected format 'Java.ClassName.methodName' +]) +AT_CLEANUP + + +AT_SETUP([CALL Java static void (void) (missing class)]) AT_KEYWORDS([extensions jni]) AT_SKIP_IF([test "$COB_HAS_JNI" = "no"]) @@ -57,27 +76,37 @@ AT_DATA([prog.cob], [ IDENTIFICATION DIVISION. PROGRAM-ID. prog. PROCEDURE DIVISION. - CALL "Java.Test.missingMethod" + CALL "Java.Test.isAMissingClass" STOP RUN. ]) AT_CHECK([$COMPILE prog.cob], [0], [], []) -# TODO: should fail! -AT_CHECK([$COBCRUN_DIRECT ./prog], [0], []) +AT_CHECK([$COBCRUN_DIRECT ./prog], [1], [], +[libcob: prog.cob:5: error: Java class 'Test' not found +]) AT_CLEANUP -AT_SETUP([CALL Java with malformed method name]) -AT_KEYWORDS([extensions jni malformed]) + +AT_SETUP([CALL Java static void (void) (missing method)]) +AT_KEYWORDS([extensions jni]) AT_SKIP_IF([test "$COB_HAS_JNI" = "no"]) +AT_DATA([Test.java], [ +public class Test {} +]) + AT_DATA([prog.cob], [ IDENTIFICATION DIVISION. PROGRAM-ID. prog. PROCEDURE DIVISION. - CALL "Java.InvalidName" + CALL "Java.Test.missingMethod" STOP RUN. ]) -AT_CHECK([$COMPILE prog.cob], [1], [], [stderr]) -AT_CLEANUP \ No newline at end of file +AT_CHECK([$JAVAC Test.java], [0], [], []) +AT_CHECK([$COMPILE prog.cob], [0], [], []) +AT_CHECK([$COBCRUN_DIRECT ./prog], [1], [], +[libcob: prog.cob:5: error: Java method 'missingMethod' with signature '()V' not found in class 'Test' +]) +AT_CLEANUP