Failed Conditions
Push — master ( 8338e8...fafac8 )
by Sergei
19s queued 13s
created

DumperTest::testExportArray()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
c 0
b 0
f 0
rs 9.4285
cc 1
eloc 5
nc 1
nop 0
1
<?php
2
3
namespace Doctrine\Tests\DBAL\Tools;
4
5
use ArrayIterator;
6
use ArrayObject;
7
use DateTime;
8
use DateTimeImmutable;
9
use DateTimeZone;
10
use Doctrine\DBAL\Tools\Dumper;
11
use Doctrine\Tests\DbalTestCase;
12
use function print_r;
13
use function strpos;
14
use function substr;
15
16
class DumperTest extends DbalTestCase
17
{
18
    public function testExportObject()
19
    {
20
        $obj      = new \stdClass();
21
        $obj->foo = 'bar';
22
        $obj->bar = 1234;
23
24
        $var = Dumper::export($obj, 2);
25
        self::assertEquals('stdClass', $var->__CLASS__);
26
    }
27
28
    public function testExportObjectWithReference()
29
    {
30
        $foo = 'bar';
31
        $bar = ['foo' => & $foo];
32
        $baz = (object) $bar;
33
34
        $var      = Dumper::export($baz, 2);
35
        $baz->foo = 'tab';
36
37
        self::assertEquals('bar', $var->foo);
38
        self::assertEquals('tab', $bar['foo']);
39
    }
40
41
    public function testExportArray()
42
    {
43
        $array              = ['a' => 'b', 'b' => ['c', 'd' => ['e', 'f']]];
44
        $var                = Dumper::export($array, 2);
45
        $expected           = $array;
46
        $expected['b']['d'] = 'Array(2)';
47
        self::assertEquals($expected, $var);
48
    }
49
50
    public function testExportDateTime()
51
    {
52
        $obj = new DateTime('2010-10-10 10:10:10', new DateTimeZone('UTC'));
53
54
        $var = Dumper::export($obj, 2);
55
        self::assertEquals('DateTime', $var->__CLASS__);
56
        self::assertEquals('2010-10-10T10:10:10+00:00', $var->date);
57
    }
58
59
    public function testExportDateTimeImmutable()
60
    {
61
        $obj = new DateTimeImmutable('2010-10-10 10:10:10', new DateTimeZone('UTC'));
62
63
        $var = Dumper::export($obj, 2);
64
        self::assertEquals('DateTimeImmutable', $var->__CLASS__);
65
        self::assertEquals('2010-10-10T10:10:10+00:00', $var->date);
66
    }
67
68
    public function testExportDateTimeZone()
69
    {
70
        $obj = new DateTimeImmutable('2010-10-10 12:34:56', new DateTimeZone('Europe/Rome'));
71
72
        $var = Dumper::export($obj, 2);
73
        self::assertEquals('DateTimeImmutable', $var->__CLASS__);
74
        self::assertEquals('2010-10-10T12:34:56+02:00', $var->date);
75
    }
76
77
    public function testExportArrayTraversable()
78
    {
79
        $obj = new ArrayObject(['foobar']);
80
81
        $var = Dumper::export($obj, 2);
82
        self::assertContains('foobar', $var->__STORAGE__);
83
84
        $it = new ArrayIterator(['foobar']);
85
86
        $var = Dumper::export($it, 5);
87
        self::assertContains('foobar', $var->__STORAGE__);
88
    }
89
90
    /**
91
     * @param string[] $expected
92
     *
93
     * @dataProvider provideAttributesCases
94
     */
95
    public function testExportParentAttributes(TestAsset\ParentClass $class, array $expected)
96
    {
97
        $print_r_class    = print_r($class, true);
98
        $print_r_expected = print_r($expected, true);
99
100
        $print_r_class    = substr($print_r_class, strpos($print_r_class, '('));
101
        $print_r_expected = substr($print_r_expected, strpos($print_r_expected, '('));
102
103
        self::assertSame($print_r_class, $print_r_expected);
104
105
        $var = Dumper::export($class, 3);
106
        $var = (array) $var;
107
        unset($var['__CLASS__']);
108
109
        self::assertSame($expected, $var);
110
    }
111
112
    public function provideAttributesCases()
113
    {
114
        return [
115
            'different-attributes' => [
116
                new TestAsset\ChildClass(),
117
                [
118
                    'childPublicAttribute' => 4,
119
                    'childProtectedAttribute:protected' => 5,
120
                    'childPrivateAttribute:Doctrine\Tests\DBAL\Tools\TestAsset\ChildClass:private' => 6,
121
                    'parentPublicAttribute' => 1,
122
                    'parentProtectedAttribute:protected' => 2,
123
                    'parentPrivateAttribute:Doctrine\Tests\DBAL\Tools\TestAsset\ParentClass:private' => 3,
124
                ],
125
            ],
126
            'same-attributes' => [
127
                new TestAsset\ChildWithSameAttributesClass(),
128
                [
129
                    'parentPublicAttribute' => 4,
130
                    'parentProtectedAttribute:protected' => 5,
131
                    'parentPrivateAttribute:Doctrine\Tests\DBAL\Tools\TestAsset\ChildWithSameAttributesClass:private' => 6,
132
                    'parentPrivateAttribute:Doctrine\Tests\DBAL\Tools\TestAsset\ParentClass:private' => 3,
133
                ],
134
            ],
135
        ];
136
    }
137
}
138