diff options
author | Dave Beazley <dave-swig@dabeaz.com> | 2002-11-30 22:01:28 +0000 |
---|---|---|
committer | Dave Beazley <dave-swig@dabeaz.com> | 2002-11-30 22:01:28 +0000 |
commit | 12a43edc2df8853e8e0315f742e57be88f0c4269 (patch) | |
tree | e3237f5f8c0a67c9bfa9bb5d6d095a739a49e4b2 /Examples/test-suite/php4/tests.php4 | |
parent | 5fcae5eb66d377e1c3f81da7465c44a62295a72b (diff) | |
download | swig-12a43edc2df8853e8e0315f742e57be88f0c4269.tar.gz |
The great merge
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@4141 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'Examples/test-suite/php4/tests.php4')
-rw-r--r-- | Examples/test-suite/php4/tests.php4 | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/Examples/test-suite/php4/tests.php4 b/Examples/test-suite/php4/tests.php4 new file mode 100644 index 000000000..13c732042 --- /dev/null +++ b/Examples/test-suite/php4/tests.php4 @@ -0,0 +1,217 @@ +<?php + +// do we have true global vars or just GETSET functions? +// Used to filter out get/set global functions to fake vars... +define(GETSET,1); + +$_original_functions=get_defined_functions(); +$_original_globals=1; +$_original_classes=get_declared_classes(); +$_original_globals=array_keys($GLOBALS); + +class check { + function get_extra_classes($ref=FALSE) { + static $extra; + global $_original_classes; + if ($ref===FALSE) $f=$_original_classes; + if (! is_array($extra)) { + $df=array_flip(get_declared_classes()); + foreach($_original_classes as $class) unset($df[$class]); + $extra=array_keys($df); + } + return $extra; + } + + function get_extra_functions($ref=FALSE,$gs=false) { + static $extra; + static $extrags; // for get/setters + global $_original_functions; + if ($ref===FALSE) $f=$_original_functions; + if (! is_array($extra) || $gs) { + $extra=array(); + $extrags=array(); + $df=get_defined_functions(); + $df=array_flip($df[internal]); + foreach($_original_functions[internal] as $func) unset($df[$func]); + // Now chop out any get/set accessors + foreach(array_keys($df) as $func) if (GETSET && ereg('_[gs]et$',$func)) $extrags[]=$func; + else $extra[]=$func; +// $extra=array_keys($df); + } + if ($gs) return $extrags; + return $extra; + } + + function get_extra_globals($ref=FALSE) { + static $extra; + global $_original_globals; + if (! is_array($extra)) { + if (GETSET) { + $_extra=array(); + foreach(check::get_extra_functions(false,1) as $global) { + if (ereg('^(.*)_[sg]et$',$global,$match)) $_extra[$match[1]]=1; + } + $extra=array_keys($_extra); + } else { + if ($ref===FALSE) $ref=$_original_globals; + if (! is_array($extra)) { + $df=array_flip(array_keys($GLOBALS)); + foreach($_original_globals as $func) unset($df[$func]); + // MASK xxxx_LOADED__ variables + foreach(array_keys($df) as $func) if (ereg('_LOADED__$',$func)) unset($df[$func]); + $extra=array_keys($df); + } + } + } + return $extra; + } + + function classname($string,$object) { + if ($string!=($classname=get_class($object))) return check::fail("Object: $object is of class %s not class %s",$classname,$string); + return TRUE; + } + + function classmethods($classname,$methods) { + if (is_object($classname)) $classname=get_class($classname); + $classmethods=array_flip(get_class_methods($classname)); + $missing=array(); + $extra=array(); + foreach($methods as $method) { + if (! isset($classmethods[$method])) $missing[]=$method; + else unset($classmethods[$method]); + } + $extra=array_keys($classmethods); + if ($missing) $message[]="does not have these methods:\n ".join(",",$missing); + if ($extra) $message[]="does have these extra methods:\n ".join(",",$extra); + if ($message) { + return check::fail("Class %s %s\nFull class list:\n %s\n",$classname,join("\nbut ",$message),join("\n ",get_class_methods($classname))); + } + return TRUE; + } + + function set($var,$value) { + $func=$var."_set"; + if (GETSET) $func($value); + else $_GLOBALS[$var]=$value; + } + + function &get($var) { + $func=$var."_get"; + if (GETSET) return $func(); + else return $_GLOBALS[$var]; + } + + function is_a($a,$b) { + if (is_object($a)) $a=strtolower(get_class($a)); + if (is_object($b)) $a=strtolower(get_class($b)); + $parents=array(); + $c=$a; + while($c!=$b && $c) { + $parents[]=$c; + $c=strtolower(get_parent_class($c)); + } + if ($c!=$b) return check::fail("Class $a does not inherit from class $b\nHierachy:\n %s\n",join("\n ",$parents)); + return TRUE; + } + + function classparent($a,$b) { + if (is_object($a)) $a=get_class($a); + if (is_object($b)) $a=get_class($b); + $parent=get_parent_class($a); + + if ($parent!=$b) return check::fail("Class $a parent not actually $b but $parent"); + return TRUE; + } + + function classes($classes) { + if (! is_array($classes)) $classes=array($classes); + $message=array(); + $missing=array(); + $extra=array_flip(check::get_extra_classes()); + foreach($classes as $class) { + if (! class_exists($class)) $missing[]=$class; + else unset($extra[$class]); + } + if ($missing) $message[]=sprintf("Classes missing: %s",join(",",$missing)); + if ($extra) $message[]=sprintf("These extra classes are defined: %s",join(",",array_keys($extra))); + if ($message) return check::fail(join("\n ",$message)); + return TRUE; + } + + function functions($functions) { + if (! is_array($functions)) $functions=array($functions); + $message=array(); + $missing=array(); + $extra=array_flip(check::get_extra_functions()); + + foreach ($functions as $func) { + if (! function_exists($func)) $missing[]=$func; + else unset($extra[$func]); + } + if ($missing) $message[]=sprintf("Functions missing: %s",join(",",$missing)); + if ($extra) $message[]=sprintf("These extra methods are defined: %s",join(",",array_keys($extra))); + if ($message) return check::fail(join("\n ",$message)); + return TRUE; + } + + function globals($globals) { + if (! is_array($globals)) $globals=array($globals); + $message=array(); + $missing=array(); + $extra=array_flip(check::get_extra_globals()); + foreach ($globals as $glob) { + if (GETSET) { + if (! isset($extra[$glob])) $missing[]=$glob; + else unset($extra[$glob]); + } else { + if (! isset($GLOBALS[$glob])) $missing[]=$glob; + else unset($extra[$glob]); + } + } + if ($missing) $message[]=sprintf("Globals missing: %s",join(",",$missing)); + if ($extra) $message[]=sprintf("These extra globals are defined: %s",join(",",array_keys($extra))); + if ($message) return check::fail(join("\n ",$message)); + return TRUE; + + } + + function functionref($a,$type,$message) { + if (! eregi("^_[a-f0-9]+$type$",$a)) return check::fail($message); + return TRUE; + } + + function equal($a,$b,$message) { + if (! ($a===$b)) return check::fail($message); + return TRUE; + } + + function resource($a,$b,$message) { + $resource=trim(check::var_dump($a)); + if (! eregi("^resource\([0-9]+\) of type \($b\)",$resource)) return check::fail($message); + return TRUE; + } + + function isnull($a,$message) { + $value=trim(check::var_dump($a)); + return check::equal($value,"NULL",$message); + } + + function var_dump($arg) { + ob_start(); + var_dump($arg); + $result=ob_get_contents(); + ob_end_clean(); + return $result; + } + + function fail($pattern) { + $args=func_get_args(); + print("Failed on: ".call_user_func_array("sprintf",$args)."\n"); + exit(1); + } + + function done() { + print $_SERVER[argv][0]." ok\n"; + } +} +?> |