aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2021-09-20 12:10:19 -0700
committerGitHub <noreply@github.com>2021-09-20 12:10:19 -0700
commitb3dc3f5908286e81983e69a0b48173e021ee44e3 (patch)
tree2788c1496974da2d17cb2574ca5f0ae7bac38af7
parent5840bfba62f9b50eec51fbd23c8d2c635ae48ffc (diff)
parent0a11a6e1f6788f54c74fa15c0d4e2a0a4e0df912 (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.odin2
-rw-r--r--tests/core/build.bat7
-rw-r--r--tests/core/odin/test_parser.odin50
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))
+ }
+}