Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\Component\Serialization;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Component\Serialization\Exception\InvalidDataTypeException;
|
Chris@0
|
6 use Drupal\Component\Serialization\YamlPecl;
|
Chris@0
|
7
|
Chris@0
|
8 /**
|
Chris@0
|
9 * Tests the YamlPecl serialization implementation.
|
Chris@0
|
10 *
|
Chris@0
|
11 * @group Drupal
|
Chris@0
|
12 * @group Serialization
|
Chris@0
|
13 * @coversDefaultClass \Drupal\Component\Serialization\YamlPecl
|
Chris@0
|
14 * @requires extension yaml
|
Chris@0
|
15 */
|
Chris@0
|
16 class YamlPeclTest extends YamlTestBase {
|
Chris@0
|
17
|
Chris@0
|
18 /**
|
Chris@0
|
19 * Tests encoding and decoding basic data structures.
|
Chris@0
|
20 *
|
Chris@0
|
21 * @covers ::encode
|
Chris@0
|
22 * @covers ::decode
|
Chris@0
|
23 * @dataProvider providerEncodeDecodeTests
|
Chris@0
|
24 */
|
Chris@0
|
25 public function testEncodeDecode($data) {
|
Chris@0
|
26 $this->assertEquals($data, YamlPecl::decode(YamlPecl::encode($data)));
|
Chris@0
|
27 }
|
Chris@0
|
28
|
Chris@0
|
29 /**
|
Chris@0
|
30 * Ensures that php object support is disabled.
|
Chris@0
|
31 */
|
Chris@0
|
32 public function testObjectSupportDisabled() {
|
Chris@0
|
33 $object = new \stdClass();
|
Chris@0
|
34 $object->foo = 'bar';
|
Chris@0
|
35 $this->assertEquals(['O:8:"stdClass":1:{s:3:"foo";s:3:"bar";}'], YamlPecl::decode(YamlPecl::encode([$object])));
|
Chris@0
|
36 $this->assertEquals(0, ini_get('yaml.decode_php'));
|
Chris@0
|
37 }
|
Chris@0
|
38
|
Chris@0
|
39 /**
|
Chris@0
|
40 * Tests decoding YAML node anchors.
|
Chris@0
|
41 *
|
Chris@0
|
42 * @covers ::decode
|
Chris@0
|
43 * @dataProvider providerDecodeTests
|
Chris@0
|
44 */
|
Chris@0
|
45 public function testDecode($string, $data) {
|
Chris@0
|
46 $this->assertEquals($data, YamlPecl::decode($string));
|
Chris@0
|
47 }
|
Chris@0
|
48
|
Chris@0
|
49 /**
|
Chris@0
|
50 * Tests our encode settings.
|
Chris@0
|
51 *
|
Chris@0
|
52 * @covers ::encode
|
Chris@0
|
53 */
|
Chris@0
|
54 public function testEncode() {
|
Chris@0
|
55 $this->assertEquals('---
|
Chris@0
|
56 foo:
|
Chris@0
|
57 bar: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sapien ex, venenatis vitae nisi eu, posuere luctus dolor. Nullam convallis
|
Chris@0
|
58 ...
|
Chris@0
|
59 ', YamlPecl::encode(['foo' => ['bar' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sapien ex, venenatis vitae nisi eu, posuere luctus dolor. Nullam convallis']]));
|
Chris@0
|
60 }
|
Chris@0
|
61
|
Chris@0
|
62 /**
|
Chris@0
|
63 * Tests YAML boolean callback.
|
Chris@0
|
64 *
|
Chris@0
|
65 * @param string $string
|
Chris@0
|
66 * String value for the YAML boolean.
|
Chris@0
|
67 * @param string|bool $expected
|
Chris@0
|
68 * The expected return value.
|
Chris@0
|
69 *
|
Chris@0
|
70 * @covers ::applyBooleanCallbacks
|
Chris@0
|
71 * @dataProvider providerBoolTest
|
Chris@0
|
72 */
|
Chris@0
|
73 public function testApplyBooleanCallbacks($string, $expected) {
|
Chris@0
|
74 $this->assertEquals($expected, YamlPecl::applyBooleanCallbacks($string, 'bool', NULL));
|
Chris@0
|
75 }
|
Chris@0
|
76
|
Chris@0
|
77 /**
|
Chris@0
|
78 * @covers ::getFileExtension
|
Chris@0
|
79 */
|
Chris@0
|
80 public function testGetFileExtension() {
|
Chris@0
|
81 $this->assertEquals('yml', YamlPecl::getFileExtension());
|
Chris@0
|
82 }
|
Chris@0
|
83
|
Chris@0
|
84 /**
|
Chris@0
|
85 * Tests that invalid YAML throws an exception.
|
Chris@0
|
86 *
|
Chris@0
|
87 * @covers ::errorHandler
|
Chris@0
|
88 */
|
Chris@0
|
89 public function testError() {
|
Chris@14
|
90 if (method_exists($this, 'expectException')) {
|
Chris@14
|
91 $this->expectException(InvalidDataTypeException::class);
|
Chris@14
|
92 }
|
Chris@14
|
93 else {
|
Chris@14
|
94 $this->setExpectedException(InvalidDataTypeException::class);
|
Chris@14
|
95 }
|
Chris@0
|
96 YamlPecl::decode('foo: [ads');
|
Chris@0
|
97 }
|
Chris@0
|
98
|
Chris@0
|
99 }
|