php5 test coverage
This commit is contained in:
parent
75f952ad03
commit
30b6533864
74
diff
74
diff
@ -434,51 +434,88 @@
|
||||
434
|
||||
435
|
||||
436
|
||||
-437
|
||||
438
|
||||
439
|
||||
440
|
||||
441
|
||||
-442
|
||||
443
|
||||
444
|
||||
-445
|
||||
-446
|
||||
-447
|
||||
448
|
||||
-449
|
||||
450
|
||||
-451
|
||||
-452
|
||||
-453
|
||||
454
|
||||
455
|
||||
-456
|
||||
457
|
||||
458
|
||||
-459
|
||||
460
|
||||
-461
|
||||
-463
|
||||
-464
|
||||
462
|
||||
465
|
||||
-466
|
||||
467
|
||||
468
|
||||
469
|
||||
470
|
||||
471
|
||||
-472
|
||||
473
|
||||
474
|
||||
-475
|
||||
476
|
||||
477
|
||||
478
|
||||
-479
|
||||
-480
|
||||
-481
|
||||
482
|
||||
483
|
||||
-484
|
||||
485
|
||||
-486
|
||||
-487
|
||||
488
|
||||
489
|
||||
490
|
||||
-491
|
||||
492
|
||||
493
|
||||
-494
|
||||
-495
|
||||
496
|
||||
497
|
||||
-498
|
||||
499
|
||||
-500
|
||||
-501
|
||||
503
|
||||
-502
|
||||
505
|
||||
-504
|
||||
506
|
||||
-507
|
||||
508
|
||||
509
|
||||
510
|
||||
511
|
||||
-512
|
||||
-513
|
||||
-514
|
||||
-515
|
||||
516
|
||||
517
|
||||
-518
|
||||
519
|
||||
520
|
||||
521
|
||||
@ -490,41 +527,4 @@
|
||||
528
|
||||
|
||||
|
||||
-437
|
||||
-442
|
||||
-445
|
||||
-446
|
||||
-447
|
||||
-449
|
||||
-451
|
||||
-452
|
||||
-453
|
||||
-456
|
||||
-459
|
||||
-461
|
||||
-463
|
||||
-464
|
||||
-466
|
||||
-472
|
||||
-475
|
||||
-479
|
||||
-480
|
||||
-481
|
||||
-484
|
||||
-486
|
||||
-487
|
||||
-491
|
||||
-494
|
||||
-495
|
||||
-498
|
||||
-500
|
||||
-501
|
||||
-502
|
||||
-504
|
||||
-507
|
||||
-512
|
||||
-513
|
||||
-514
|
||||
-515
|
||||
-518
|
||||
-527
|
@ -14,6 +14,29 @@ import (
|
||||
"github.com/z7zmey/php-parser/php7"
|
||||
)
|
||||
|
||||
func TestEmptyList(t *testing.T) {
|
||||
src := `<? list() = $b;`
|
||||
|
||||
expected := &stmt.StmtList{
|
||||
Stmts: []node.Node{
|
||||
&stmt.Expression{
|
||||
Expr: &assign_op.Assign{
|
||||
Variable: &expr.List{
|
||||
Items: []node.Node{},
|
||||
},
|
||||
Expression: &expr.Variable{VarName: &node.Identifier{Value: "$b"}},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
actual, _, _ := php7.Parse(bytes.NewBufferString(src), "test.php")
|
||||
assertEqual(t, expected, actual)
|
||||
|
||||
actual, _, _ = php5.Parse(bytes.NewBufferString(src), "test.php")
|
||||
assertEqual(t, expected, actual)
|
||||
}
|
||||
|
||||
func TestList(t *testing.T) {
|
||||
src := `<? list($a) = $b;`
|
||||
|
||||
|
374
php5/php5.go
374
php5/php5.go
File diff suppressed because it is too large
Load Diff
@ -3432,7 +3432,13 @@ assignment_list:
|
||||
assignment_list ',' assignment_list_element
|
||||
{ fmt.Println("487"); $$ = append($1, $3) }
|
||||
| assignment_list_element
|
||||
{ fmt.Println("488"); $$ = []node.Node{$1} }
|
||||
{
|
||||
if $1 == nil {
|
||||
$$ = []node.Node{}
|
||||
} else {
|
||||
fmt.Println("488"); $$ = []node.Node{$1}
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
|
@ -86,6 +86,11 @@ CAD;
|
||||
__TRAIT__;
|
||||
|
||||
"test $var";
|
||||
"test $var[1]";
|
||||
"test $var[1234567890123456789012345678901234567890]";
|
||||
"test $var[bar]";
|
||||
"test $var[$bar]";
|
||||
"$foo $bar";
|
||||
"test $foo->bar()";
|
||||
"test ${foo}";
|
||||
"test ${foo[0]}";
|
||||
@ -221,6 +226,8 @@ CAD;
|
||||
array();
|
||||
array(1);
|
||||
array(1=>1, &$b,);
|
||||
array(3 =>&$b);
|
||||
array(&$b, 1=>1, 1, 3 =>&$b);
|
||||
~$a;
|
||||
!$a;
|
||||
|
||||
@ -236,6 +243,7 @@ CAD;
|
||||
\foo;
|
||||
|
||||
empty($a);
|
||||
empty(Foo);
|
||||
@$a;
|
||||
eval($a);
|
||||
exit;
|
||||
@ -262,7 +270,9 @@ CAD;
|
||||
$a instanceof \Foo;
|
||||
|
||||
isset($a, $b);
|
||||
list($a) = $b;
|
||||
isset(Foo);
|
||||
list() = $b;
|
||||
list($a, $b) = $b;
|
||||
list($a[]) = $b;
|
||||
list(list($a)) = $b;
|
||||
|
||||
@ -272,6 +282,9 @@ CAD;
|
||||
new \Foo();
|
||||
print($a);
|
||||
$a->foo;
|
||||
$a->foo[1];
|
||||
$a->foo->bar->baz()->quux[0];
|
||||
$a->foo()[1][1];
|
||||
` + "`cmd $a`;" + `
|
||||
` + "`cmd`;" + `
|
||||
` + "``;" + `
|
||||
@ -294,6 +307,7 @@ CAD;
|
||||
-$a;
|
||||
+$a;
|
||||
$$a;
|
||||
$$$a;
|
||||
yield;
|
||||
yield $a;
|
||||
yield $a => $b;
|
||||
@ -366,6 +380,7 @@ CAD;
|
||||
static::foo;
|
||||
|
||||
new $foo;
|
||||
new $foo::$bar;
|
||||
new $a->b[0];
|
||||
new $a->b{$b ?: null}->$c->d[0];static $a = [1][0];
|
||||
|
||||
@ -410,6 +425,16 @@ CAD;
|
||||
static $a = array();
|
||||
static $a = array(1 => 1, 2);
|
||||
static $a = [1, 2 => 2][0];
|
||||
|
||||
if (yield 1) {}
|
||||
Foo::$$bar;
|
||||
|
||||
$foo();
|
||||
$foo()[0][0];
|
||||
$a{$b};
|
||||
${$a};
|
||||
$foo::{$bar}();
|
||||
$foo::bar;
|
||||
`
|
||||
|
||||
expectedParams := []node.Node{
|
||||
@ -611,6 +636,59 @@ CAD;
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &scalar.Encapsed{
|
||||
Parts: []node.Node{
|
||||
&scalar.EncapsedStringPart{Value: "test "},
|
||||
&expr.ArrayDimFetch{
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "$var"}},
|
||||
Dim: &scalar.Lnumber{Value: "1"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &scalar.Encapsed{
|
||||
Parts: []node.Node{
|
||||
&scalar.EncapsedStringPart{Value: "test "},
|
||||
&expr.ArrayDimFetch{
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "$var"}},
|
||||
Dim: &scalar.String{Value: "1234567890123456789012345678901234567890"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &scalar.Encapsed{
|
||||
Parts: []node.Node{
|
||||
&scalar.EncapsedStringPart{Value: "test "},
|
||||
&expr.ArrayDimFetch{
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "$var"}},
|
||||
Dim: &scalar.String{Value: "bar"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &scalar.Encapsed{
|
||||
Parts: []node.Node{
|
||||
&scalar.EncapsedStringPart{Value: "test "},
|
||||
&expr.ArrayDimFetch{
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "$var"}},
|
||||
Dim: &expr.Variable{VarName: &node.Identifier{Value: "$bar"}},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &scalar.Encapsed{
|
||||
Parts: []node.Node{
|
||||
&expr.Variable{VarName: &node.Identifier{Value: "$foo"}},
|
||||
&scalar.EncapsedStringPart{Value: " "},
|
||||
&expr.Variable{VarName: &node.Identifier{Value: "$bar"}},
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &scalar.Encapsed{
|
||||
Parts: []node.Node{
|
||||
@ -1860,6 +1938,41 @@ CAD;
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.Array{
|
||||
Items: []node.Node{
|
||||
&expr.ArrayItem{
|
||||
ByRef: true,
|
||||
Key: &scalar.Lnumber{Value: "3"},
|
||||
Val: &expr.Variable{VarName: &node.Identifier{Value: "$b"}},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.Array{
|
||||
Items: []node.Node{
|
||||
&expr.ArrayItem{
|
||||
ByRef: true,
|
||||
Val: &expr.Variable{VarName: &node.Identifier{Value: "$b"}},
|
||||
},
|
||||
&expr.ArrayItem{
|
||||
ByRef: false,
|
||||
Key: &scalar.Lnumber{Value: "1"},
|
||||
Val: &scalar.Lnumber{Value: "1"},
|
||||
},
|
||||
&expr.ArrayItem{
|
||||
ByRef: false,
|
||||
Val: &scalar.Lnumber{Value: "1"},
|
||||
},
|
||||
&expr.ArrayItem{
|
||||
ByRef: true,
|
||||
Key: &scalar.Lnumber{Value: "3"},
|
||||
Val: &expr.Variable{VarName: &node.Identifier{Value: "$b"}},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.BitwiseNot{
|
||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||
@ -1988,6 +2101,13 @@ CAD;
|
||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.Empty{
|
||||
Expr: &expr.ConstFetch{
|
||||
Constant: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}},
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.ErrorSuppress{
|
||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||
@ -2156,6 +2276,23 @@ CAD;
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.Isset{
|
||||
Variables: []node.Node{
|
||||
&expr.ConstFetch{
|
||||
Constant: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &assign_op.Assign{
|
||||
Variable: &expr.List{
|
||||
Items: []node.Node{},
|
||||
},
|
||||
Expression: &expr.Variable{VarName: &node.Identifier{Value: "$b"}},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &assign_op.Assign{
|
||||
Variable: &expr.List{
|
||||
@ -2164,6 +2301,10 @@ CAD;
|
||||
ByRef: false,
|
||||
Val: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||
},
|
||||
&expr.ArrayItem{
|
||||
ByRef: false,
|
||||
Val: &expr.Variable{VarName: &node.Identifier{Value: "$b"}},
|
||||
},
|
||||
},
|
||||
},
|
||||
Expression: &expr.Variable{VarName: &node.Identifier{Value: "$b"}},
|
||||
@ -2251,6 +2392,47 @@ CAD;
|
||||
Property: &node.Identifier{Value: "foo"},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.ArrayDimFetch{
|
||||
Variable: &expr.PropertyFetch{
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||
Property: &node.Identifier{Value: "foo"},
|
||||
},
|
||||
Dim: &scalar.Lnumber{Value: "1"},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.ArrayDimFetch{
|
||||
Variable: &expr.PropertyFetch{
|
||||
Variable: &expr.MethodCall{
|
||||
Variable: &expr.PropertyFetch{
|
||||
Variable: &expr.PropertyFetch{
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||
Property: &node.Identifier{Value: "foo"},
|
||||
},
|
||||
Property: &node.Identifier{Value: "bar"},
|
||||
},
|
||||
Method: &node.Identifier{Value: "baz"},
|
||||
Arguments: []node.Node{},
|
||||
},
|
||||
Property: &node.Identifier{Value: "quux"},
|
||||
},
|
||||
Dim: &scalar.Lnumber{Value: "0"},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.ArrayDimFetch{
|
||||
Variable: &expr.ArrayDimFetch{
|
||||
Variable: &expr.MethodCall{
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||
Method: &node.Identifier{Value: "foo"},
|
||||
Arguments: []node.Node{},
|
||||
},
|
||||
Dim: &scalar.Lnumber{Value: "1"},
|
||||
},
|
||||
Dim: &scalar.Lnumber{Value: "1"},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.ShellExec{
|
||||
Parts: []node.Node{
|
||||
@ -2430,6 +2612,9 @@ CAD;
|
||||
&stmt.Expression{
|
||||
Expr: &expr.Variable{VarName: &expr.Variable{VarName: &node.Identifier{Value: "$a"}}},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.Variable{VarName: &expr.Variable{VarName: &expr.Variable{VarName: &node.Identifier{Value: "$a"}}}},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.Yield{},
|
||||
},
|
||||
@ -2896,6 +3081,14 @@ CAD;
|
||||
Class: &expr.Variable{VarName: &node.Identifier{Value: "$foo"}},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.New{
|
||||
Class: &expr.StaticPropertyFetch{
|
||||
Class: &expr.Variable{VarName: &node.Identifier{Value: "$foo"}},
|
||||
Property: &expr.Variable{VarName: &node.Identifier{Value: "$bar"}},
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.New{
|
||||
Class: &expr.ArrayDimFetch{
|
||||
@ -3408,7 +3601,6 @@ CAD;
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
&stmt.Static{
|
||||
Vars: []node.Node{
|
||||
&stmt.StaticVar{
|
||||
@ -3432,6 +3624,60 @@ CAD;
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.If{
|
||||
Cond: &expr.Yield{
|
||||
Value: &scalar.Lnumber{Value: "1"},
|
||||
},
|
||||
Stmt: &stmt.StmtList{
|
||||
Stmts: []node.Node{},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.StaticPropertyFetch{
|
||||
Class: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}},
|
||||
Property: &expr.Variable{VarName: &expr.Variable{VarName: &node.Identifier{Value: "$bar"}}},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.FunctionCall{
|
||||
Function: &expr.Variable{VarName: &node.Identifier{Value: "$foo"}},
|
||||
Arguments: []node.Node{},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.ArrayDimFetch{
|
||||
Variable: &expr.ArrayDimFetch{
|
||||
Variable: &expr.FunctionCall{
|
||||
Function: &expr.Variable{VarName: &node.Identifier{Value: "$foo"}},
|
||||
Arguments: []node.Node{},
|
||||
},
|
||||
Dim: &scalar.Lnumber{Value: "0"},
|
||||
},
|
||||
Dim: &scalar.Lnumber{Value: "0"},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.ArrayDimFetch{
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||
Dim: &expr.Variable{VarName: &node.Identifier{Value: "$b"}},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.Variable{VarName: &expr.Variable{VarName: &node.Identifier{Value: "$a"}}},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.StaticCall{
|
||||
Class: &expr.Variable{VarName: &node.Identifier{Value: "$foo"}},
|
||||
Call: &expr.Variable{VarName: &node.Identifier{Value: "$bar"}},
|
||||
Arguments: []node.Node{},
|
||||
},
|
||||
},
|
||||
&stmt.Expression{
|
||||
Expr: &expr.ClassConstFetch{
|
||||
Class: &expr.Variable{VarName: &node.Identifier{Value: "$foo"}},
|
||||
ConstantName: &node.Identifier{Value: "bar"},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user