You are here

class ExporterTest in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/sebastian/exporter/tests/ExporterTest.php \SebastianBergmann\Exporter\ExporterTest

@covers SebastianBergmann\Exporter\Exporter

Hierarchy

  • class \SebastianBergmann\Exporter\ExporterTest extends \SebastianBergmann\Exporter\PHPUnit_Framework_TestCase

Expanded class hierarchy of ExporterTest

File

vendor/sebastian/exporter/tests/ExporterTest.php, line 16

Namespace

SebastianBergmann\Exporter
View source
class ExporterTest extends \PHPUnit_Framework_TestCase {

  /**
   * @var Exporter
   */
  private $exporter;
  protected function setUp() {
    $this->exporter = new Exporter();
  }
  public function exportProvider() {
    $obj2 = new \stdClass();
    $obj2->foo = 'bar';
    $obj3 = (object) array(
      1,
      2,
      "Test\r\n",
      4,
      5,
      6,
      7,
      8,
    );
    $obj = new \stdClass();

    //@codingStandardsIgnoreStart
    $obj->null = null;

    //@codingStandardsIgnoreEnd
    $obj->boolean = true;
    $obj->integer = 1;
    $obj->double = 1.2;
    $obj->string = '1';
    $obj->text = "this\nis\na\nvery\nvery\nvery\nvery\nvery\nvery\rlong\n\rtext";
    $obj->object = $obj2;
    $obj->objectagain = $obj2;
    $obj->array = array(
      'foo' => 'bar',
    );
    $obj->self = $obj;
    $storage = new \SplObjectStorage();
    $storage
      ->attach($obj2);
    $storage->foo = $obj2;
    return array(
      array(
        null,
        'null',
      ),
      array(
        true,
        'true',
      ),
      array(
        false,
        'false',
      ),
      array(
        1,
        '1',
      ),
      array(
        1.0,
        '1.0',
      ),
      array(
        1.2,
        '1.2',
      ),
      array(
        fopen('php://memory', 'r'),
        'resource(%d) of type (stream)',
      ),
      array(
        '1',
        "'1'",
      ),
      array(
        array(
          array(
            1,
            2,
            3,
          ),
          array(
            3,
            4,
            5,
          ),
        ),
        <<<EOF
Array &0 (
    0 => Array &1 (
        0 => 1
        1 => 2
        2 => 3
    )
    1 => Array &2 (
        0 => 3
        1 => 4
        2 => 5
    )
)
EOF
,
      ),
      // \n\r and \r is converted to \n
      array(
        "this\nis\na\nvery\nvery\nvery\nvery\nvery\nvery\rlong\n\rtext",
        <<<EOF
'this
is
a
very
very
very
very
very
very
long
text'
EOF
,
      ),
      array(
        new \stdClass(),
        'stdClass Object &%x ()',
      ),
      array(
        $obj,
        <<<EOF
stdClass Object &%x (
    'null' => null
    'boolean' => true
    'integer' => 1
    'double' => 1.2
    'string' => '1'
    'text' => 'this
is
a
very
very
very
very
very
very
long
text'
    'object' => stdClass Object &%x (
        'foo' => 'bar'
    )
    'objectagain' => stdClass Object &%x
    'array' => Array &%d (
        'foo' => 'bar'
    )
    'self' => stdClass Object &%x
)
EOF
,
      ),
      array(
        array(),
        'Array &%d ()',
      ),
      array(
        $storage,
        <<<EOF
SplObjectStorage Object &%x (
    'foo' => stdClass Object &%x (
        'foo' => 'bar'
    )
    '%x' => Array &0 (
        'obj' => stdClass Object &%x
        'inf' => null
    )
)
EOF
,
      ),
      array(
        $obj3,
        <<<EOF
stdClass Object &%x (
    0 => 1
    1 => 2
    2 => 'Test
'
    3 => 4
    4 => 5
    5 => 6
    6 => 7
    7 => 8
)
EOF
,
      ),
      array(
        chr(0) . chr(1) . chr(2) . chr(3) . chr(4) . chr(5),
        'Binary String: 0x000102030405',
      ),
      array(
        implode('', array_map('chr', range(0xe, 0x1f))),
        'Binary String: 0x0e0f101112131415161718191a1b1c1d1e1f',
      ),
      array(
        chr(0x0) . chr(0x9),
        'Binary String: 0x0009',
      ),
      array(
        '',
        "''",
      ),
    );
  }

  /**
   * @dataProvider exportProvider
   */
  public function testExport($value, $expected) {
    $this
      ->assertStringMatchesFormat($expected, $this
      ->trimNewline($this->exporter
      ->export($value)));
  }
  public function testExport2() {
    if (PHP_VERSION === '5.3.3') {
      $this
        ->markTestSkipped('Skipped due to "Nesting level too deep - recursive dependency?" fatal error');
    }
    $obj = new \stdClass();
    $obj->foo = 'bar';
    $array = array(
      0 => 0,
      'null' => null,
      'boolean' => true,
      'integer' => 1,
      'double' => 1.2,
      'string' => '1',
      'text' => "this\nis\na\nvery\nvery\nvery\nvery\nvery\nvery\rlong\n\rtext",
      'object' => $obj,
      'objectagain' => $obj,
      'array' => array(
        'foo' => 'bar',
      ),
    );
    $array['self'] =& $array;
    $expected = <<<EOF
Array &%d (
    0 => 0
    'null' => null
    'boolean' => true
    'integer' => 1
    'double' => 1.2
    'string' => '1'
    'text' => 'this
is
a
very
very
very
very
very
very
long
text'
    'object' => stdClass Object &%x (
        'foo' => 'bar'
    )
    'objectagain' => stdClass Object &%x
    'array' => Array &%d (
        'foo' => 'bar'
    )
    'self' => Array &%d (
        0 => 0
        'null' => null
        'boolean' => true
        'integer' => 1
        'double' => 1.2
        'string' => '1'
        'text' => 'this
is
a
very
very
very
very
very
very
long
text'
        'object' => stdClass Object &%x
        'objectagain' => stdClass Object &%x
        'array' => Array &%d (
            'foo' => 'bar'
        )
        'self' => Array &%d
    )
)
EOF;
    $this
      ->assertStringMatchesFormat($expected, $this
      ->trimNewline($this->exporter
      ->export($array)));
  }
  public function shortenedExportProvider() {
    $obj = new \stdClass();
    $obj->foo = 'bar';
    $array = array(
      'foo' => 'bar',
    );
    return array(
      array(
        null,
        'null',
      ),
      array(
        true,
        'true',
      ),
      array(
        1,
        '1',
      ),
      array(
        1.0,
        '1.0',
      ),
      array(
        1.2,
        '1.2',
      ),
      array(
        '1',
        "'1'",
      ),
      // \n\r and \r is converted to \n
      array(
        "this\nis\na\nvery\nvery\nvery\nvery\nvery\nvery\rlong\n\rtext",
        "'this\\nis\\na\\nvery\\nvery\\nvery\\nvery...g\\ntext'",
      ),
      array(
        new \stdClass(),
        'stdClass Object ()',
      ),
      array(
        $obj,
        'stdClass Object (...)',
      ),
      array(
        array(),
        'Array ()',
      ),
      array(
        $array,
        'Array (...)',
      ),
    );
  }

  /**
   * @dataProvider shortenedExportProvider
   */
  public function testShortenedExport($value, $expected) {
    $this
      ->assertSame($expected, $this
      ->trimNewline($this->exporter
      ->shortenedExport($value)));
  }
  public function provideNonBinaryMultibyteStrings() {
    return array(
      array(
        implode('', array_map('chr', range(0x9, 0xd))),
        5,
      ),
      array(
        implode('', array_map('chr', range(0x20, 0x7f))),
        96,
      ),
      array(
        implode('', array_map('chr', range(0x80, 0xff))),
        128,
      ),
    );
  }

  /**
   * @dataProvider provideNonBinaryMultibyteStrings
   */
  public function testNonBinaryStringExport($value, $expectedLength) {
    $this
      ->assertRegExp("~'.{{$expectedLength}}'\$~s", $this->exporter
      ->export($value));
  }
  public function testNonObjectCanBeReturnedAsArray() {
    $this
      ->assertEquals(array(
      true,
    ), $this->exporter
      ->toArray(true));
  }
  private function trimNewline($string) {
    return preg_replace('/[ ]*\\n/', "\n", $string);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ExporterTest::$exporter private property
ExporterTest::exportProvider public function
ExporterTest::provideNonBinaryMultibyteStrings public function
ExporterTest::setUp protected function
ExporterTest::shortenedExportProvider public function
ExporterTest::testExport public function @dataProvider exportProvider
ExporterTest::testExport2 public function
ExporterTest::testNonBinaryStringExport public function @dataProvider provideNonBinaryMultibyteStrings
ExporterTest::testNonObjectCanBeReturnedAsArray public function
ExporterTest::testShortenedExport public function @dataProvider shortenedExportProvider
ExporterTest::trimNewline private function