Chris@0: pass = new PassableByReferencePass(); Chris@0: $this->traverser = new NodeTraverser(); Chris@0: $this->traverser->addVisitor($this->pass); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider invalidStatements Chris@0: * @expectedException \Psy\Exception\FatalErrorException Chris@0: */ Chris@0: public function testProcessStatementFails($code) Chris@0: { Chris@0: $stmts = $this->parse($code); Chris@0: $this->traverser->traverse($stmts); Chris@0: } Chris@0: Chris@0: public function invalidStatements() Chris@0: { Chris@0: return array( Chris@0: array('array_pop(array())'), Chris@0: array('array_pop(array($foo))'), Chris@0: array('array_shift(array())'), Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider validStatements Chris@0: */ Chris@0: public function testProcessStatementPasses($code) Chris@0: { Chris@0: $stmts = $this->parse($code); Chris@0: $this->traverser->traverse($stmts); Chris@12: Chris@12: // @todo a better thing to assert here? Chris@12: $this->assertTrue(true); Chris@0: } Chris@0: Chris@0: public function validStatements() Chris@0: { Chris@0: return array( Chris@0: array('array_pop(json_decode("[]"))'), Chris@0: array('array_pop($foo)'), Chris@0: array('array_pop($foo->bar)'), Chris@0: array('array_pop($foo::baz)'), Chris@0: array('array_pop(Foo::qux)'), Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider validArrayMultisort Chris@0: */ Chris@0: public function testArrayMultisort($code) Chris@0: { Chris@0: $stmts = $this->parse($code); Chris@0: $this->traverser->traverse($stmts); Chris@12: Chris@12: // @todo a better thing to assert here? Chris@12: $this->assertTrue(true); Chris@0: } Chris@0: Chris@0: public function validArrayMultisort() Chris@0: { Chris@0: return array( Chris@0: array('array_multisort($a)'), Chris@0: array('array_multisort($a, $b)'), Chris@0: array('array_multisort($a, SORT_NATURAL, $b)'), Chris@0: array('array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, $b)'), Chris@0: array('array_multisort($a, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE, $b)'), Chris@0: array('array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, SORT_ASC, $b)'), Chris@0: array('array_multisort($a, $b, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE)'), Chris@0: array('array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, $b, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE)'), Chris@0: array('array_multisort($a, 1, $b)'), Chris@0: array('array_multisort($a, 1 + 2, $b)'), Chris@0: array('array_multisort($a, getMultisortFlags(), $b)'), Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider invalidArrayMultisort Chris@0: * @expectedException \Psy\Exception\FatalErrorException Chris@0: */ Chris@0: public function testInvalidArrayMultisort($code) Chris@0: { Chris@0: $stmts = $this->parse($code); Chris@0: $this->traverser->traverse($stmts); Chris@0: } Chris@0: Chris@0: public function invalidArrayMultisort() Chris@0: { Chris@0: return array( Chris@0: array('array_multisort(1)'), Chris@0: array('array_multisort(array(1, 2, 3))'), Chris@0: array('array_multisort($a, SORT_NATURAL, SORT_ASC, SORT_NATURAL, $b)'), Chris@0: ); Chris@0: } Chris@0: }