diff options
Diffstat (limited to 'Sencha-lang/Tests/TestParser.cpp')
-rw-r--r-- | Sencha-lang/Tests/TestParser.cpp | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/Sencha-lang/Tests/TestParser.cpp b/Sencha-lang/Tests/TestParser.cpp index d656306..633fcc6 100644 --- a/Sencha-lang/Tests/TestParser.cpp +++ b/Sencha-lang/Tests/TestParser.cpp @@ -35,18 +35,85 @@ std::string TestParser::test_parsing_and_evaluating_logical_expressions() return test_report; } +std::string TestParser::test_changing_letters_in_string() +{ + std::string test_report = ""; + std::string preparations = "text = \"AlfaBetaGamma\";"; + std::string changes = "text[0] = \"a\";"; + changes += "text[4] = \"b\";"; + changes += "text[8] = \"g\";"; + changes += "text;"; + + ContextManager context_manager; + Parser parser(&context_manager); + Lexer lexer; + auto tokens = lexer.parse_line(preparations + changes); + parser.add_tokens(tokens); + parser.interpret(); + SenchaObject value = parser.program->execute(); + //std::cout << value.repr() << std::endl; + muu_assert("Changed text isn't alfabetagamma", value.text == "alfabetagamma"); + + return test_report; +} + + + std::string TestParser::test_adding_new_function() { std::string test_report = ""; std::string function_declaration = "def print_hello(how_many_times) {"; function_declaration += " repeat(how_many_times) { print(\"Hello\");}"; + ContextManager context_manager; + Parser parser(&context_manager); + Lexer lexer; + auto tokens = lexer.parse_line(function_declaration); + parser.add_tokens(tokens); + parser.interpret(); + + muu_assert("Function couldn't be added", context_manager.get_top()->contains_function("print_hello")); + + return test_report; +} + +std::string TestParser::test_writing_and_accessing_array_elements() +{ + std::string test_report = ""; + std::string table_definition = "array data[4];"; + table_definition += "data[0] = 3; data[1] = -88; data[2] = true; data[3] = 1.222;"; + + std::string data_access = "data[0];"; ContextManager context; Parser parser(&context); Lexer lexer; - auto tokens = lexer.parse_line(function_declaration); + auto tokens = lexer.parse_line(table_definition + data_access); parser.add_tokens(tokens); parser.interpret(); + SenchaObject value = parser.program->execute(); + + muu_assert("data[0] != 3", (value == SenchaObject(3)).truthy ); + data_access = "data[1];"; + tokens = lexer.parse_line(data_access); + parser.add_tokens(tokens); + parser.interpret(); + value = parser.program->execute(); + muu_assert("data[1] != -88", (value == SenchaObject(-88)).truthy ); + + data_access = "data[2];"; + tokens = lexer.parse_line(data_access); + parser.add_tokens(tokens); + parser.interpret(); + value = parser.program->execute(); + muu_assert("data[2] != true", (value == SenchaObject(true)).truthy ); + + data_access = "data[3];"; + tokens = lexer.parse_line(data_access); + parser.add_tokens(tokens); + parser.interpret(); + value = parser.program->execute(); + muu_assert("data[3] != 1.222", (value == SenchaObject(1.222)).truthy ); + return test_report; } @@ -123,6 +190,9 @@ std::string TestParser::all_tests() mu_run_test(test_parsing_and_evaluating_logical_expressions); mu_run_test(test_calling_funtion); + mu_run_test(test_changing_letters_in_string); + //mu_run_test(test_adding_new_function); + mu_run_test(test_writing_and_accessing_array_elements); return test_report; } |