gluon-web-remote

Web remote Administration for big size of gluon routers
git clone git://archive.git.mtrnord.blog/MTRNord/gluon-web-remote.git
Log | Files | Refs | README

ExporterTest.php (7378B)


      1 <?php
      2 /*
      3  * This file is part of the Exporter package.
      4  *
      5  * (c) Sebastian Bergmann <sebastian@phpunit.de>
      6  *
      7  * For the full copyright and license information, please view the LICENSE
      8  * file that was distributed with this source code.
      9  */
     10 
     11 namespace SebastianBergmann\Exporter;
     12 
     13 /**
     14  * @covers SebastianBergmann\Exporter\Exporter
     15  */
     16 class ExporterTest extends \PHPUnit_Framework_TestCase
     17 {
     18     /**
     19      * @var Exporter
     20      */
     21     private $exporter;
     22 
     23     protected function setUp()
     24     {
     25         $this->exporter = new Exporter;
     26     }
     27 
     28     public function exportProvider()
     29     {
     30         $obj2 = new \stdClass;
     31         $obj2->foo = 'bar';
     32 
     33         $obj3 = (object)array(1,2,"Test\r\n",4,5,6,7,8);
     34 
     35         $obj = new \stdClass;
     36         //@codingStandardsIgnoreStart
     37         $obj->null = null;
     38         //@codingStandardsIgnoreEnd
     39         $obj->boolean = true;
     40         $obj->integer = 1;
     41         $obj->double = 1.2;
     42         $obj->string = '1';
     43         $obj->text = "this\nis\na\nvery\nvery\nvery\nvery\nvery\nvery\rlong\n\rtext";
     44         $obj->object = $obj2;
     45         $obj->objectagain = $obj2;
     46         $obj->array = array('foo' => 'bar');
     47         $obj->self = $obj;
     48 
     49         $storage = new \SplObjectStorage;
     50         $storage->attach($obj2);
     51         $storage->foo = $obj2;
     52 
     53         return array(
     54             array(null, 'null'),
     55             array(true, 'true'),
     56             array(false, 'false'),
     57             array(1, '1'),
     58             array(1.0, '1.0'),
     59             array(1.2, '1.2'),
     60             array(fopen('php://memory', 'r'), 'resource(%d) of type (stream)'),
     61             array('1', "'1'"),
     62             array(array(array(1,2,3), array(3,4,5)),
     63         <<<EOF
     64 Array &0 (
     65     0 => Array &1 (
     66         0 => 1
     67         1 => 2
     68         2 => 3
     69     )
     70     1 => Array &2 (
     71         0 => 3
     72         1 => 4
     73         2 => 5
     74     )
     75 )
     76 EOF
     77             ),
     78             // \n\r and \r is converted to \n
     79             array("this\nis\na\nvery\nvery\nvery\nvery\nvery\nvery\rlong\n\rtext",
     80             <<<EOF
     81 'this
     82 is
     83 a
     84 very
     85 very
     86 very
     87 very
     88 very
     89 very
     90 long
     91 text'
     92 EOF
     93             ),
     94             array(new \stdClass, 'stdClass Object &%x ()'),
     95             array($obj,
     96             <<<EOF
     97 stdClass Object &%x (
     98     'null' => null
     99     'boolean' => true
    100     'integer' => 1
    101     'double' => 1.2
    102     'string' => '1'
    103     'text' => 'this
    104 is
    105 a
    106 very
    107 very
    108 very
    109 very
    110 very
    111 very
    112 long
    113 text'
    114     'object' => stdClass Object &%x (
    115         'foo' => 'bar'
    116     )
    117     'objectagain' => stdClass Object &%x
    118     'array' => Array &%d (
    119         'foo' => 'bar'
    120     )
    121     'self' => stdClass Object &%x
    122 )
    123 EOF
    124             ),
    125             array(array(), 'Array &%d ()'),
    126             array($storage,
    127             <<<EOF
    128 SplObjectStorage Object &%x (
    129     'foo' => stdClass Object &%x (
    130         'foo' => 'bar'
    131     )
    132     '%x' => Array &0 (
    133         'obj' => stdClass Object &%x
    134         'inf' => null
    135     )
    136 )
    137 EOF
    138             ),
    139             array($obj3,
    140             <<<EOF
    141 stdClass Object &%x (
    142     0 => 1
    143     1 => 2
    144     2 => 'Test\n'
    145     3 => 4
    146     4 => 5
    147     5 => 6
    148     6 => 7
    149     7 => 8
    150 )
    151 EOF
    152             ),
    153             array(
    154                 chr(0) . chr(1) . chr(2) . chr(3) . chr(4) . chr(5),
    155                 'Binary String: 0x000102030405'
    156             ),
    157             array(
    158                 implode('', array_map('chr', range(0x0e, 0x1f))),
    159                 'Binary String: 0x0e0f101112131415161718191a1b1c1d1e1f'
    160             ),
    161             array(
    162                 chr(0x00) . chr(0x09),
    163                 'Binary String: 0x0009'
    164             ),
    165             array(
    166                 '',
    167                 "''"
    168             ),
    169         );
    170     }
    171 
    172     /**
    173      * @dataProvider exportProvider
    174      */
    175     public function testExport($value, $expected)
    176     {
    177         $this->assertStringMatchesFormat(
    178             $expected,
    179             $this->trimNewline($this->exporter->export($value))
    180         );
    181     }
    182 
    183     public function testExport2()
    184     {
    185         if (PHP_VERSION === '5.3.3') {
    186             $this->markTestSkipped('Skipped due to "Nesting level too deep - recursive dependency?" fatal error');
    187         }
    188 
    189         $obj = new \stdClass;
    190         $obj->foo = 'bar';
    191 
    192         $array = array(
    193             0 => 0,
    194             'null' => null,
    195             'boolean' => true,
    196             'integer' => 1,
    197             'double' => 1.2,
    198             'string' => '1',
    199             'text' => "this\nis\na\nvery\nvery\nvery\nvery\nvery\nvery\rlong\n\rtext",
    200             'object' => $obj,
    201             'objectagain' => $obj,
    202             'array' => array('foo' => 'bar'),
    203         );
    204 
    205         $array['self'] = &$array;
    206 
    207         $expected = <<<EOF
    208 Array &%d (
    209     0 => 0
    210     'null' => null
    211     'boolean' => true
    212     'integer' => 1
    213     'double' => 1.2
    214     'string' => '1'
    215     'text' => 'this
    216 is
    217 a
    218 very
    219 very
    220 very
    221 very
    222 very
    223 very
    224 long
    225 text'
    226     'object' => stdClass Object &%x (
    227         'foo' => 'bar'
    228     )
    229     'objectagain' => stdClass Object &%x
    230     'array' => Array &%d (
    231         'foo' => 'bar'
    232     )
    233     'self' => Array &%d (
    234         0 => 0
    235         'null' => null
    236         'boolean' => true
    237         'integer' => 1
    238         'double' => 1.2
    239         'string' => '1'
    240         'text' => 'this
    241 is
    242 a
    243 very
    244 very
    245 very
    246 very
    247 very
    248 very
    249 long
    250 text'
    251         'object' => stdClass Object &%x
    252         'objectagain' => stdClass Object &%x
    253         'array' => Array &%d (
    254             'foo' => 'bar'
    255         )
    256         'self' => Array &%d
    257     )
    258 )
    259 EOF;
    260 
    261         $this->assertStringMatchesFormat(
    262             $expected,
    263             $this->trimNewline($this->exporter->export($array))
    264         );
    265     }
    266 
    267     public function shortenedExportProvider()
    268     {
    269         $obj = new \stdClass;
    270         $obj->foo = 'bar';
    271 
    272         $array = array(
    273             'foo' => 'bar',
    274         );
    275 
    276         return array(
    277             array(null, 'null'),
    278             array(true, 'true'),
    279             array(1, '1'),
    280             array(1.0, '1.0'),
    281             array(1.2, '1.2'),
    282             array('1', "'1'"),
    283             // \n\r and \r is converted to \n
    284             array("this\nis\na\nvery\nvery\nvery\nvery\nvery\nvery\rlong\n\rtext", "'this\\nis\\na\\nvery\\nvery\\nvery\\nvery...g\\ntext'"),
    285             array(new \stdClass, 'stdClass Object ()'),
    286             array($obj, 'stdClass Object (...)'),
    287             array(array(), 'Array ()'),
    288             array($array, 'Array (...)'),
    289         );
    290     }
    291 
    292     /**
    293      * @dataProvider shortenedExportProvider
    294      */
    295     public function testShortenedExport($value, $expected)
    296     {
    297         $this->assertSame(
    298             $expected,
    299             $this->trimNewline($this->exporter->shortenedExport($value))
    300         );
    301     }
    302 
    303     public function provideNonBinaryMultibyteStrings()
    304     {
    305         return array(
    306             array(implode('', array_map('chr', range(0x09, 0x0d))), 5),
    307             array(implode('', array_map('chr', range(0x20, 0x7f))), 96),
    308             array(implode('', array_map('chr', range(0x80, 0xff))), 128),
    309         );
    310     }
    311 
    312 
    313     /**
    314      * @dataProvider provideNonBinaryMultibyteStrings
    315      */
    316     public function testNonBinaryStringExport($value, $expectedLength)
    317     {
    318         $this->assertRegExp(
    319             "~'.{{$expectedLength}}'\$~s",
    320             $this->exporter->export($value)
    321         );
    322     }
    323 
    324     public function testNonObjectCanBeReturnedAsArray()
    325     {
    326         $this->assertEquals(array(true), $this->exporter->toArray(true));
    327     }
    328 
    329     private function trimNewline($string)
    330     {
    331         return preg_replace('/[ ]*\n/', "\n", $string);
    332     }
    333 }