helly Tue Apr 5 05:18:18 2005 EDT Modified files: /php-src/ext/standard/tests/serialize 005.phpt Log: - Add new test http://cvs.php.net/diff.php/php-src/ext/standard/tests/serialize/005.phpt?r1=1.2&r2=1.3&ty=u Index: php-src/ext/standard/tests/serialize/005.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/005.phpt:1.3 --- /dev/null Tue Apr 5 05:18:18 2005 +++ php-src/ext/standard/tests/serialize/005.phpt Tue Apr 5 05:18:18 2005 @@ -0,0 +1,186 @@ +--TEST-- +serialize()/unserialize() objects +--SKIPIF-- +<?php if (!interface_exists('Serializable')) die('skip Interface Serialzable not defined'); ?> +--FILE-- +<?php + +// This test verifies that old and new style (un)serializing do not interfere. + +function do_autoload($class_name) +{ + if ($class_name != 'autoload_not_available') + { + require_once(dirname(__FILE__) . '/' . strtolower($class_name) . '.p5c'); + } + echo __FUNCTION__ . "($class_name)\n"; +} + +function unserializer($class_name) +{ + echo __METHOD__ . "($class_name)\n"; + switch($class_name) + { + case 'TestNAOld': + eval("class TestNAOld extends TestOld {}"); + break; + case 'TestNANew': + eval("class TestNANew extends TestNew {}"); + break; + case 'TestNANew2': + eval("class TestNANew2 extends TestNew {}"); + break; + default: + echo "Try __autoload()\n"; + if (!function_exists('__autoload')) + { + eval('function __autoload($class_name) { do_autoload($class_name); }'); + } + __autoload($class_name); + break; + } +} + +ini_set('unserialize_callback_func', 'unserializer'); + +class TestOld +{ + function serialize() + { + echo __METHOD__ . "()\n"; + } + + function unserialize($serialized) + { + echo __METHOD__ . "()\n"; + } + + function __wakeup() + { + echo __METHOD__ . "()\n"; + } + + function __sleep() + { + echo __METHOD__ . "()\n"; + return array(); + } +} + +class TestNew implements Serializable +{ + protected static $check = 0; + + function serialize() + { + echo __METHOD__ . "()\n"; + switch(++self::$check) + { + case 1: + return NULL; + case 2: + return "2"; + } + } + + function unserialize($serialized) + { + echo __METHOD__ . "()\n"; + } + + function __wakeup() + { + echo __METHOD__ . "()\n"; + } + + function __sleep() + { + echo __METHOD__ . "()\n"; + } +} + +echo "===O1===\n"; +var_dump($ser = serialize(new TestOld)); +var_dump(unserialize($ser)); + +echo "===N1===\n"; +var_dump($ser = serialize(new TestNew)); +var_dump(unserialize($ser)); + +echo "===N2===\n"; +var_dump($ser = serialize(new TestNew)); +var_dump(unserialize($ser)); + +echo "===NAOld===\n"; +var_dump(unserialize('O:9:"TestNAOld":0:{}')); + +echo "===NANew===\n"; +var_dump(unserialize('O:9:"TestNANew":0:{}')); + +echo "===NANew2===\n"; +var_dump(unserialize('C:10:"TestNANew2":0:{}')); + +echo "===AutoOld===\n"; +var_dump(unserialize('O:19:"autoload_implements":0:{}')); + +// Now we have __autoload(), that will be called before the old style header. +// If the old style handler also fails to register the class then the object +// becomes an incomplete class instance. + +echo "===AutoNA===\n"; +var_dump(unserialize('O:22:"autoload_not_available":0:{}')); +?> +===DONE=== +<?php exit(0); ?> +--EXPECTF-- +===O1=== +TestOld::__sleep() +string(18) "O:7:"TestOld":0:{}" +TestOld::__wakeup() +object(TestOld)#%d (0) { +} +===N1=== +TestNew::serialize() +string(2) "N;" +NULL +===N2=== +TestNew::serialize() +string(19) "C:7:"TestNew":1:{2}" +TestNew::unserialize() +object(TestNew)#%d (0) { +} +===NAOld=== +unserializer(TestNAOld) +TestOld::__wakeup() +object(TestNAOld)#%d (0) { +} +===NANew=== +unserializer(TestNANew) +TestNew::__wakeup() +object(TestNANew)#%d (0) { +} +===NANew2=== +unserializer(TestNANew2) +TestNew::unserialize() +object(TestNANew2)#%d (0) { +} +===AutoOld=== +unserializer(autoload_implements) +Try __autoload() +do_autoload(autoload_interface) +do_autoload(autoload_implements) +object(autoload_implements)#%d (0) { +} +===AutoNA=== +do_autoload(autoload_not_available) +unserializer(autoload_not_available) +Try __autoload() +do_autoload(autoload_not_available) +do_autoload(autoload_not_available) + +Warning: unserialize(): Function unserializer() hasn't defined the class it was called for in %s005.php on line %d +object(__PHP_Incomplete_Class)#1 (1) { + ["__PHP_Incomplete_Class_Name"]=> + string(22) "autoload_not_available" +} +===DONE===
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php