Test Failed
Push — master ( 398493...d4ef72 )
by Michael
11:04
created

DumperTest::testObjectSupportEnabled()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
/*
4
 * This file is part of the Symfony package.
5
 *
6
 * (c) Fabien Potencier <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Symfony\Component\Yaml\Tests;
13
14
use PHPUnit\Framework\TestCase;
0 ignored issues
show
Bug introduced by
The type PHPUnit\Framework\TestCase was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
15
use Symfony\Component\Yaml\Parser;
16
use Symfony\Component\Yaml\Dumper;
17
18
class DumperTest extends TestCase
19
{
20
    protected $parser;
21
    protected $dumper;
22
    protected $path;
23
24
    protected $array = array(
25
        '' => 'bar',
26
        'foo' => '#bar',
27
        'foo\'bar' => array(),
28
        'bar' => array(1, 'foo'),
29
        'foobar' => array(
30
            'foo' => 'bar',
31
            'bar' => array(1, 'foo'),
32
            'foobar' => array(
33
                'foo' => 'bar',
34
                'bar' => array(1, 'foo'),
35
            ),
36
        ),
37
    );
38
39
    protected function setUp()
40
    {
41
        $this->parser = new Parser();
42
        $this->dumper = new Dumper();
43
        $this->path = __DIR__.'/Fixtures';
44
    }
45
46
    protected function tearDown()
47
    {
48
        $this->parser = null;
49
        $this->dumper = null;
50
        $this->path = null;
51
        $this->array = null;
52
    }
53
54
    public function testSetIndentation()
55
    {
56
        $this->dumper->setIndentation(7);
57
58
        $expected = <<<'EOF'
59
'': bar
60
foo: '#bar'
61
'foo''bar': {  }
62
bar:
63
       - 1
64
       - foo
65
foobar:
66
       foo: bar
67
       bar:
68
              - 1
69
              - foo
70
       foobar:
71
              foo: bar
72
              bar:
73
                     - 1
74
                     - foo
75
76
EOF;
77
        $this->assertEquals($expected, $this->dumper->dump($this->array, 4, 0));
78
    }
79
80
    public function testSpecifications()
81
    {
82
        $files = $this->parser->parse(file_get_contents($this->path.'/index.yml'));
83
        foreach ($files as $file) {
84
            $yamls = file_get_contents($this->path.'/'.$file.'.yml');
85
86
            // split YAMLs documents
87
            foreach (preg_split('/^---( %YAML\:1\.0)?/m', $yamls) as $yaml) {
88
                if (!$yaml) {
89
                    continue;
90
                }
91
92
                $test = $this->parser->parse($yaml);
93
                if (isset($test['dump_skip']) && $test['dump_skip']) {
94
                    continue;
95
                } elseif (isset($test['todo']) && $test['todo']) {
0 ignored issues
show
Unused Code introduced by
This elseif statement is empty, and could be removed.

This check looks for the bodies of elseif statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

These elseif bodies can be removed. If you have an empty elseif but statements in the else branch, consider inverting the condition.

Loading history...
96
                    // TODO
97
                } else {
98
                    eval('$expected = '.trim($test['php']).';');
0 ignored issues
show
introduced by
The use of eval() is discouraged.
Loading history...
99
                    $this->assertSame($expected, $this->parser->parse($this->dumper->dump($expected, 10)), $test['test']);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $expected seems to be never defined.
Loading history...
100
                }
101
            }
102
        }
103
    }
104
105
    public function testInlineLevel()
106
    {
107
        $expected = <<<'EOF'
108
{ '': bar, foo: '#bar', 'foo''bar': {  }, bar: [1, foo], foobar: { foo: bar, bar: [1, foo], foobar: { foo: bar, bar: [1, foo] } } }
109
EOF;
110
        $this->assertEquals($expected, $this->dumper->dump($this->array, -10), '->dump() takes an inline level argument');
111
        $this->assertEquals($expected, $this->dumper->dump($this->array, 0), '->dump() takes an inline level argument');
112
113
        $expected = <<<'EOF'
114
'': bar
115
foo: '#bar'
116
'foo''bar': {  }
117
bar: [1, foo]
118
foobar: { foo: bar, bar: [1, foo], foobar: { foo: bar, bar: [1, foo] } }
119
120
EOF;
121
        $this->assertEquals($expected, $this->dumper->dump($this->array, 1), '->dump() takes an inline level argument');
122
123
        $expected = <<<'EOF'
124
'': bar
125
foo: '#bar'
126
'foo''bar': {  }
127
bar:
128
    - 1
129
    - foo
130
foobar:
131
    foo: bar
132
    bar: [1, foo]
133
    foobar: { foo: bar, bar: [1, foo] }
134
135
EOF;
136
        $this->assertEquals($expected, $this->dumper->dump($this->array, 2), '->dump() takes an inline level argument');
137
138
        $expected = <<<'EOF'
139
'': bar
140
foo: '#bar'
141
'foo''bar': {  }
142
bar:
143
    - 1
144
    - foo
145
foobar:
146
    foo: bar
147
    bar:
148
        - 1
149
        - foo
150
    foobar:
151
        foo: bar
152
        bar: [1, foo]
153
154
EOF;
155
        $this->assertEquals($expected, $this->dumper->dump($this->array, 3), '->dump() takes an inline level argument');
156
157
        $expected = <<<'EOF'
158
'': bar
159
foo: '#bar'
160
'foo''bar': {  }
161
bar:
162
    - 1
163
    - foo
164
foobar:
165
    foo: bar
166
    bar:
167
        - 1
168
        - foo
169
    foobar:
170
        foo: bar
171
        bar:
172
            - 1
173
            - foo
174
175
EOF;
176
        $this->assertEquals($expected, $this->dumper->dump($this->array, 4), '->dump() takes an inline level argument');
177
        $this->assertEquals($expected, $this->dumper->dump($this->array, 10), '->dump() takes an inline level argument');
178
    }
179
180
    public function testObjectSupportEnabled()
181
    {
182
        $dump = $this->dumper->dump(array('foo' => new A(), 'bar' => 1), 0, 0, false, true);
183
184
        $this->assertEquals('{ foo: !php/object:O:30:"Symfony\Component\Yaml\Tests\A":1:{s:1:"a";s:3:"foo";}, bar: 1 }', $dump, '->dump() is able to dump objects');
185
    }
186
187
    public function testObjectSupportDisabledButNoExceptions()
188
    {
189
        $dump = $this->dumper->dump(array('foo' => new A(), 'bar' => 1));
190
191
        $this->assertEquals('{ foo: null, bar: 1 }', $dump, '->dump() does not dump objects when disabled');
192
    }
193
194
    /**
195
     * @expectedException \Symfony\Component\Yaml\Exception\DumpException
196
     */
197
    public function testObjectSupportDisabledWithExceptions()
198
    {
199
        $this->dumper->dump(array('foo' => new A(), 'bar' => 1), 0, 0, true, false);
200
    }
201
202
    /**
203
     * @dataProvider getEscapeSequences
204
     */
205
    public function testEscapedEscapeSequencesInQuotedScalar($input, $expected)
206
    {
207
        $this->assertEquals($expected, $this->dumper->dump($input));
208
    }
209
210
    public function getEscapeSequences()
211
    {
212
        return array(
213
            'empty string' => array('', "''"),
214
            'null' => array("\x0", '"\\0"'),
215
            'bell' => array("\x7", '"\\a"'),
216
            'backspace' => array("\x8", '"\\b"'),
217
            'horizontal-tab' => array("\t", '"\\t"'),
218
            'line-feed' => array("\n", '"\\n"'),
219
            'vertical-tab' => array("\v", '"\\v"'),
220
            'form-feed' => array("\xC", '"\\f"'),
221
            'carriage-return' => array("\r", '"\\r"'),
222
            'escape' => array("\x1B", '"\\e"'),
223
            'space' => array(' ', "' '"),
224
            'double-quote' => array('"', "'\"'"),
225
            'slash' => array('/', '/'),
226
            'backslash' => array('\\', '\\'),
227
            'next-line' => array("\xC2\x85", '"\\N"'),
228
            'non-breaking-space' => array("\xc2\xa0", '"\\_"'),
229
            'line-separator' => array("\xE2\x80\xA8", '"\\L"'),
230
            'paragraph-separator' => array("\xE2\x80\xA9", '"\\P"'),
231
            'colon' => array(':', "':'"),
232
        );
233
    }
234
235
    /**
236
     * @expectedException \InvalidArgumentException
237
     * @expectedExceptionMessage The indentation must be greater than zero
238
     */
239
    public function testZeroIndentationThrowsException()
240
    {
241
        $this->dumper->setIndentation(0);
242
    }
243
244
    /**
245
     * @expectedException \InvalidArgumentException
246
     * @expectedExceptionMessage The indentation must be greater than zero
247
     */
248
    public function testNegativeIndentationThrowsException()
249
    {
250
        $this->dumper->setIndentation(-4);
251
    }
252
}
253
254
class A
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class should be in its own file to aid autoloaders.

Having each class in a dedicated file usually plays nice with PSR autoloaders and is therefore a well established practice. If you use other autoloaders, you might not want to follow this rule.

Loading history...
255
{
256
    public $a = 'foo';
257
}
258