@@ -4,20 +4,27 @@ var parser = require("./main");
44 * Check precedence by using parenthesis on node B
55 */
66var checkPrecedence = function ( a , b ) {
7- if ( ! a || ! b )
7+ if ( ! a && ! b )
88 return false ;
9- for ( var k in b ) {
9+ for ( let k in b ) {
1010 if ( k === 'parenthesizedExpression' ) continue ;
1111 if ( b . hasOwnProperty ( k ) ) {
1212 if ( ! a . hasOwnProperty ( k ) )
13- return false ;
14- if ( typeof b [ k ] === "object" ) {
13+ return expect ( a ) . toHaveProperty ( k , b [ k ] ) ;
14+ if ( typeof b [ k ] === "object" && b [ k ] !== null ) {
1515 checkPrecedence ( a [ k ] , b [ k ] ) ;
1616 } else {
1717 expect ( a [ k ] ) . toEqual ( b [ k ] ) ;
1818 }
1919 }
2020 }
21+ for ( let k in a ) {
22+ if ( k === 'parenthesizedExpression' ) continue ;
23+ if ( a . hasOwnProperty ( k ) ) {
24+ if ( ! b . hasOwnProperty ( k ) )
25+ return expect ( b ) . toHaveProperty ( k , a [ k ] ) ;
26+ }
27+ }
2128 return true ;
2229} ;
2330
@@ -131,6 +138,18 @@ describe("Test precedence", function() {
131138 it ( "test silent node / ret if" , function ( ) {
132139 shouldBeSame ( "@$i == true ? @$foo : @$bar;" , "@($i) == true ? @($foo) : @($bar);" ) ;
133140 } ) ;
141+ it ( "test silent node - bugfix #355" , function ( ) {
142+ shouldBeSame (
143+ "echo 'pre' . (@$_GET['foo'] === 'bar' ? 'ok' : 'ko') . 'post'" ,
144+ "echo 'pre' . (@($_GET['foo']) === 'bar' ? 'ok' : 'ko') . 'post'"
145+ ) ;
146+ } ) ;
147+ it ( "test silent node - bugfix #356" , function ( ) {
148+ shouldBeSame (
149+ "@$var += 10" ,
150+ "@($var += 10)"
151+ ) ;
152+ } ) ;
134153 it ( "test silent node / cast" , function ( ) {
135154 shouldBeSame ( "@(int)$i + 1;" , "@((int)$i) + 1;" ) ;
136155 } ) ;
0 commit comments