annotate vendor/brumann/polyfill-unserialize/tests/UnserializeTest.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents
children
rev   line source
Chris@5 1 <?php
Chris@5 2
Chris@5 3 namespace Tests\Brumann\Polyfill;
Chris@5 4
Chris@5 5 use Brumann\Polyfill\Unserialize;
Chris@5 6
Chris@5 7 class UnserializeTest extends \PHPUnit_Framework_TestCase
Chris@5 8 {
Chris@5 9 public function test_unserialize_without_options_returns_instance()
Chris@5 10 {
Chris@5 11 $foo = new Foo();
Chris@5 12 $serialized = serialize($foo);
Chris@5 13
Chris@5 14 $unserialized = Unserialize::unserialize($serialized);
Chris@5 15
Chris@5 16 $this->assertInstanceOf('Tests\\Brumann\\Polyfill\\Foo', $unserialized);
Chris@5 17 }
Chris@5 18
Chris@5 19 public function test_unserialize_with_cqn_returns_instance()
Chris@5 20 {
Chris@5 21 $foo = new Foo();
Chris@5 22 $serialized = serialize($foo);
Chris@5 23 $options = array(
Chris@5 24 'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'),
Chris@5 25 );
Chris@5 26
Chris@5 27 $unserialized = Unserialize::unserialize($serialized, $options);
Chris@5 28
Chris@5 29 $this->assertInstanceOf('Tests\\Brumann\\Polyfill\\Foo', $unserialized);
Chris@5 30 }
Chris@5 31
Chris@5 32 public function test_unserialize_with_fqcn_allowed_returns_instance()
Chris@5 33 {
Chris@5 34 $foo = new Foo();
Chris@5 35 $serialized = serialize($foo);
Chris@5 36 $options = array(
Chris@5 37 'allowed_classes' => array('\\Tests\\Brumann\\Polyfill\\Foo'),
Chris@5 38 );
Chris@5 39
Chris@5 40 $unserialized = Unserialize::unserialize($serialized, $options);
Chris@5 41
Chris@5 42 $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized);
Chris@5 43 }
Chris@5 44
Chris@5 45 public function test_unserialize_with_allowed_classes_false_returns_incomplete_object()
Chris@5 46 {
Chris@5 47 $foo = new Foo();
Chris@5 48 $serialized = serialize($foo);
Chris@5 49 $options = array(
Chris@5 50 'allowed_classes' => false,
Chris@5 51 );
Chris@5 52
Chris@5 53 $unserialized = Unserialize::unserialize($serialized, $options);
Chris@5 54
Chris@5 55 $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized);
Chris@5 56 }
Chris@5 57
Chris@5 58 /**
Chris@5 59 * @requires PHP < 7.0
Chris@5 60 *
Chris@5 61 * @expectedException \PHPUnit_Framework_Error_Warning
Chris@5 62 * @expectedMessage allowed_classes option should be array or boolean
Chris@5 63 */
Chris@5 64 public function test_unserialize_with_allowed_classes_null_behaves_like_php71()
Chris@5 65 {
Chris@5 66 $foo = new Foo();
Chris@5 67 $serialized = serialize($foo);
Chris@5 68 $options = array(
Chris@5 69 'allowed_classes' => null,
Chris@5 70 );
Chris@5 71
Chris@5 72 Unserialize::unserialize($serialized, $options);
Chris@5 73 }
Chris@5 74
Chris@5 75 /**
Chris@5 76 * @expectedException \PHPUnit_Framework_Error_Notice
Chris@5 77 * @expectedExceptionMessage tried to execute a method or access a property of an incomplete object.
Chris@5 78 */
Chris@5 79 public function test_accessing_property_of_incomplete_object_returns_warning()
Chris@5 80 {
Chris@5 81 $bar = new \stdClass();
Chris@5 82 $bar->foo = new Foo();
Chris@5 83 $serialized = serialize($bar);
Chris@5 84 $options = array(
Chris@5 85 'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'),
Chris@5 86 );
Chris@5 87
Chris@5 88 $unserialized = Unserialize::unserialize($serialized, $options);
Chris@5 89
Chris@5 90 $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized);
Chris@5 91 $unserialized->foo;
Chris@5 92 }
Chris@5 93
Chris@5 94 public function test_unserialize_only_parent_object()
Chris@5 95 {
Chris@5 96 $foo = new Foo();
Chris@5 97 $foo->bar = new \stdClass();
Chris@5 98 $serialized = serialize($foo);
Chris@5 99 $options = array(
Chris@5 100 'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'),
Chris@5 101 );
Chris@5 102
Chris@5 103 $unserialized = Unserialize::unserialize($serialized, $options);
Chris@5 104
Chris@5 105 $this->assertInstanceOf('\\Tests\\Brumann\\Polyfill\\Foo', $unserialized);
Chris@5 106 $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized->bar);
Chris@5 107 }
Chris@5 108
Chris@5 109 public function test_unserialize_parent_and_embedded_object()
Chris@5 110 {
Chris@5 111 $foo = new Foo();
Chris@5 112 $foo->foo = new Foo();
Chris@5 113 $serialized = serialize($foo);
Chris@5 114 $options = array(
Chris@5 115 'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'),
Chris@5 116 );
Chris@5 117
Chris@5 118 $unserialized = Unserialize::unserialize($serialized, $options);
Chris@5 119
Chris@5 120 $this->assertInstanceOf('\\Tests\\Brumann\\Polyfill\\Foo', $unserialized);
Chris@5 121 $this->assertInstanceOf('\\Tests\\Brumann\\Polyfill\\Foo', $unserialized->foo);
Chris@5 122 }
Chris@5 123
Chris@5 124 public function test_unserialize_with_allowed_classes_false_serializes_string()
Chris@5 125 {
Chris@5 126 $string = 'This is an ordinary string';
Chris@5 127 $serialized = serialize($string);
Chris@5 128 $options = array(
Chris@5 129 'allowed_classes' => false,
Chris@5 130 );
Chris@5 131
Chris@5 132 $unserialized = Unserialize::unserialize($serialized, $options);
Chris@5 133
Chris@5 134 $this->assertEquals($string, $unserialized);
Chris@5 135 }
Chris@5 136
Chris@5 137 public function test_unserialize_with_allowed_classes_false_serializes_bool()
Chris@5 138 {
Chris@5 139 $bool = true;
Chris@5 140 $serialized = serialize($bool);
Chris@5 141 $options = array(
Chris@5 142 'allowed_classes' => false,
Chris@5 143 );
Chris@5 144
Chris@5 145 $unserialized = Unserialize::unserialize($serialized, $options);
Chris@5 146
Chris@5 147 $this->assertEquals($bool, $unserialized);
Chris@5 148 }
Chris@5 149
Chris@5 150 public function test_unserialize_with_allowed_classes_false_serializes_array()
Chris@5 151 {
Chris@5 152 $array = array(
Chris@5 153 'key' => 42,
Chris@5 154 1 => 'foo',
Chris@5 155 'bar' => 'baz',
Chris@5 156 2 => 23,
Chris@5 157 4 => true,
Chris@5 158 );
Chris@5 159 $serialized = serialize($array);
Chris@5 160 $options = array(
Chris@5 161 'allowed_classes' => false,
Chris@5 162 );
Chris@5 163
Chris@5 164 $unserialized = Unserialize::unserialize($serialized, $options);
Chris@5 165
Chris@5 166 $this->assertSame($array, $unserialized);
Chris@5 167 }
Chris@5 168
Chris@5 169 public function test_double_serialized_unserializes_as_first_serialized()
Chris@5 170 {
Chris@5 171 $foo = new Foo();
Chris@5 172 $first = serialize($foo);
Chris@5 173 $second = serialize($first);
Chris@5 174 $options = array(
Chris@5 175 'allowed_classes' => false,
Chris@5 176 );
Chris@5 177
Chris@5 178 $unserialized = Unserialize::unserialize($second, $options);
Chris@5 179
Chris@5 180 $this->assertSame($first, $unserialized);
Chris@5 181 }
Chris@5 182
Chris@5 183 public function test_double_unserialize_double_serialized()
Chris@5 184 {
Chris@5 185 $foo = new Foo();
Chris@5 186 $serialized = serialize(serialize($foo));
Chris@5 187 $options = array(
Chris@5 188 'allowed_classes' => false,
Chris@5 189 );
Chris@5 190
Chris@5 191 $first = Unserialize::unserialize($serialized, $options);
Chris@5 192 $unserialized = Unserialize::unserialize($first, $options);
Chris@5 193
Chris@5 194 $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized);
Chris@5 195 }
Chris@5 196 }