Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\VarDumper\Tests\Caster; Chris@0: Chris@0: use PHPUnit\Framework\TestCase; Chris@0: use Symfony\Component\VarDumper\Test\VarDumperTestTrait; Chris@0: Chris@0: /** Chris@0: * @author Grégoire Pineau Chris@0: */ Chris@0: class SplCasterTest extends TestCase Chris@0: { Chris@0: use VarDumperTestTrait; Chris@0: Chris@0: public function getCastFileInfoTests() Chris@0: { Chris@17: return [ Chris@17: [__FILE__, <<<'EOTXT' Chris@0: SplFileInfo { Chris@0: %Apath: "%sCaster" Chris@0: filename: "SplCasterTest.php" Chris@0: basename: "SplCasterTest.php" Chris@0: pathname: "%sSplCasterTest.php" Chris@0: extension: "php" Chris@0: realPath: "%sSplCasterTest.php" Chris@0: aTime: %s-%s-%d %d:%d:%d Chris@0: mTime: %s-%s-%d %d:%d:%d Chris@0: cTime: %s-%s-%d %d:%d:%d Chris@17: inode: %i Chris@0: size: %d Chris@0: perms: 0%d Chris@0: owner: %d Chris@0: group: %d Chris@0: type: "file" Chris@0: writable: true Chris@0: readable: true Chris@0: executable: false Chris@0: file: true Chris@0: dir: false Chris@0: link: false Chris@0: %A} Chris@0: EOTXT Chris@17: ], Chris@17: ['https://google.com/about', <<<'EOTXT' Chris@0: SplFileInfo { Chris@0: %Apath: "https://google.com" Chris@0: filename: "about" Chris@0: basename: "about" Chris@0: pathname: "https://google.com/about" Chris@0: extension: "" Chris@0: realPath: false Chris@0: %A} Chris@0: EOTXT Chris@17: ], Chris@17: ]; Chris@0: } Chris@0: Chris@0: /** @dataProvider getCastFileInfoTests */ Chris@0: public function testCastFileInfo($file, $dump) Chris@0: { Chris@0: $this->assertDumpMatchesFormat($dump, new \SplFileInfo($file)); Chris@0: } Chris@0: Chris@0: public function testCastFileObject() Chris@0: { Chris@0: $var = new \SplFileObject(__FILE__); Chris@0: $var->setFlags(\SplFileObject::DROP_NEW_LINE | \SplFileObject::SKIP_EMPTY); Chris@0: $dump = <<<'EOTXT' Chris@0: SplFileObject { Chris@0: %Apath: "%sCaster" Chris@0: filename: "SplCasterTest.php" Chris@0: basename: "SplCasterTest.php" Chris@0: pathname: "%sSplCasterTest.php" Chris@0: extension: "php" Chris@0: realPath: "%sSplCasterTest.php" Chris@0: aTime: %s-%s-%d %d:%d:%d Chris@0: mTime: %s-%s-%d %d:%d:%d Chris@0: cTime: %s-%s-%d %d:%d:%d Chris@17: inode: %i Chris@0: size: %d Chris@0: perms: 0%d Chris@0: owner: %d Chris@0: group: %d Chris@0: type: "file" Chris@0: writable: true Chris@0: readable: true Chris@0: executable: false Chris@0: file: true Chris@0: dir: false Chris@0: link: false Chris@0: %AcsvControl: array:%d [ Chris@0: 0 => "," Chris@0: 1 => """ Chris@0: %A] Chris@0: flags: DROP_NEW_LINE|SKIP_EMPTY Chris@0: maxLineLen: 0 Chris@0: fstat: array:26 [ Chris@0: "dev" => %d Chris@17: "ino" => %i Chris@0: "nlink" => %d Chris@0: "rdev" => 0 Chris@0: "blksize" => %i Chris@0: "blocks" => %i Chris@0: …20 Chris@0: ] Chris@0: eof: false Chris@0: key: 0 Chris@0: } Chris@0: EOTXT; Chris@0: $this->assertDumpMatchesFormat($dump, $var); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider provideCastSplDoublyLinkedList Chris@0: */ Chris@0: public function testCastSplDoublyLinkedList($modeValue, $modeDump) Chris@0: { Chris@0: $var = new \SplDoublyLinkedList(); Chris@0: $var->setIteratorMode($modeValue); Chris@0: $dump = <<assertDumpMatchesFormat($dump, $var); Chris@0: } Chris@0: Chris@0: public function provideCastSplDoublyLinkedList() Chris@0: { Chris@17: return [ Chris@17: [\SplDoublyLinkedList::IT_MODE_FIFO, 'IT_MODE_FIFO | IT_MODE_KEEP'], Chris@17: [\SplDoublyLinkedList::IT_MODE_LIFO, 'IT_MODE_LIFO | IT_MODE_KEEP'], Chris@17: [\SplDoublyLinkedList::IT_MODE_FIFO | \SplDoublyLinkedList::IT_MODE_DELETE, 'IT_MODE_FIFO | IT_MODE_DELETE'], Chris@17: [\SplDoublyLinkedList::IT_MODE_LIFO | \SplDoublyLinkedList::IT_MODE_DELETE, 'IT_MODE_LIFO | IT_MODE_DELETE'], Chris@17: ]; Chris@0: } Chris@16: Chris@16: public function testCastObjectStorageIsntModified() Chris@16: { Chris@16: $var = new \SplObjectStorage(); Chris@16: $var->attach(new \stdClass()); Chris@16: $var->rewind(); Chris@16: $current = $var->current(); Chris@16: Chris@16: $this->assertDumpMatchesFormat('%A', $var); Chris@16: $this->assertSame($current, $var->current()); Chris@16: } Chris@16: Chris@16: public function testCastObjectStorageDumpsInfo() Chris@16: { Chris@16: $var = new \SplObjectStorage(); Chris@16: $var->attach(new \stdClass(), new \DateTime()); Chris@16: Chris@16: $this->assertDumpMatchesFormat('%ADateTime%A', $var); Chris@16: } Chris@16: Chris@16: public function testCastArrayObject() Chris@16: { Chris@16: if (\defined('HHVM_VERSION')) { Chris@16: $this->markTestSkipped('HHVM as different internal details.'); Chris@16: } Chris@17: $var = new \ArrayObject([123]); Chris@16: $var->foo = 234; Chris@16: Chris@16: $expected = << 123 Chris@16: ] Chris@0: } Chris@16: EOTXT; Chris@16: $this->assertDumpEquals($expected, $var); Chris@16: } Chris@16: Chris@16: public function testArrayIterator() Chris@16: { Chris@16: if (\defined('HHVM_VERSION')) { Chris@16: $this->markTestSkipped('HHVM as different internal details.'); Chris@16: } Chris@17: $var = new MyArrayIterator([234]); Chris@16: Chris@16: $expected = << 234 Chris@16: ] Chris@16: } Chris@16: EOTXT; Chris@16: $this->assertDumpEquals($expected, $var); Chris@16: } Chris@16: } Chris@16: Chris@16: class MyArrayIterator extends \ArrayIterator Chris@16: { Chris@16: private $foo = 123; Chris@16: }