package scalar_test import ( "testing" "gotest.tools/assert" "github.com/z7zmey/php-parser/node/expr" "github.com/z7zmey/php-parser/position" "github.com/z7zmey/php-parser/node" "github.com/z7zmey/php-parser/node/scalar" "github.com/z7zmey/php-parser/node/stmt" "github.com/z7zmey/php-parser/php5" "github.com/z7zmey/php-parser/php7" ) func TestSimpleVar(t *testing.T) { src := `bar()";` expected := &node.Root{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 3, EndPos: 22, }, Stmts: []node.Node{ &stmt.Expression{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 3, EndPos: 22, }, Expr: &scalar.Encapsed{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 3, EndPos: 21, }, Parts: []node.Node{ &scalar.EncapsedStringPart{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 4, EndPos: 9, }, Value: "test ", }, &expr.PropertyFetch{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 9, EndPos: 18, }, Variable: &expr.Variable{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 9, EndPos: 13, }, VarName: &node.Identifier{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 9, EndPos: 13, }, Value: "foo", }, }, Property: &node.Identifier{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 15, EndPos: 18, }, Value: "bar", }, }, &scalar.EncapsedStringPart{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 18, EndPos: 20, }, Value: "()", }, }, }, }, }, } php7parser := php7.NewParser([]byte(src), "7.4") php7parser.Parse() actual := php7parser.GetRootNode() assert.DeepEqual(t, expected, actual) php5parser := php5.NewParser([]byte(src), "5.6") php5parser.Parse() actual = php5parser.GetRootNode() assert.DeepEqual(t, expected, actual) } func TestDollarOpenCurlyBraces(t *testing.T) { src := `bar()}";` expected := &node.Root{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 3, EndPos: 24, }, Stmts: []node.Node{ &stmt.Expression{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 3, EndPos: 24, }, Expr: &scalar.Encapsed{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 3, EndPos: 23, }, Parts: []node.Node{ &scalar.EncapsedStringPart{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 4, EndPos: 9, }, Value: "test ", }, &expr.MethodCall{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 10, EndPos: 21, }, Variable: &expr.Variable{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 10, EndPos: 14, }, VarName: &node.Identifier{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 10, EndPos: 14, }, Value: "foo", }, }, Method: &node.Identifier{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 16, EndPos: 19, }, Value: "bar", }, ArgumentList: &node.ArgumentList{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 19, EndPos: 21, }, }, }, }, }, }, }, } php7parser := php7.NewParser([]byte(src), "7.4") php7parser.Parse() actual := php7parser.GetRootNode() assert.DeepEqual(t, expected, actual) php5parser := php5.NewParser([]byte(src), "5.6") php5parser.Parse() actual = php5parser.GetRootNode() assert.DeepEqual(t, expected, actual) }