diff options
author | Marcus Boerger <helly@php.net> | 2005-04-05 09:23:14 +0000 |
---|---|---|
committer | Marcus Boerger <helly@php.net> | 2005-04-05 09:23:14 +0000 |
commit | 58d45bfe2e50e1f64e4486604ea94a4d6f1ee9c6 (patch) | |
tree | 7bf8bb1fff98091923b65fd3c7106f1d24645ffa | |
parent | d77945ef78aead05a3adb6307ccedc12d0ca49ee (diff) | |
download | php-git-58d45bfe2e50e1f64e4486604ea94a4d6f1ee9c6.tar.gz |
- Add new test
-rwxr-xr-x | ext/spl/tests/spl_autoload_003.phpt | 44 | ||||
-rwxr-xr-x | ext/standard/tests/serialize/005.phpt | 186 |
2 files changed, 230 insertions, 0 deletions
diff --git a/ext/spl/tests/spl_autoload_003.phpt b/ext/spl/tests/spl_autoload_003.phpt new file mode 100755 index 0000000000..00fdd2734f --- /dev/null +++ b/ext/spl/tests/spl_autoload_003.phpt @@ -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 index 0000000000..d67f6fbf70 --- /dev/null +++ b/ext/standard/tests/serialize/005.phpt @@ -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=== |