package tests_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" ) var errs = []struct { File string ExpectedError error }{ {"EmptySwitch.q", errors.EmptySwitch}, {"ExpectedFunctionDefinition.q", errors.ExpectedFunctionDefinition}, {"ExpectedFunctionName.q", errors.ExpectedFunctionName}, {"ExpectedFunctionName2.q", errors.ExpectedFunctionName}, {"ExpectedFunctionParameters.q", errors.ExpectedFunctionParameters}, {"ExpectedIfBeforeElse.q", errors.ExpectedIfBeforeElse}, {"ExpectedIfBeforeElse2.q", errors.ExpectedIfBeforeElse}, {"InvalidInstructionIdentifier.q", &errors.InvalidInstruction{Instruction: "abc"}}, {"InvalidInstructionNumber.q", &errors.InvalidInstruction{Instruction: "123"}}, {"InvalidInstructionExpression.q", &errors.InvalidInstruction{Instruction: "+"}}, {"InvalidExpression.q", errors.InvalidExpression}, {"InvalidCharacter.q", &errors.InvalidCharacter{Character: "@"}}, {"InvalidCharacter2.q", &errors.InvalidCharacter{Character: "@"}}, {"InvalidCharacter3.q", &errors.InvalidCharacter{Character: "@"}}, {"InvalidCharacter4.q", &errors.InvalidCharacter{Character: "+++"}}, {"MissingBlockEnd.q", errors.MissingBlockEnd}, {"MissingBlockEnd2.q", errors.MissingBlockEnd}, {"MissingBlockStart.q", errors.MissingBlockStart}, {"MissingGroupEnd.q", errors.MissingGroupEnd}, {"MissingGroupStart.q", errors.MissingGroupStart}, {"MissingMainFunction.q", errors.MissingMainFunction}, {"MissingOperand.q", errors.MissingOperand}, {"MissingOperand2.q", errors.MissingOperand}, {"VariableAlreadyExists.q", &errors.VariableAlreadyExists{Name: "x"}}, {"TypeMismatch.q", &errors.TypeMismatch{Expected: "Pointer", Encountered: "Int64", ParameterName: "p"}}, {"UnknownFunction.q", &errors.UnknownFunction{Name: "unknown"}}, {"UnknownFunction2.q", &errors.UnknownFunction{Name: "f"}}, {"UnknownIdentifier.q", &errors.UnknownIdentifier{Name: "x"}}, {"UnknownIdentifier2.q", &errors.UnknownIdentifier{Name: "x"}}, {"UnknownIdentifier3.q", &errors.UnknownIdentifier{Name: "x"}}, {"UnknownPackage.q", &errors.UnknownPackage{Name: "sys"}}, {"UnusedImport.q", &errors.UnusedImport{Package: "sys"}}, {"UnusedVariable.q", &errors.UnusedVariable{Name: "x"}}, } func TestErrors(t *testing.T) { for _, test := range errs { name := strings.TrimSuffix(test.File, ".q") t.Run(name, func(t *testing.T) { b := build.New(filepath.Join("errors", test.File)) _, err := b.Run() assert.NotNil(t, err) assert.Contains(t, err.Error(), test.ExpectedError.Error()) }) } }