]> granicus.if.org Git - php/commitdiff
- Add new test
authorMarcus Boerger <helly@php.net>
Tue, 5 Apr 2005 09:23:14 +0000 (09:23 +0000)
committerMarcus Boerger <helly@php.net>
Tue, 5 Apr 2005 09:23:14 +0000 (09:23 +0000)
ext/spl/tests/spl_autoload_003.phpt [new file with mode: 0755]
ext/standard/tests/serialize/005.phpt [new file with mode: 0755]

diff --git a/ext/spl/tests/spl_autoload_003.phpt b/ext/spl/tests/spl_autoload_003.phpt
new file mode 100755 (executable)
index 0000000..00fdd27
--- /dev/null
@@ -0,0 +1,44 @@
+--TEST--
+SPL: spl_autoload() and friends
+--INI--
+include_path=.
+--FILE--
+<?php
+
+function TestFunc1($classname)
+{
+       echo __METHOD__ . "($classname)\n";
+}
+
+function TestFunc2($classname)
+{
+       echo __METHOD__ . "($classname)\n";
+       throw new Exception("Class $classname missing");
+}
+
+function TestFunc3($classname)
+{
+       echo __METHOD__ . "($classname)\n";
+}
+
+spl_autoload_register("TestFunc1");
+spl_autoload_register("TestFunc2");
+spl_autoload_register("TestFunc3");
+
+try
+{
+       var_dump(class_exists("TestClass", true));
+}
+catch(Exception $e)
+{
+       echo 'Exception: ' . $e->getMessage() . "\n";
+}
+
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECTF--
+TestFunc1(TestClass)
+TestFunc2(TestClass)
+Exception: Class TestClass missing
+===DONE===
diff --git a/ext/standard/tests/serialize/005.phpt b/ext/standard/tests/serialize/005.phpt
new file mode 100755 (executable)
index 0000000..d67f6fb
--- /dev/null
@@ -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===