cvs: php-src /ext/standard/tests/serialize 005.phpt
| From: | Marcus Boerger | Date: | Tue, 05 Apr 2005 09:18:18 +0000 |
| Subject: | cvs: php-src /ext/standard/tests/serialize 005.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-31239@lists.php.net to get a copy of this message | ||
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===