Chris@18: assertInstanceOf('Tests\\Brumann\\Polyfill\\Foo', $unserialized); Chris@18: } Chris@18: Chris@18: public function test_unserialize_with_cqn_returns_instance() Chris@18: { Chris@18: $foo = new Foo(); Chris@18: $serialized = serialize($foo); Chris@18: $options = array( Chris@18: 'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'), Chris@18: ); Chris@18: Chris@18: $unserialized = Unserialize::unserialize($serialized, $options); Chris@18: Chris@18: $this->assertInstanceOf('Tests\\Brumann\\Polyfill\\Foo', $unserialized); Chris@18: } Chris@18: Chris@18: public function test_unserialize_with_fqcn_allowed_returns_instance() Chris@18: { Chris@18: $foo = new Foo(); Chris@18: $serialized = serialize($foo); Chris@18: $options = array( Chris@18: 'allowed_classes' => array('\\Tests\\Brumann\\Polyfill\\Foo'), Chris@18: ); Chris@18: Chris@18: $unserialized = Unserialize::unserialize($serialized, $options); Chris@18: Chris@18: $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized); Chris@18: } Chris@18: Chris@18: public function test_unserialize_with_allowed_classes_false_returns_incomplete_object() Chris@18: { Chris@18: $foo = new Foo(); Chris@18: $serialized = serialize($foo); Chris@18: $options = array( Chris@18: 'allowed_classes' => false, Chris@18: ); Chris@18: Chris@18: $unserialized = Unserialize::unserialize($serialized, $options); Chris@18: Chris@18: $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized); Chris@18: } Chris@18: Chris@18: /** Chris@18: * @requires PHP < 7.0 Chris@18: * Chris@18: * @expectedException \PHPUnit_Framework_Error_Warning Chris@18: * @expectedMessage allowed_classes option should be array or boolean Chris@18: */ Chris@18: public function test_unserialize_with_allowed_classes_null_behaves_like_php71() Chris@18: { Chris@18: $foo = new Foo(); Chris@18: $serialized = serialize($foo); Chris@18: $options = array( Chris@18: 'allowed_classes' => null, Chris@18: ); Chris@18: Chris@18: Unserialize::unserialize($serialized, $options); Chris@18: } Chris@18: Chris@18: /** Chris@18: * @expectedException \PHPUnit_Framework_Error_Notice Chris@18: * @expectedExceptionMessage tried to execute a method or access a property of an incomplete object. Chris@18: */ Chris@18: public function test_accessing_property_of_incomplete_object_returns_warning() Chris@18: { Chris@18: $bar = new \stdClass(); Chris@18: $bar->foo = new Foo(); Chris@18: $serialized = serialize($bar); Chris@18: $options = array( Chris@18: 'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'), Chris@18: ); Chris@18: Chris@18: $unserialized = Unserialize::unserialize($serialized, $options); Chris@18: Chris@18: $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized); Chris@18: $unserialized->foo; Chris@18: } Chris@18: Chris@18: public function test_unserialize_only_parent_object() Chris@18: { Chris@18: $foo = new Foo(); Chris@18: $foo->bar = new \stdClass(); Chris@18: $serialized = serialize($foo); Chris@18: $options = array( Chris@18: 'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'), Chris@18: ); Chris@18: Chris@18: $unserialized = Unserialize::unserialize($serialized, $options); Chris@18: Chris@18: $this->assertInstanceOf('\\Tests\\Brumann\\Polyfill\\Foo', $unserialized); Chris@18: $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized->bar); Chris@18: } Chris@18: Chris@18: public function test_unserialize_parent_and_embedded_object() Chris@18: { Chris@18: $foo = new Foo(); Chris@18: $foo->foo = new Foo(); Chris@18: $serialized = serialize($foo); Chris@18: $options = array( Chris@18: 'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'), Chris@18: ); Chris@18: Chris@18: $unserialized = Unserialize::unserialize($serialized, $options); Chris@18: Chris@18: $this->assertInstanceOf('\\Tests\\Brumann\\Polyfill\\Foo', $unserialized); Chris@18: $this->assertInstanceOf('\\Tests\\Brumann\\Polyfill\\Foo', $unserialized->foo); Chris@18: } Chris@18: Chris@18: public function test_unserialize_with_allowed_classes_false_serializes_string() Chris@18: { Chris@18: $string = 'This is an ordinary string'; Chris@18: $serialized = serialize($string); Chris@18: $options = array( Chris@18: 'allowed_classes' => false, Chris@18: ); Chris@18: Chris@18: $unserialized = Unserialize::unserialize($serialized, $options); Chris@18: Chris@18: $this->assertEquals($string, $unserialized); Chris@18: } Chris@18: Chris@18: public function test_unserialize_with_allowed_classes_false_serializes_bool() Chris@18: { Chris@18: $bool = true; Chris@18: $serialized = serialize($bool); Chris@18: $options = array( Chris@18: 'allowed_classes' => false, Chris@18: ); Chris@18: Chris@18: $unserialized = Unserialize::unserialize($serialized, $options); Chris@18: Chris@18: $this->assertEquals($bool, $unserialized); Chris@18: } Chris@18: Chris@18: public function test_unserialize_with_allowed_classes_false_serializes_array() Chris@18: { Chris@18: $array = array( Chris@18: 'key' => 42, Chris@18: 1 => 'foo', Chris@18: 'bar' => 'baz', Chris@18: 2 => 23, Chris@18: 4 => true, Chris@18: ); Chris@18: $serialized = serialize($array); Chris@18: $options = array( Chris@18: 'allowed_classes' => false, Chris@18: ); Chris@18: Chris@18: $unserialized = Unserialize::unserialize($serialized, $options); Chris@18: Chris@18: $this->assertSame($array, $unserialized); Chris@18: } Chris@18: Chris@18: public function test_double_serialized_unserializes_as_first_serialized() Chris@18: { Chris@18: $foo = new Foo(); Chris@18: $first = serialize($foo); Chris@18: $second = serialize($first); Chris@18: $options = array( Chris@18: 'allowed_classes' => false, Chris@18: ); Chris@18: Chris@18: $unserialized = Unserialize::unserialize($second, $options); Chris@18: Chris@18: $this->assertSame($first, $unserialized); Chris@18: } Chris@18: Chris@18: public function test_double_unserialize_double_serialized() Chris@18: { Chris@18: $foo = new Foo(); Chris@18: $serialized = serialize(serialize($foo)); Chris@18: $options = array( Chris@18: 'allowed_classes' => false, Chris@18: ); Chris@18: Chris@18: $first = Unserialize::unserialize($serialized, $options); Chris@18: $unserialized = Unserialize::unserialize($first, $options); Chris@18: Chris@18: $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized); Chris@18: } Chris@18: }