#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;
}