From 149018a096856e8dcd3d61609c771b13910fd1dc Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Tue, 29 Jul 2025 13:37:22 +0200 Subject: [PATCH] Added scanner tests --- src/scanner/errors.go | 9 +++++---- src/scanner/errors_test.go | 3 +++ src/scanner/scanConst.go | 4 ++-- src/scanner/scanImport.go | 2 +- src/scanner/testdata/errors/InvalidExpression.q | 4 ++-- src/scanner/testdata/errors/MissingExpression.q | 3 +++ src/scanner/testdata/errors/UnknownImport.q | 5 +++++ 7 files changed, 21 insertions(+), 9 deletions(-) create mode 100644 src/scanner/testdata/errors/MissingExpression.q create mode 100644 src/scanner/testdata/errors/UnknownImport.q diff --git a/src/scanner/errors.go b/src/scanner/errors.go index 6ac18c3..cee8a45 100644 --- a/src/scanner/errors.go +++ b/src/scanner/errors.go @@ -9,6 +9,7 @@ import ( var ( ExpectedFunctionDefinition = errors.String("Expected function definition") ExpectedPackageName = errors.String("Expected package name") + InvalidExpression = errors.String("Invalid expression") InvalidFunctionDefinition = errors.String("Invalid function definition") MissingBlockStart = errors.String("Missing '{'") MissingBlockEnd = errors.String("Missing '}'") @@ -20,13 +21,13 @@ var ( NoInputFiles = errors.String("No input files") ) -// CouldNotImport error is created when a package import failed. -type CouldNotImport struct { +// UnknownImport error is created when a package import failed. +type UnknownImport struct { Package string } -func (err *CouldNotImport) Error() string { - return fmt.Sprintf("Could not import '%s'", err.Package) +func (err *UnknownImport) Error() string { + return fmt.Sprintf("Unknown import '%s'", err.Package) } // InvalidCharacter is created when an invalid character appears. diff --git a/src/scanner/errors_test.go b/src/scanner/errors_test.go index 54b3ec4..c08e035 100644 --- a/src/scanner/errors_test.go +++ b/src/scanner/errors_test.go @@ -21,6 +21,7 @@ var errs = []struct { {"InvalidCharacter2.q", &scanner.InvalidCharacter{Character: "@"}}, {"InvalidCharacter3.q", &scanner.InvalidCharacter{Character: "@"}}, {"InvalidCharacter4.q", &scanner.InvalidCharacter{Character: "+++"}}, + {"InvalidExpression.q", scanner.InvalidExpression}, {"InvalidFunctionDefinition.q", scanner.InvalidFunctionDefinition}, {"InvalidFunctionDefinition2.q", scanner.InvalidFunctionDefinition}, {"InvalidTopLevel.q", &scanner.InvalidTopLevel{Instruction: "123"}}, @@ -29,6 +30,7 @@ var errs = []struct { {"MissingBlockEnd.q", scanner.MissingBlockEnd}, {"MissingBlockEnd2.q", scanner.MissingBlockEnd}, {"MissingBlockStart.q", scanner.MissingBlockStart}, + {"MissingExpression.q", scanner.MissingExpression}, {"MissingGroupEnd.q", scanner.MissingGroupEnd}, {"MissingGroupEnd2.q", scanner.MissingGroupEnd}, {"MissingGroupStart.q", scanner.MissingGroupStart}, @@ -38,6 +40,7 @@ var errs = []struct { {"MissingParameter4.q", scanner.MissingParameter}, {"MissingParameter5.q", scanner.MissingParameter}, {"MissingType.q", scanner.MissingType}, + {"UnknownImport.q", &scanner.UnknownImport{Package: "unknown"}}, } func TestErrors(t *testing.T) { diff --git a/src/scanner/scanConst.go b/src/scanner/scanConst.go index be7b872..d2f3340 100644 --- a/src/scanner/scanConst.go +++ b/src/scanner/scanConst.go @@ -37,8 +37,8 @@ func (s *scanner) scanConst(file *fs.File, tokens token.List, i int) (int, error value := expression.Parse(valueTokens) - if value == nil { - return i, errors.New(core.InvalidExpression, file, valueTokens[0].Position) + if value.Token.Kind == token.Invalid { + return i, errors.New(InvalidExpression, file, valueTokens[0].Position) } s.constants <- &core.Constant{ diff --git a/src/scanner/scanImport.go b/src/scanner/scanImport.go index 2d044aa..2b6a93b 100644 --- a/src/scanner/scanImport.go +++ b/src/scanner/scanImport.go @@ -23,7 +23,7 @@ func (s *scanner) scanImport(file *fs.File, tokens token.List, i int) (int, erro stat, err := os.Stat(fullPath) if err != nil { - return i, errors.New(&CouldNotImport{Package: packageName}, file, tokens[i].Position) + return i, errors.New(&UnknownImport{Package: packageName}, file, tokens[i].Position) } if !stat.IsDir() { diff --git a/src/scanner/testdata/errors/InvalidExpression.q b/src/scanner/testdata/errors/InvalidExpression.q index 02bde05..730492f 100644 --- a/src/scanner/testdata/errors/InvalidExpression.q +++ b/src/scanner/testdata/errors/InvalidExpression.q @@ -1,3 +1,3 @@ -f() { - syscall(+, -, *, /) +const { + x () } \ No newline at end of file diff --git a/src/scanner/testdata/errors/MissingExpression.q b/src/scanner/testdata/errors/MissingExpression.q new file mode 100644 index 0000000..8ccf884 --- /dev/null +++ b/src/scanner/testdata/errors/MissingExpression.q @@ -0,0 +1,3 @@ +const { + x +} \ No newline at end of file diff --git a/src/scanner/testdata/errors/UnknownImport.q b/src/scanner/testdata/errors/UnknownImport.q new file mode 100644 index 0000000..208547f --- /dev/null +++ b/src/scanner/testdata/errors/UnknownImport.q @@ -0,0 +1,5 @@ +import unknown + +main() { + unknown.func() +} \ No newline at end of file -- 2.51.2