From 864c9c7b43c533ea785c9518a5d7b5dade5082a5 Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Sat, 15 Jun 2024 20:25:37 +0200 Subject: [PATCH] Added more tests --- main_test.go | 3 +++ src/build/Function.go | 10 +++++----- src/errors/CompileErrors.go | 3 ++- src/errors/InvalidInstruction.go | 13 +++++++++++++ tests/errors/InvalidInstruction-Identifier.q | 3 +++ tests/errors/InvalidInstruction-Number.q | 3 +++ tests/errors/MissingAssignValue.q | 3 +++ 7 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 src/errors/InvalidInstruction.go create mode 100644 tests/errors/InvalidInstruction-Identifier.q create mode 100644 tests/errors/InvalidInstruction-Number.q create mode 100644 tests/errors/MissingAssignValue.q diff --git a/main_test.go b/main_test.go index d7c4539..be2aa55 100644 --- a/main_test.go +++ b/main_test.go @@ -18,6 +18,9 @@ func TestErrors(t *testing.T) { {"ExpectedFunctionDefinition.q", errors.ExpectedFunctionDefinition}, {"ExpectedFunctionName.q", errors.ExpectedFunctionName}, {"ExpectedFunctionParameters.q", errors.ExpectedFunctionParameters}, + {"InvalidInstruction-Identifier.q", &errors.InvalidInstruction{Instruction: "abc"}}, + {"InvalidInstruction-Number.q", &errors.InvalidInstruction{Instruction: "123"}}, + {"MissingAssignValue.q", errors.MissingAssignValue}, {"MissingBlockEnd.q", errors.MissingBlockEnd}, {"MissingBlockStart.q", errors.MissingBlockStart}, {"MissingGroupEnd.q", errors.MissingGroupEnd}, diff --git a/src/build/Function.go b/src/build/Function.go index cc5e787..ce8660c 100644 --- a/src/build/Function.go +++ b/src/build/Function.go @@ -113,17 +113,17 @@ func (f *Function) CompileInstruction(line token.List) error { return nil } - if line[0].Kind == token.Identifier { - if len(line) < 2 { - return fmt.Errorf("error to be implemented") - } + if len(line) < 2 { + return errors.New(&errors.InvalidInstruction{Instruction: line[0].Text()}, f.File, line[0].Position) + } + if line[0].Kind == token.Identifier { if line[1].Kind == token.Define { name := line[0].Text() value := line[2:] if len(value) == 0 { - return errors.New(errors.MissingAssignmentValue, f.File, line[1].After()) + return errors.New(errors.MissingAssignValue, f.File, line[1].After()) } if config.Verbose { diff --git a/src/errors/CompileErrors.go b/src/errors/CompileErrors.go index 2c5ac46..9f43de2 100644 --- a/src/errors/CompileErrors.go +++ b/src/errors/CompileErrors.go @@ -1,5 +1,6 @@ package errors var ( - MissingAssignmentValue = &Base{"Missing assignment value"} + InvalidStatement = &Base{"Invalid statement"} + MissingAssignValue = &Base{"Missing assignment value"} ) diff --git a/src/errors/InvalidInstruction.go b/src/errors/InvalidInstruction.go new file mode 100644 index 0000000..bb6904b --- /dev/null +++ b/src/errors/InvalidInstruction.go @@ -0,0 +1,13 @@ +package errors + +import "fmt" + +// InvalidInstruction error is created when an instruction is not valid. +type InvalidInstruction struct { + Instruction string +} + +// Error generates the string representation. +func (err *InvalidInstruction) Error() string { + return fmt.Sprintf("Invalid instruction '%s'", err.Instruction) +} diff --git a/tests/errors/InvalidInstruction-Identifier.q b/tests/errors/InvalidInstruction-Identifier.q new file mode 100644 index 0000000..54ff7db --- /dev/null +++ b/tests/errors/InvalidInstruction-Identifier.q @@ -0,0 +1,3 @@ +main() { + abc +} \ No newline at end of file diff --git a/tests/errors/InvalidInstruction-Number.q b/tests/errors/InvalidInstruction-Number.q new file mode 100644 index 0000000..5a97c64 --- /dev/null +++ b/tests/errors/InvalidInstruction-Number.q @@ -0,0 +1,3 @@ +main() { + 123 +} \ No newline at end of file diff --git a/tests/errors/MissingAssignValue.q b/tests/errors/MissingAssignValue.q new file mode 100644 index 0000000..ae9e1eb --- /dev/null +++ b/tests/errors/MissingAssignValue.q @@ -0,0 +1,3 @@ +main() { + a := +} \ No newline at end of file