diff options
| author | Jeroen van Rijn <Kelimion@users.noreply.github.com> | 2021-09-20 12:10:19 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-20 12:10:19 -0700 |
| commit | b3dc3f5908286e81983e69a0b48173e021ee44e3 (patch) | |
| tree | 2788c1496974da2d17cb2574ca5f0ae7bac38af7 | |
| parent | 5840bfba62f9b50eec51fbd23c8d2c635ae48ffc (diff) | |
| parent | 0a11a6e1f6788f54c74fa15c0d4e2a0a4e0df912 (diff) | |
Merge pull request #1182 from DanielGavin/parser-fix
Make optional semicolons the default on odin/parser, and add parser test on demo.odin
| -rw-r--r-- | core/odin/parser/parser.odin | 2 | ||||
| -rw-r--r-- | tests/core/build.bat | 7 | ||||
| -rw-r--r-- | tests/core/odin/test_parser.odin | 50 |
3 files changed, 57 insertions, 2 deletions
diff --git a/core/odin/parser/parser.odin b/core/odin/parser/parser.odin index 503836ec9..d6935c925 100644 --- a/core/odin/parser/parser.odin +++ b/core/odin/parser/parser.odin @@ -116,7 +116,7 @@ end_pos :: proc(tok: tokenizer.Token) -> tokenizer.Pos { return pos } -default_parser :: proc(flags := Flags{}) -> Parser { +default_parser :: proc(flags := Flags{.Optional_Semicolons}) -> Parser { return Parser { flags = flags, err = default_error_handler, diff --git a/tests/core/build.bat b/tests/core/build.bat index d7f7de902..d90759841 100644 --- a/tests/core/build.bat +++ b/tests/core/build.bat @@ -20,4 +20,9 @@ echo --- echo ---
echo Running core:hash tests
echo ---
-%PATH_TO_ODIN% run hash %COMMON% -o:size
\ No newline at end of file +%PATH_TO_ODIN% run hash %COMMON% -o:size
+
+echo ---
+echo Running core:odin tests
+echo ---
+%PATH_TO_ODIN% run odin %COMMON% -o:size
\ No newline at end of file diff --git a/tests/core/odin/test_parser.odin b/tests/core/odin/test_parser.odin new file mode 100644 index 000000000..90d913d10 --- /dev/null +++ b/tests/core/odin/test_parser.odin @@ -0,0 +1,50 @@ +package test_core_odin_parser + +import "core:testing" +import "core:fmt" + +import "core:odin/parser" + + +TEST_count := 0 +TEST_fail := 0 + +when ODIN_TEST { + expect :: testing.expect + log :: testing.log +} else { + expect :: proc(t: ^testing.T, condition: bool, message: string, loc := #caller_location) { + fmt.printf("[%v] ", loc) + TEST_count += 1 + if !condition { + TEST_fail += 1 + fmt.println(message) + return + } + fmt.println(" PASS") + } + log :: proc(t: ^testing.T, v: any, loc := #caller_location) { + fmt.printf("[%v] ", loc) + fmt.printf("log: %v\n", v) + } +} + + +main :: proc() { + t := testing.T{} + test_parse_demo(&t) + + fmt.printf("%v/%v tests successful.\n", TEST_count - TEST_fail, TEST_count) +} + + +@test +test_parse_demo :: proc(t: ^testing.T) { + pkg, ok := parser.parse_package_from_path("examples/demo") + + expect(t, ok == true, "parser.parse_package_from_path failed") + + for key, value in pkg.files { + expect(t, value.syntax_error_count == 0, fmt.tprintf("%v should contain zero errors", key)) + } +} |