diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/brumann/polyfill-unserialize/tests/UnserializeTest.php	Thu May 09 15:34:47 2019 +0100
@@ -0,0 +1,196 @@
+<?php
+
+namespace Tests\Brumann\Polyfill;
+
+use Brumann\Polyfill\Unserialize;
+
+class UnserializeTest extends \PHPUnit_Framework_TestCase
+{
+    public function test_unserialize_without_options_returns_instance()
+    {
+        $foo = new Foo();
+        $serialized = serialize($foo);
+
+        $unserialized = Unserialize::unserialize($serialized);
+
+        $this->assertInstanceOf('Tests\\Brumann\\Polyfill\\Foo', $unserialized);
+    }
+
+    public function test_unserialize_with_cqn_returns_instance()
+    {
+        $foo = new Foo();
+        $serialized = serialize($foo);
+        $options = array(
+            'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'),
+        );
+
+        $unserialized = Unserialize::unserialize($serialized, $options);
+
+        $this->assertInstanceOf('Tests\\Brumann\\Polyfill\\Foo', $unserialized);
+    }
+
+    public function test_unserialize_with_fqcn_allowed_returns_instance()
+    {
+        $foo = new Foo();
+        $serialized = serialize($foo);
+        $options = array(
+            'allowed_classes' => array('\\Tests\\Brumann\\Polyfill\\Foo'),
+        );
+
+        $unserialized = Unserialize::unserialize($serialized, $options);
+
+        $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized);
+    }
+
+    public function test_unserialize_with_allowed_classes_false_returns_incomplete_object()
+    {
+        $foo = new Foo();
+        $serialized = serialize($foo);
+        $options = array(
+            'allowed_classes' => false,
+        );
+
+        $unserialized = Unserialize::unserialize($serialized, $options);
+
+        $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized);
+    }
+
+    /**
+     * @requires PHP < 7.0
+     *
+     * @expectedException \PHPUnit_Framework_Error_Warning
+     * @expectedMessage allowed_classes option should be array or boolean
+     */
+    public function test_unserialize_with_allowed_classes_null_behaves_like_php71()
+    {
+        $foo = new Foo();
+        $serialized = serialize($foo);
+        $options = array(
+            'allowed_classes' => null,
+        );
+
+        Unserialize::unserialize($serialized, $options);
+    }
+
+    /**
+     * @expectedException \PHPUnit_Framework_Error_Notice
+     * @expectedExceptionMessage tried to execute a method or access a property of an incomplete object.
+     */
+    public function test_accessing_property_of_incomplete_object_returns_warning()
+    {
+        $bar = new \stdClass();
+        $bar->foo = new Foo();
+        $serialized = serialize($bar);
+        $options = array(
+            'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'),
+        );
+
+        $unserialized = Unserialize::unserialize($serialized, $options);
+
+        $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized);
+        $unserialized->foo;
+    }
+
+    public function test_unserialize_only_parent_object()
+    {
+        $foo = new Foo();
+        $foo->bar = new \stdClass();
+        $serialized = serialize($foo);
+        $options = array(
+            'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'),
+        );
+
+        $unserialized = Unserialize::unserialize($serialized, $options);
+
+        $this->assertInstanceOf('\\Tests\\Brumann\\Polyfill\\Foo', $unserialized);
+        $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized->bar);
+    }
+
+    public function test_unserialize_parent_and_embedded_object()
+    {
+        $foo = new Foo();
+        $foo->foo = new Foo();
+        $serialized = serialize($foo);
+        $options = array(
+            'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'),
+        );
+
+        $unserialized = Unserialize::unserialize($serialized, $options);
+
+        $this->assertInstanceOf('\\Tests\\Brumann\\Polyfill\\Foo', $unserialized);
+        $this->assertInstanceOf('\\Tests\\Brumann\\Polyfill\\Foo', $unserialized->foo);
+    }
+
+    public function test_unserialize_with_allowed_classes_false_serializes_string()
+    {
+        $string = 'This is an ordinary string';
+        $serialized = serialize($string);
+        $options = array(
+            'allowed_classes' => false,
+        );
+
+        $unserialized = Unserialize::unserialize($serialized, $options);
+
+        $this->assertEquals($string, $unserialized);
+    }
+
+    public function test_unserialize_with_allowed_classes_false_serializes_bool()
+    {
+        $bool = true;
+        $serialized = serialize($bool);
+        $options = array(
+            'allowed_classes' => false,
+        );
+
+        $unserialized = Unserialize::unserialize($serialized, $options);
+
+        $this->assertEquals($bool, $unserialized);
+    }
+
+    public function test_unserialize_with_allowed_classes_false_serializes_array()
+    {
+        $array = array(
+            'key' => 42,
+            1 => 'foo',
+            'bar' => 'baz',
+            2 => 23,
+            4 => true,
+        );
+        $serialized = serialize($array);
+        $options = array(
+            'allowed_classes' => false,
+        );
+
+        $unserialized = Unserialize::unserialize($serialized, $options);
+
+        $this->assertSame($array, $unserialized);
+    }
+
+    public function test_double_serialized_unserializes_as_first_serialized()
+    {
+        $foo = new Foo();
+        $first = serialize($foo);
+        $second = serialize($first);
+        $options = array(
+            'allowed_classes' => false,
+        );
+
+        $unserialized = Unserialize::unserialize($second, $options);
+
+        $this->assertSame($first, $unserialized);
+    }
+
+    public function test_double_unserialize_double_serialized()
+    {
+        $foo = new Foo();
+        $serialized = serialize(serialize($foo));
+        $options = array(
+            'allowed_classes' => false,
+        );
+
+        $first = Unserialize::unserialize($serialized, $options);
+        $unserialized = Unserialize::unserialize($first, $options);
+
+        $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized);
+    }
+}