annotate vendor/brumann/polyfill-unserialize/tests/UnserializeTest.php @ 19:fa3358dc1485 tip

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