Errors
This commit is contained in:
@@ -139,6 +139,66 @@ func TestReturnStatements(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestErrorHandling(t *testing.T) {
|
||||
tests := []struct {
|
||||
input string
|
||||
expectedMessage string
|
||||
}{
|
||||
{
|
||||
"5 + true;",
|
||||
"type mismatch: INTEGER + BOOLEAN",
|
||||
},
|
||||
{
|
||||
"5 + true; 5;",
|
||||
"type mismatch: INTEGER + BOOLEAN",
|
||||
},
|
||||
{
|
||||
"-true",
|
||||
"unknown operator: -BOOLEAN",
|
||||
},
|
||||
{
|
||||
"true + false;",
|
||||
"unknown operator: BOOLEAN + BOOLEAN",
|
||||
},
|
||||
{
|
||||
"5; true + false; 5",
|
||||
"unknown operator: BOOLEAN + BOOLEAN",
|
||||
},
|
||||
{
|
||||
"if (10 > 1) { true + false; }",
|
||||
"unknown operator: BOOLEAN + BOOLEAN",
|
||||
},
|
||||
{
|
||||
`
|
||||
if (10 > 1) {
|
||||
if (10 > 1) {
|
||||
return true + false;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
`,
|
||||
"unknown operator: BOOLEAN + BOOLEAN",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
evaluated := testEval(tt.input)
|
||||
|
||||
errObj, ok := evaluated.(*object.Error)
|
||||
if !ok {
|
||||
t.Errorf("no error object returned. got=%T(%+v)",
|
||||
evaluated, evaluated)
|
||||
continue
|
||||
}
|
||||
|
||||
if errObj.Message != tt.expectedMessage {
|
||||
t.Errorf("wrong error message. expected=%q, got=%q",
|
||||
tt.expectedMessage, errObj.Message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testEval(input string) object.Object {
|
||||
l := lexer.New(input)
|
||||
p := parser.New(l)
|
||||
|
||||
Reference in New Issue
Block a user