getClassNames(), function ($e) { return !preg_match('/^SWIG\\\\/', $e); })); foreach($classes as $class) { if (! class_exists($class)) $missing[]=$class; else unset($extra[$class]); } if ($missing) $message[]=sprintf("Classes missing: %s",join(",",$missing)); if ($message) return check::fail(join("\n ",$message)); if ($extra) $message[]=sprintf("These extra classes are defined: %s",join(",",array_keys($extra))); if ($message) return check::warn(join("\n ",$message)); return TRUE; } static function functions($functions) { if (! is_array($functions)) $functions=array($functions); $message=array(); $missing=array(); $extra = self::get_extension()->getFunctions(); foreach ($functions as $func) { if (! function_exists($func)) $missing[]=$func; else unset($extra[$func]); } $extra = array_filter(array_keys($extra), function ($e) { return !preg_match('/_[gs]et$|^is_python_/', $e); }); if ($missing) $message[]=sprintf("Functions missing: %s",join(",",$missing)); if ($message) return check::fail(join("\n ",$message)); if ($extra) $message[]=sprintf("These extra functions are defined: %s",join(",",$extra)); if ($message) return check::warn(join("\n ",$message)); return TRUE; } static function globals($globals) { if (! is_array($globals)) $globals=array($globals); $message=array(); $missing=array(); $extra = self::get_extension()->getFunctions(); foreach ($globals as $glob) { if (! function_exists($glob . "_get") && ! function_exists($glob . "_set")) $missing[]=$glob; else { unset($extra[$glob . "_get"]); unset($extra[$glob . "_set"]); } } $extra = array_filter(array_keys($extra), function ($e) { return preg_match('/_[gs]et$/', $e); }); if ($missing) $message[]=sprintf("Globals missing: %s",join(",",$missing)); if ($message) return check::fail(join("\n ",$message)); if ($extra) $message[]=sprintf("These extra globals are defined: %s",join(",",$extra)); if ($message) return check::warn(join("\n ",$message)); return TRUE; } static function constants($constants) { if (! is_array($constants)) $constants=array($constants); $message=array(); $missing=array(); $extra = self::get_extension()->getConstants(); unset($extra['swig_runtime_data_type_pointer']); foreach($constants as $constant) { if (! defined($constant)) $missing[]=$constant; else unset($extra[$constant]); } if ($missing) $message[]=sprintf("Constants missing: %s",join(",",$missing)); if ($message) return check::fail(join("\n ",$message)); if ($extra) $message[]=sprintf("These extra constants are defined: %s",join(",",array_keys($extra))); if ($message) return check::warn(join("\n ",$message)); return TRUE; } static function functionref($a,$type,$message) { if (! preg_match("/^_[a-f0-9]+$type$/i", $a)) return check::fail($message); return TRUE; } static function equal($a,$b,$message=null) { if (! ($a===$b)) return check::fail_($message, "'$a'!=='$b'"); return TRUE; } static function equivalent($a,$b,$message=null) { if (! ($a==$b)) return check::fail_($message, "'$a'!='$b'"); return TRUE; } static function str_contains($a,$b,$message=null) { # Use strpos as PHP function str_contains requires PHP 8 return check::equal(strpos($a,$b)!==false,true,$message); } static function isnull($a,$message=null) { return check::equal($a,NULL,$message); } private static function fail_($message, $pattern) { $bt = debug_backtrace(0); $bt = $bt[array_key_last($bt)-1]; print("{$bt['file']}:{$bt['line']}: Failed on: "); if ($message !== NULL) print("$message: "); $args=func_get_args(); array_shift($args); print(call_user_func_array("sprintf",$args)."\n"); exit(1); } static function fail($pattern) { check::fail_(null, $pattern); } static function warn($pattern) { $args=func_get_args(); if (self::$_werror) self::fail($pattern); print("Warning on: ".call_user_func_array("sprintf",$args)."\n"); return FALSE; } static function done() { # print $_SERVER[argv][0]." ok\n"; } }