package parser

import (
	"testing"

	"code.osinet.fr/fgm/waiig15/ast"
	"code.osinet.fr/fgm/waiig15/lexer"
)

func TestIntegerLiteralExpression(t *testing.T) {
	input := "5;"

	l := lexer.New(input)
	p := New(l)

	program := p.ParseProgram()
	checkParserErrors(t, p)

	if len(program.Statements) != 1 {
		t.Fatalf("program does not have 1 statement. got=%d",
			len(program.Statements))
	}

	stmt, ok := program.Statements[0].(*ast.ExpressionStatement)
	if !ok {
		t.Fatalf("program.Statements[0] is not *ast.ExpressionStatement. got=%T",
			program.Statements[0])
	}

	literal, ok := stmt.Expression.(*ast.IntegerLiteral)
	if !ok {
		t.Fatalf("expression not *ast.IntegerLiteral. got=%T",
			stmt.Expression)
	}

	if literal.Value != 5 {
		t.Errorf("literal.Value not %s. got=%s", "5",
			literal.TokenLiteral())
	}
}