| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package parser
- import (
- "github/runnignwater/monkey/ast"
- "github/runnignwater/monkey/lexer"
- "testing"
- )
- /**
- * @Author: simon
- * @Author: ynwdlxm@163.com
- * @Date: 2022/10/2 下午10:40
- * @Desc: LetStatement test case
- */
- func TestLetStatements(t *testing.T) {
- input := `
- let x = 5;
- let y = 10;
- let foo = 838383;
- `
- l := lexer.New(input)
- p := New(l)
- program := p.ParseProgram()
- if program == nil {
- t.Fatalf("ParseProgram() return nil")
- }
- if len(program.Statements) != 3 {
- t.Fatalf("Program.Statements does not contain 3 statements. got=%d", len(program.Statements))
- }
- tests := []struct {
- expectedIdentifies string
- }{
- {"x"},
- {"y"},
- {"foo"},
- }
- for i, tt := range tests {
- stmt := program.Statements[i]
- if !testLetStatement(t, stmt, tt.expectedIdentifies) {
- return
- }
- }
- }
- func testLetStatement(t *testing.T, s ast.Statement, name string) bool {
- if s.TokenLiteral() != "let" {
- t.Errorf("s.TokenLiteral() not 'let'. got =%q", s.TokenLiteral())
- return false
- }
- letStmt, ok := s.(*ast.LetStatement)
- if !ok {
- t.Errorf("s is not *ast.LetStatement. got=%T", s)
- return false
- }
- if letStmt.Name.Value != name {
- t.Errorf("letStmt.Name.Value not '%s'. got=%s", name, letStmt.Name.Value)
- return false
- }
- if letStmt.Name.TokenLiteral() != name {
- t.Errorf("s.name not '%s. got=%s", name, letStmt.Name)
- return false
- }
- return true
- }
|