Chris@13: assertEquals($expected, self::trimLines($formattedWithoutColors)); Chris@16: $this->assertNotEquals($expected, self::trimLines($formatted)); Chris@13: } Chris@13: Chris@16: public function reflectors() Chris@13: { Chris@16: $expectClass = <<<'EOS' Chris@16: > 14| class SomeClass Chris@16: 15| { Chris@16: 16| const SOME_CONST = 'some const'; Chris@16: 17| private $someProp = 'some prop'; Chris@16: 18| Chris@16: 19| public function someMethod($someParam) Chris@16: 20| { Chris@16: 21| return 'some method'; Chris@16: 22| } Chris@16: 23| Chris@16: 24| public static function someClosure() Chris@16: 25| { Chris@16: 26| return function () { Chris@16: 27| return 'some closure'; Chris@16: 28| }; Chris@16: 29| } Chris@16: 30| } Chris@13: EOS; Chris@13: Chris@16: $expectMethod = <<<'EOS' Chris@16: > 19| public function someMethod($someParam) Chris@16: 20| { Chris@16: 21| return 'some method'; Chris@16: 22| } Chris@16: EOS; Chris@13: Chris@16: $expectClosure = <<<'EOS' Chris@16: > 26| return function () { Chris@16: 27| return 'some closure'; Chris@16: 28| }; Chris@16: EOS; Chris@16: Chris@16: return [ Chris@16: [new \ReflectionClass('Psy\Test\Formatter\Fixtures\SomeClass'), $expectClass], Chris@16: [new \ReflectionObject(new SomeClass()), $expectClass], Chris@16: [new \ReflectionMethod('Psy\Test\Formatter\Fixtures\SomeClass', 'someMethod'), $expectMethod], Chris@16: [new \ReflectionFunction(SomeClass::someClosure()), $expectClosure], Chris@16: ]; Chris@16: } Chris@16: Chris@16: /** Chris@16: * @dataProvider invalidReflectors Chris@16: * @expectedException \Psy\Exception\RuntimeException Chris@16: */ Chris@16: public function testCodeFormatterThrowsExceptionForReflectorsItDoesntUnderstand($reflector) Chris@16: { Chris@16: CodeFormatter::format($reflector); Chris@16: } Chris@16: Chris@16: public function invalidReflectors() Chris@16: { Chris@16: $reflectors = [ Chris@16: [new \ReflectionExtension('json')], Chris@16: [new \ReflectionParameter(['Psy\Test\Formatter\Fixtures\SomeClass', 'someMethod'], 'someParam')], Chris@16: [new \ReflectionProperty('Psy\Test\Formatter\Fixtures\SomeClass', 'someProp')], Chris@16: ]; Chris@16: Chris@17: if (\version_compare(PHP_VERSION, '7.1.0', '>=')) { Chris@16: $reflectors[] = [new \ReflectionClassConstant('Psy\Test\Formatter\Fixtures\SomeClass', 'SOME_CONST')]; Chris@16: } Chris@16: Chris@16: return $reflectors; Chris@13: } Chris@13: Chris@13: /** Chris@13: * @dataProvider filenames Chris@13: * @expectedException \Psy\Exception\RuntimeException Chris@13: */ Chris@16: public function testCodeFormatterThrowsExceptionForMissingFile($filename) Chris@13: { Chris@13: $reflector = $this->getMockBuilder('ReflectionClass') Chris@13: ->disableOriginalConstructor() Chris@13: ->getMock(); Chris@13: Chris@13: $reflector Chris@13: ->expects($this->once()) Chris@13: ->method('getFileName') Chris@13: ->will($this->returnValue($filename)); Chris@13: Chris@13: CodeFormatter::format($reflector); Chris@13: } Chris@13: Chris@13: public function filenames() Chris@13: { Chris@17: if (\defined('HHVM_VERSION')) { Chris@13: $this->markTestSkipped('We have issues with PHPUnit mocks on HHVM.'); Chris@13: } Chris@13: Chris@13: return [[null], ['not a file']]; Chris@13: } Chris@16: Chris@16: private static function trimLines($code) Chris@16: { Chris@17: return \rtrim(\implode("\n", \array_map('rtrim', \explode("\n", $code)))); Chris@16: } Chris@13: }