package main_test import ( "path/filepath" "strings" "testing" "git.akyoto.dev/cli/q/src/build" "git.akyoto.dev/cli/q/src/errors" "git.akyoto.dev/go/assert" ) func TestErrors(t *testing.T) { tests := []struct { File string ExpectedError error }{ {"ExpectedFunctionDefinition.q", errors.ExpectedFunctionDefinition}, {"ExpectedFunctionName.q", errors.ExpectedFunctionName}, {"ExpectedFunctionParameters.q", errors.ExpectedFunctionParameters}, {"InvalidInstructionIdentifier.q", &errors.InvalidInstruction{Instruction: "abc"}}, {"InvalidInstructionNumber.q", &errors.InvalidInstruction{Instruction: "123"}}, {"InvalidExpression.q", errors.InvalidExpression}, {"InvalidOperator.q", &errors.InvalidOperator{Operator: "+++"}}, {"MissingAssignValue.q", errors.MissingAssignValue}, {"MissingBlockEnd.q", errors.MissingBlockEnd}, {"MissingBlockStart.q", errors.MissingBlockStart}, {"MissingGroupEnd.q", errors.MissingGroupEnd}, {"MissingGroupStart.q", errors.MissingGroupStart}, {"MissingMainFunction.q", errors.MissingMainFunction}, {"VariableAlreadyExists.q", &errors.VariableAlreadyExists{Name: "x"}}, {"UnknownIdentifier.q", &errors.UnknownIdentifier{Name: "x"}}, {"UnknownIdentifier2.q", &errors.UnknownIdentifier{Name: "x"}}, } for _, test := range tests { name := strings.TrimSuffix(test.File, ".q") t.Run(name, func(t *testing.T) { b := build.New(filepath.Join("tests", "errors", test.File)) _, err := b.Run() assert.NotNil(t, err) assert.Contains(t, err.Error(), test.ExpectedError.Error()) }) } }