From db2a15515c910ca6bd3f097c5d2c9ca5612a35cc Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 21 Feb 2020 17:57:10 +0100 Subject: extend testing --- evaluator/evaluator_test.go | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) (limited to 'evaluator/evaluator_test.go') diff --git a/evaluator/evaluator_test.go b/evaluator/evaluator_test.go index f8fb53b..606078a 100644 --- a/evaluator/evaluator_test.go +++ b/evaluator/evaluator_test.go @@ -31,7 +31,7 @@ func TestEvalIntegerExpression(t *testing.T) { } for _, tt := range tests { - evaluated := testEval(tt.input) + evaluated := testEval(t, tt.input) testIntegerObject(t, evaluated, tt.expected) } } @@ -67,7 +67,7 @@ func TestEvalBooleanExpression(t *testing.T) { } for _, tt := range tests { - evaluated := testEval(tt.input) + evaluated := testEval(t, tt.input) testBooleanObject(t, evaluated, tt.expected) } } @@ -86,7 +86,7 @@ func TestBangOperator(t *testing.T) { } for _, tt := range tests { - evaluated := testEval(tt.input) + evaluated := testEval(t, tt.input) testBooleanObject(t, evaluated, tt.expected) } } @@ -106,7 +106,7 @@ func TestIfElseExpressions(t *testing.T) { } for _, tt := range tests { - evaluated := testEval(tt.input) + evaluated := testEval(t, tt.input) integer, ok := tt.expected.(int) if ok { testIntegerObject(t, evaluated, int64(integer)) @@ -160,7 +160,7 @@ f(10);`, } for _, tt := range tests { - evaluated := testEval(tt.input) + evaluated := testEval(t, tt.input) testIntegerObject(t, evaluated, tt.expected) } } @@ -229,7 +229,7 @@ if (10 > 1) { } for _, tt := range tests { - evaluated := testEval(tt.input) + evaluated := testEval(t, tt.input) errObj, ok := evaluated.(*object.Error) if !ok { @@ -257,14 +257,14 @@ func TestLetStatements(t *testing.T) { } for _, tt := range tests { - testIntegerObject(t, testEval(tt.input), tt.expected) + testIntegerObject(t, testEval(t, tt.input), tt.expected) } } func TestFunctionObject(t *testing.T) { input := "fn(x) { x + 2; };" - evaluated := testEval(input) + evaluated := testEval(t, input) fn, ok := evaluated.(*object.Function) if !ok { t.Fatalf("object is not Function. got=%T (%+v)", evaluated, evaluated) @@ -300,7 +300,7 @@ func TestFunctionApplication(t *testing.T) { } for _, tt := range tests { - testIntegerObject(t, testEval(tt.input), tt.expected) + testIntegerObject(t, testEval(t, tt.input), tt.expected) } } @@ -318,7 +318,7 @@ let ourFunction = fn(first) { ourFunction(20) + first + second;` - testIntegerObject(t, testEval(input), 70) + testIntegerObject(t, testEval(t, input), 70) } func TestClosures(t *testing.T) { @@ -330,13 +330,13 @@ let newAdder = fn(x) { let addTwo = newAdder(2); addTwo(2);` - testIntegerObject(t, testEval(input), 4) + testIntegerObject(t, testEval(t, input), 4) } func TestStringLiteral(t *testing.T) { input := `"Hello World!"` - evaluated := testEval(input) + evaluated := testEval(t, input) str, ok := evaluated.(*object.String) if !ok { t.Fatalf("object is not String. got=%T (%+v)", evaluated, evaluated) @@ -350,7 +350,7 @@ func TestStringLiteral(t *testing.T) { func TestStringConcatenation(t *testing.T) { input := `"Hello" + " " + "World!"` - evaluated := testEval(input) + evaluated := testEval(t, input) str, ok := evaluated.(*object.String) if !ok { t.Fatalf("object is not String. got=%T (%+v)", evaluated, evaluated) @@ -387,7 +387,7 @@ func TestBuiltinFunctions(t *testing.T) { } for _, tt := range tests { - evaluated := testEval(tt.input) + evaluated := testEval(t, tt.input) switch expected := tt.expected.(type) { case int: @@ -428,7 +428,7 @@ func TestBuiltinFunctions(t *testing.T) { func TestArrayLiterals(t *testing.T) { input := "[1, 2 * 2, 3 + 3]" - evaluated := testEval(input) + evaluated := testEval(t, input) result, ok := evaluated.(*object.Array) if !ok { t.Fatalf("object is not Array. got=%T (%+v)", evaluated, evaluated) @@ -492,7 +492,7 @@ func TestArrayIndexExpressions(t *testing.T) { } for _, tt := range tests { - evaluated := testEval(tt.input) + evaluated := testEval(t, tt.input) integer, ok := tt.expected.(int) if ok { testIntegerObject(t, evaluated, int64(integer)) @@ -513,7 +513,7 @@ func TestHashLiterals(t *testing.T) { false: 6 }` - evaluated := testEval(input) + evaluated := testEval(t, input) result, ok := evaluated.(*object.Hash) if !ok { t.Fatalf("Eval didn't return Hash. got=%T (%+v)", evaluated, evaluated) @@ -578,7 +578,7 @@ func TestHashIndexExpressions(t *testing.T) { } for _, tt := range tests { - evaluated := testEval(tt.input) + evaluated := testEval(t, tt.input) integer, ok := tt.expected.(int) if ok { testIntegerObject(t, evaluated, int64(integer)) @@ -587,7 +587,8 @@ func TestHashIndexExpressions(t *testing.T) { } } } -func testEval(input string) object.Object { +func testEval(t *testing.T, input string) object.Object { + t.Helper() l := lexer.New(input) p := parser.New(l) program := p.ParseProgram() @@ -597,6 +598,7 @@ func testEval(input string) object.Object { } func testIntegerObject(t *testing.T, obj object.Object, expected int64) bool { + t.Helper() result, ok := obj.(*object.Integer) if !ok { t.Errorf("object is not Integer. got=%T (%+v)", obj, obj) @@ -612,6 +614,7 @@ func testIntegerObject(t *testing.T, obj object.Object, expected int64) bool { } func testBooleanObject(t *testing.T, obj object.Object, expected bool) bool { + t.Helper() result, ok := obj.(*object.Boolean) if !ok { t.Errorf("object is not Boolean. got=%T (%+v)", obj, obj) @@ -626,6 +629,7 @@ func testBooleanObject(t *testing.T, obj object.Object, expected bool) bool { } func testNullObject(t *testing.T, obj object.Object) bool { + t.Helper() if obj != NULL { t.Errorf("object is not NULL. got=%T (%+v)", obj, obj) return false -- cgit v1.2.3