Worked on tests
This commit is contained in:
parent
2f3b9d8c98
commit
4287ebc648
|
|
@ -7,12 +7,24 @@
|
|||
#define SLS_TESTS_H
|
||||
|
||||
#include <stdint.h>
|
||||
#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 {
|
||||
|
|
|
|||
|
|
@ -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 logic_fail_test(LexerTest test, LexerResult result, const char *message) {
|
||||
clean_up_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() {
|
||||
TestResult test_result = (TestResult){ .name = "test_add_statement", .success = 0 };
|
||||
LexerInfo lexer_info = start_up_test("3 4 +");
|
||||
LexerTest test = start_up_test("test_add_statement", "3 4 +");
|
||||
|
||||
LexerResult result = lexical_analysis(&lexer_info);
|
||||
LexerResult result = lexical_analysis(&test.lexer_info);
|
||||
|
||||
if (result.type == SLS_ERROR) {
|
||||
clean_up_test(result);
|
||||
return test_result;
|
||||
}
|
||||
// TODO: Finish Test
|
||||
if (result.type == SLS_ERROR)
|
||||
return fail_test(test, result, result.error.message);
|
||||
|
||||
clean_up_test(result);
|
||||
test_result.success = 1;
|
||||
return test_result;
|
||||
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() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue