#include "test_utils.h" UnittestTestResult_t* test_missing_class_body(void) { UNITTEST_BEGIN_TEST("TestNegative", "test_missing_class_body"); RAVA_TEST_EXPECT_PARSE_ERROR(_unittest_result, "public class Test", "missing class body should cause parse error"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_missing_method_body(void) { UNITTEST_BEGIN_TEST("TestNegative", "test_missing_method_body"); RAVA_TEST_EXPECT_PARSE_ERROR(_unittest_result, "public class Test {\n" " public static int main()\n" "}\n", "missing method body should cause parse error"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_unclosed_brace(void) { UNITTEST_BEGIN_TEST("TestNegative", "test_unclosed_brace"); RAVA_TEST_EXPECT_PARSE_ERROR(_unittest_result, "public class Test {\n" " public static int main() {\n" " return 0;\n" "}\n", "unclosed brace should cause parse error"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_missing_semicolon(void) { UNITTEST_BEGIN_TEST("TestNegative", "test_missing_semicolon"); RAVA_TEST_EXPECT_PARSE_ERROR(_unittest_result, "public class Test {\n" " public static int main() {\n" " int x = 5\n" " return x;\n" " }\n" "}\n", "missing semicolon should cause parse error"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_undefined_variable(void) { UNITTEST_BEGIN_TEST("TestNegative", "test_undefined_variable"); RAVA_TEST_EXPECT_SEMANTIC_ERROR(_unittest_result, "public class Test {\n" " public static int main() {\n" " return undefinedVar;\n" " }\n" "}\n", "undefined variable should cause semantic error"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_undefined_method_call(void) { UNITTEST_BEGIN_TEST("TestNegative", "test_undefined_method_call"); RAVA_TEST_EXPECT_SEMANTIC_ERROR(_unittest_result, "public class Test {\n" " public static int main() {\n" " return undefinedMethod();\n" " }\n" "}\n", "undefined method call should cause semantic error"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_missing_class_at_runtime(void) { UNITTEST_BEGIN_TEST("TestNegative", "test_missing_class_at_runtime"); RAVA_TEST_EXPECT_RUNTIME_ERROR(_unittest_result, "public class Test {\n" " public static int main() {\n" " return 0;\n" " }\n" "}\n", "NonExistent", "main", "missing class at runtime should cause runtime error"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_missing_method_at_runtime(void) { UNITTEST_BEGIN_TEST("TestNegative", "test_missing_method_at_runtime"); RAVA_TEST_EXPECT_RUNTIME_ERROR(_unittest_result, "public class Test {\n" " public static int main() {\n" " return 0;\n" " }\n" "}\n", "Test", "nonExistent", "missing method at runtime should cause runtime error"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_duplicate_variable(void) { UNITTEST_BEGIN_TEST("TestNegative", "test_duplicate_variable"); RAVA_TEST_EXPECT_SEMANTIC_ERROR(_unittest_result, "public class Test {\n" " public static int main() {\n" " int x = 5;\n" " int x = 10;\n" " return x;\n" " }\n" "}\n", "duplicate variable should cause semantic error"); UNITTEST_END_TEST(); } UnittestTestResult_t* test_malformed_for_loop(void) { UNITTEST_BEGIN_TEST("TestNegative", "test_malformed_for_loop"); RAVA_TEST_EXPECT_PARSE_ERROR(_unittest_result, "public class Test {\n" " public static int main() {\n" " for (int i = 0; i < 10) {\n" " }\n" " return 0;\n" " }\n" "}\n", "malformed for loop should cause parse error"); UNITTEST_END_TEST(); } int main(int argc, char **argv) { UnittestConfig_t *config = unittest_config_create(); config->verbosity = 2; if (argc > 1 && strcmp(argv[1], "--json") == 0) { config->output_format = UNITTEST_FORMAT_JSON; config->use_colors = false; } UnittestTestSuite_t *suite = unittest_test_suite_create("Negative Test Cases"); UnittestTestCase_t *tc = unittest_test_case_create("TestNegative"); unittest_test_case_add_result(tc, test_missing_class_body()); unittest_test_case_add_result(tc, test_missing_method_body()); unittest_test_case_add_result(tc, test_unclosed_brace()); unittest_test_case_add_result(tc, test_missing_semicolon()); unittest_test_case_add_result(tc, test_undefined_variable()); unittest_test_case_add_result(tc, test_undefined_method_call()); unittest_test_case_add_result(tc, test_missing_class_at_runtime()); unittest_test_case_add_result(tc, test_missing_method_at_runtime()); unittest_test_case_add_result(tc, test_duplicate_variable()); unittest_test_case_add_result(tc, test_malformed_for_loop()); unittest_test_suite_add_test_case(suite, tc); unittest_generate_report(suite, config); int failures = suite->total_failed + suite->total_errors; unittest_test_suite_destroy(suite); unittest_config_destroy(config); return failures > 0 ? 1 : 0; }