package binary_op_test import ( "bytes" "reflect" "testing" "github.com/kylelemons/godebug/pretty" "github.com/z7zmey/php-parser/node" "github.com/z7zmey/php-parser/node/expr" "github.com/z7zmey/php-parser/node/expr/binary_op" "github.com/z7zmey/php-parser/node/stmt" "github.com/z7zmey/php-parser/php5" "github.com/z7zmey/php-parser/php7" ) func assertEqual(t *testing.T, expected interface{}, actual interface{}) { if !reflect.DeepEqual(expected, actual) { diff := pretty.Compare(expected, actual) if diff != "" { t.Errorf("diff: (-expected +actual)\n%s", diff) } else { t.Errorf("expected and actual are not equal\n") } } } func TestBitwiseAnd(t *testing.T) { src := `= $b;` expected := &stmt.StmtList{ Stmts: []node.Node{ &stmt.Expression{ Expr: &binary_op.GreaterOrEqual{ BinaryOp: binary_op.BinaryOp{ Left: &expr.Variable{VarName: &node.Identifier{Value: "$a"}}, Right: &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 TestGreater(t *testing.T) { src := ` $b;` expected := &stmt.StmtList{ Stmts: []node.Node{ &stmt.Expression{ Expr: &binary_op.Greater{ BinaryOp: binary_op.BinaryOp{ Left: &expr.Variable{VarName: &node.Identifier{Value: "$a"}}, Right: &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 TestIdentical(t *testing.T) { src := `> $b;` expected := &stmt.StmtList{ Stmts: []node.Node{ &stmt.Expression{ Expr: &binary_op.ShiftRight{ BinaryOp: binary_op.BinaryOp{ Left: &expr.Variable{VarName: &node.Identifier{Value: "$a"}}, Right: &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 TestSmallerOrEqual(t *testing.T) { src := ` $b;` expected := &stmt.StmtList{ Stmts: []node.Node{ &stmt.Expression{ Expr: &binary_op.Spaceship{ BinaryOp: binary_op.BinaryOp{ Left: &expr.Variable{VarName: &node.Identifier{Value: "$a"}}, Right: &expr.Variable{VarName: &node.Identifier{Value: "$b"}}, }, }, }, }, } actual, _, _ := php7.Parse(bytes.NewBufferString(src), "test.php") assertEqual(t, expected, actual) }