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