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

Reply via email to