aboutsummaryrefslogtreecommitdiff
path: root/parser/parser_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'parser/parser_test.go')
-rw-r--r--parser/parser_test.go51
1 files changed, 24 insertions, 27 deletions
diff --git a/parser/parser_test.go b/parser/parser_test.go
index cd38144..a9754f5 100644
--- a/parser/parser_test.go
+++ b/parser/parser_test.go
@@ -8,40 +8,37 @@ import (
)
func TestLetStatements(t *testing.T) {
- const input string = `
- let x = 5;
- let y = 10;
- let foobar = 838383;
- `
-
- var l *lexer.Lexer = lexer.New(input)
- var p *Parser = New(l)
-
- var program *ast.Program = p.ParseProgram()
- checkParserErrors(t, p)
-
- if program == nil {
- t.Fatalf("ParseProgram() returned nil")
+ tests := []struct {
+ input string
+ expectedIdentifier string
+ expectedValue interface{}
+ } {
+ {"let x = 5;", "x", 5},
+ {"let y = true;", "y", true},
+ {"let foobar = y;", "foobar", "y"},
}
- if len(program.Statements) != 3 {
- t.Fatalf("program.Statements does not contain 3 statements. got=%d", len(program.Statements))
- }
+ for _, tt := range tests {
+ var l *lexer.Lexer = lexer.New(tt.input)
+ var p *Parser = New(l)
+ var program *ast.Program = p.ParseProgram()
+ checkParserErrors(t, p)
- var tests = []struct {
- expectedIdentifier string
- }{
- {"x"},
- {"y"},
- {"foobar"},
- }
+ if len(program.Statements) != 1 {
+ t.Fatalf("program.Statements does not contain 1 statements. got=%d", len(program.Statements))
+ }
- for i, tt := range tests {
- var stmt ast.Statement = program.Statements[i]
+ stmt := program.Statements[0]
if !testLetStatement(t, stmt, tt.expectedIdentifier) {
return
}
+
+ val := stmt.(*ast.LetStatement).Value
+
+ if !testLiteralExpression(t, val, tt.expectedValue) {
+ return
+ }
}
}
@@ -196,7 +193,7 @@ func testInfixExpression(
return true
}
-// Identifier expression tests.
+// Identifier expression tests.f
func TestIdentifierExpression(t *testing.T) {
var input string = "foobar;"