118 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package expr_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/stmt"
 | |
| 	"github.com/z7zmey/php-parser/php5"
 | |
| 	"github.com/z7zmey/php-parser/php7"
 | |
| )
 | |
| 
 | |
| func TestForeachWithRef(t *testing.T) {
 | |
| 	t.Helper()
 | |
| 	src := `<? foreach ($a as $k => &$v) {}`
 | |
| 
 | |
| 	expected := &node.Root{
 | |
| 		Position: &position.Position{
 | |
| 			StartLine: 1,
 | |
| 			EndLine:   1,
 | |
| 			StartPos:  3,
 | |
| 			EndPos:    31,
 | |
| 		},
 | |
| 		Stmts: []node.Node{
 | |
| 			&stmt.Foreach{
 | |
| 				Position: &position.Position{
 | |
| 					StartLine: 1,
 | |
| 					EndLine:   1,
 | |
| 					StartPos:  3,
 | |
| 					EndPos:    31,
 | |
| 				},
 | |
| 				Expr: &expr.Variable{
 | |
| 					Position: &position.Position{
 | |
| 						StartLine: 1,
 | |
| 						EndLine:   1,
 | |
| 						StartPos:  12,
 | |
| 						EndPos:    14,
 | |
| 					},
 | |
| 					VarName: &node.Identifier{
 | |
| 						Position: &position.Position{
 | |
| 							StartLine: 1,
 | |
| 							EndLine:   1,
 | |
| 							StartPos:  12,
 | |
| 							EndPos:    14,
 | |
| 						},
 | |
| 						Value: "a",
 | |
| 					},
 | |
| 				},
 | |
| 				Key: &expr.Variable{
 | |
| 					Position: &position.Position{
 | |
| 						StartLine: 1,
 | |
| 						EndLine:   1,
 | |
| 						StartPos:  18,
 | |
| 						EndPos:    20,
 | |
| 					},
 | |
| 					VarName: &node.Identifier{
 | |
| 						Position: &position.Position{
 | |
| 							StartLine: 1,
 | |
| 							EndLine:   1,
 | |
| 							StartPos:  18,
 | |
| 							EndPos:    20,
 | |
| 						},
 | |
| 						Value: "k",
 | |
| 					},
 | |
| 				},
 | |
| 				Variable: &expr.Reference{
 | |
| 					Position: &position.Position{
 | |
| 						StartLine: 1,
 | |
| 						EndLine:   1,
 | |
| 						StartPos:  24,
 | |
| 						EndPos:    27,
 | |
| 					},
 | |
| 					Variable: &expr.Variable{
 | |
| 						Position: &position.Position{
 | |
| 							StartLine: 1,
 | |
| 							EndLine:   1,
 | |
| 							StartPos:  25,
 | |
| 							EndPos:    27,
 | |
| 						},
 | |
| 						VarName: &node.Identifier{
 | |
| 							Position: &position.Position{
 | |
| 								StartLine: 1,
 | |
| 								EndLine:   1,
 | |
| 								StartPos:  25,
 | |
| 								EndPos:    27,
 | |
| 							},
 | |
| 							Value: "v",
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 				Stmt: &stmt.StmtList{
 | |
| 					Position: &position.Position{
 | |
| 						StartLine: 1,
 | |
| 						EndLine:   1,
 | |
| 						StartPos:  29,
 | |
| 						EndPos:    31,
 | |
| 					},
 | |
| 					Stmts: []node.Node{},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	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)
 | |
| }
 |