Chris@13: setPass(new FinalClassPass()); Chris@13: } Chris@13: Chris@13: /** Chris@13: * @dataProvider invalidStatements Chris@13: * @expectedException \Psy\Exception\FatalErrorException Chris@13: */ Chris@13: public function testProcessStatementFails($code) Chris@13: { Chris@13: $this->parseAndTraverse($code); Chris@13: } Chris@13: Chris@13: public function invalidStatements() Chris@13: { Chris@13: $data = [ Chris@13: ['final class A {} class B extends A {}'], Chris@13: ['class A {} final class B extends A {} class C extends B {}'], Chris@13: // array('namespace A { final class B {} } namespace C { class D extends \\A\\B {} }'), Chris@13: ]; Chris@13: Chris@17: if (!\defined('HHVM_VERSION')) { Chris@13: // For some reason Closure isn't final in HHVM? Chris@13: $data[] = ['class A extends \\Closure {}']; Chris@13: } Chris@13: Chris@13: return $data; Chris@13: } Chris@13: Chris@13: /** Chris@13: * @dataProvider validStatements Chris@13: */ Chris@13: public function testProcessStatementPasses($code) Chris@13: { Chris@13: $this->parseAndTraverse($code); Chris@13: $this->assertTrue(true); Chris@13: } Chris@13: Chris@13: public function validStatements() Chris@13: { Chris@13: return [ Chris@13: ['class A extends \\stdClass {}'], Chris@13: ['final class A extends \\stdClass {}'], Chris@13: ['class A {} class B extends A {}'], Chris@13: ]; Chris@13: } Chris@13: }