diff --git a/SLS_C/include/tests/tests.h b/SLS_C/include/tests/tests.h index 023330a..0164821 100644 --- a/SLS_C/include/tests/tests.h +++ b/SLS_C/include/tests/tests.h @@ -7,12 +7,24 @@ #define SLS_TESTS_H #include +#include "../sls/sls_errors.h" const char *TEST_FILE_NAME = "TEST_FILE.SLS"; +typedef enum { + TEST_ERROR, + TEST_LOGIC_FAILED, + TEST_ERROR_FAILED, + TEST_SUCCESS, +} TestResultType; + typedef struct { const char *name; uint8_t success; + union { + const char *message; + SlsError error; + }; } TestResult; typedef struct { diff --git a/SLS_C/tests/lexer_tests.c b/SLS_C/tests/lexer_tests.c index 548c61a..4e1fd2e 100644 --- a/SLS_C/tests/lexer_tests.c +++ b/SLS_C/tests/lexer_tests.c @@ -12,10 +12,16 @@ static const size_t NUM_OF_TESTS = 1; -static LexerInfo start_up_test(const char *code) { +typedef struct { + TestResult result; LexerInfo lexer_info; - lexer_init(&lexer_info, TEST_FILE_NAME, code); - return lexer_info; +} LexerTest; + +static LexerTest start_up_test(const char *test_name, const char *test_code) { + LexerTest test = (LexerTest) { + .result = (TestResult) { .name = test_name, .success = 0 } }; + lexer_init(&test.lexer_info, TEST_FILE_NAME, test_code); + return test; } static void clean_up_test(LexerResult result) { @@ -23,21 +29,46 @@ static void clean_up_test(LexerResult result) { clean_token_result(result.result); } -static TestResult test_add_statement() { - TestResult test_result = (TestResult){ .name = "test_add_statement", .success = 0 }; - LexerInfo lexer_info = start_up_test("3 4 +"); - - LexerResult result = lexical_analysis(&lexer_info); - - if (result.type == SLS_ERROR) { - clean_up_test(result); - return test_result; - } - // TODO: Finish Test - +static TestResult logic_fail_test(LexerTest test, LexerResult result, const char *message) { clean_up_test(result); - test_result.success = 1; - return test_result; + test.result.success = 0; + test.result.message = message; + return test.result; +} + +static TestResult error_fail_test(LexerTest test, LexerResult result, SlsError error) { + clean_up_test(result); + test.result.success = 0; + test.result.error = error; + return test.result; +} + +static TestResult pass_test(LexerTest test, LexerResult result) { + clean_up_test(result); + test.result.success = 1; + return test.result; +} + +static TestResult test_add_statement() { + LexerTest test = start_up_test("test_add_statement", "3 4 +"); + + LexerResult result = lexical_analysis(&test.lexer_info); + + if (result.type == SLS_ERROR) + return fail_test(test, result, result.error.message); + + LexerTokenResult *head = result.result; + + if (head->type == SLS_ERROR) + return fail_test(test, result, result.error.message); + if (head->result.type != TOKEN_INTEGER) + return fail_test(test, result); + if (head->result.integer_literal.type != INTEGER_I64) + return fail_test(test, result); + if (head->result.integer_literal.value != 3) + return fail_test(test, result); + + return pass_test(test, result); } TestsReport run_lexer_tests() {