diff options
Diffstat (limited to 'ext/soap/interop/test.utility.php')
-rw-r--r-- | ext/soap/interop/test.utility.php | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/ext/soap/interop/test.utility.php b/ext/soap/interop/test.utility.php new file mode 100644 index 0000000..5b1f699 --- /dev/null +++ b/ext/soap/interop/test.utility.php @@ -0,0 +1,143 @@ +<?php + +function timestamp_to_soap_datetime($t) { + return date('Y-m-d\TH:i:sO',$t); +} + +function soap_datetime_to_timestamp($t) { + /* Ignore Microsecconds */ + $iso8601 = '(-?[0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(\.[0-9]*)?(Z|[+\-][0-9]{4}|[+\-][0-9]{2}:[0-9]{2})?'; + if (!is_int($t)) { + if (!ereg($iso8601,$t,$r)) { + return false; + } + $t = gmmktime($r[4],$r[5],$r[6],$r[2],$r[3],$r[1]); + if (!empty($r[8]) && $r[8] != 'Z') { + $op = substr($r[8],0,1); + $h = substr($r[8],1,2); + if (strstr($r[8],':')) { + $m = substr($r[8],4,2); + } else { + $m = substr($r[8],3,2); + } + $t += (($op == "-"?1:-1) * $h * 60 + $m) * 60; + } + } + return $t; +} + +function date_compare($f1,$f2) +{ + return soap_datetime_to_timestamp($f1) == soap_datetime_to_timestamp($f2); +} + +function hex_compare($f1, $f2) +{ + return strcasecmp($f1,$f2) == 0; +} + +function number_compare($f1, $f2) +{ + # figure out which has the least fractional digits + preg_match('/.*?\.(.*)/',$f1,$m1); + preg_match('/.*?\.(.*)/',$f2,$m2); + #print_r($m1); + # always use at least 2 digits of precision + $d = max(min(strlen(count($m1)?$m1[1]:'0'),strlen(count($m2)?$m2[1]:'0')),2); + $f1 = round($f1, $d); + $f2 = round($f2, $d); + return $f1 == $f2; +// return bccomp($f1, $f2, $d) == 0; +} + +function boolean_compare($f1, $f2) +{ + if (($f1 == 'true' || $f1 === TRUE || $f1 != 0) && + ($f2 == 'true' || $f2 === TRUE || $f2 != 0)) return TRUE; + if (($f1 == 'false' || $f1 === FALSE || $f1 == 0) && + ($f2 == 'false' || $f2 === FALSE || $f2 == 0)) return TRUE; + return FALSE; +} + +function string_compare($e1, $e2) +{ + if (is_numeric($e1) && is_numeric($e2)) { + return number_compare($e1, $e2); + } + # handle dateTime comparison + $e1_type = gettype($e1); + $e2_type = gettype($e2); + $ok = FALSE; + if ($e1_type == "string") { +// $dt = new SOAP_Type_dateTime(); +// $ok = $dt->compare($e1, $e2) == 0; + $oj = false; + } + return $ok || $e1 == $e2 || strcasecmp(trim($e1), trim($e2)) == 0; +} + +function array_compare(&$ar1, &$ar2) { + if (gettype($ar1) != 'array' || gettype($ar2) != 'array') return FALSE; + if (count($ar1) != count($ar2)) return FALSE; + foreach ($ar1 as $k => $v) { + if (!array_key_exists($k,$ar2)) return FALSE; + if (!compare($v,$ar2[$k])) return FALSE; + } + return TRUE; +} + +function object_compare(&$obj1, &$obj2) { + if (gettype($obj1) != 'object' || gettype($obj2) != 'object') return FALSE; +// if (class_name(obj1) != class_name(obj2)) return FALSE; + $ar1 = (array)$obj1; + $ar2 = (array)$obj2; + return array_compare($ar1,$ar2); +} + +function compare(&$x,&$y) { + $ok = 0; + $x_type = gettype($x); + $y_type = gettype($y); + if ($x_type == $y_type) { + if ($x_type == "array") { + $ok = array_compare($x, $y); + } else if ($x_type == "object") { + $ok = object_compare($x, $y); + } else if ($x_type == "double") { + $ok = number_compare($x, $y); +// } else if ($x_type == 'boolean') { +// $ok = boolean_compare($x, $y); + } else { + $ok = ($x == $y); +// $ok = string_compare($expect, $result); + } + } + return $ok; +} + + +function parseMessage($msg) +{ + # strip line endings + #$msg = preg_replace('/\r|\n/', ' ', $msg); + $response = new SOAP_Parser($msg); + if ($response->fault) { + return $response->fault->getFault(); + } + $return = $response->getResponse(); + $v = $response->decode($return); + if (gettype($v) == 'array' && count($v)==1) { + return array_shift($v); + } + return $v; +} + +function var_dump_str($var) { + ob_start(); + var_dump($var); + $res = ob_get_contents(); + ob_end_clean(); + return $res; +} + +?>
\ No newline at end of file |