--TEST--
Bug #30045 (Cannot pass big integers (> 2147483647) in SOAP requests)
--SKIPIF--
<?php 
  
if (!extension_loaded('soap')) die('skip soap extension not available');
  if (!
extension_loaded('simplexml')) die('skip simplexml extension not available');
?>
--INI--
soap.wsdl_cache_enabled=1
--FILE--
<?php

function foo($type$num) {
  return new 
SoapVar($num$type);
}

class 
LocalSoapClient extends SoapClient {

  function 
__construct($wsdl$options) {
    
parent::__construct($wsdl$options);
    
$this->server = new SoapServer($wsdl$options);
    
$this->server->addFunction('foo');
  }

  function 
__doRequest($request$location$action$version$one_way 0) {
    
$xml simplexml_load_string($request);
    echo 
$xml->children("http://schemas.xmlsoap.org/soap/envelope/")->Body->children("http://test-uri")->children()->param1->asXML(),"\n";
    unset(
$xml);

    
ob_start();
    
$this->server->handle($request);
    
$response ob_get_contents();
    
ob_end_clean();

    return 
$response;
  }

}

$soap = new LocalSoapClient(NULL, array("uri"=>"http://test-uri""location"=>"test://"));

function 
test($type$num) {
  global 
$soap;
  try {
      
printf("  %0.0f\n    "$num);      
      
$ret $soap->foo($type, new SoapVar($num$type));
      
printf("    %0.0f\n"$ret);
    } catch (
SoapFault $ex) {
      
var_dump($ex);
    }
}
/*
echo "byte\n";
//test(XSD_BYTE, -129);
test(XSD_BYTE, -128);
test(XSD_BYTE,  127);
//test(XSD_BYTE,  128);

echo "\nshort\n";
//test(XSD_SHORT, -32769);
test(XSD_SHORT, -32768);
test(XSD_SHORT,  32767);
//test(XSD_SHORT,  32768);

echo "\nint\n";
//test(XSD_INT, -2147483649);
test(XSD_INT, -2147483648);
test(XSD_INT,  2147483647);
//test(XSD_INT,  2147483648);

echo "\nlong\n";
//test(XSD_LONG, -9223372036854775809);
test(XSD_LONG, -9223372036854775808);
test(XSD_LONG,  9223372036854775807);
//test(XSD_LONG,  9223372036854775808);

echo "\nunsignedByte\n";
//test(XSD_UNSIGNEDBYTE, -1);
test(XSD_UNSIGNEDBYTE,  0);
test(XSD_UNSIGNEDBYTE,  255);
//test(XSD_UNSIGNEDBYTE,  256);

echo "\nunsignedShort\n";
//test(XSD_UNSIGNEDSHORT, -1);
test(XSD_UNSIGNEDSHORT,  0);
test(XSD_UNSIGNEDSHORT,  65535);
//test(XSD_UNSIGNEDSHORT,  65536);

echo "\nunsignedInt\n";
//test(XSD_UNSIGNEDINT, -1);
test(XSD_UNSIGNEDINT,  0);
test(XSD_UNSIGNEDINT,  4294967295);
//test(XSD_UNSIGNEDINT,  4294967296);

echo "\nunsignedLong\n";
//test(XSD_UNSIGNEDLONG, -1);
test(XSD_UNSIGNEDLONG,  0);
test(XSD_UNSIGNEDLONG,  18446744073709551615);
//test(XSD_UNSIGNEDLONG,  18446744073709551616);

echo "\nnegativeInteger\n";
test(XSD_NEGATIVEINTEGER, -18446744073709551616);
test(XSD_NEGATIVEINTEGER, -1);
//test(XSD_NEGATIVEINTEGER,  0);

echo "\nnonPositiveInteger\n";
test(XSD_NONPOSITIVEINTEGER, -18446744073709551616);
test(XSD_NONPOSITIVEINTEGER,  0);
//test(XSD_NONPOSITIVEINTEGER,  1);

echo "\nnonNegativeInteger\n";
//test(XSD_NONNEGATIVEINTEGER, -1);
test(XSD_NONNEGATIVEINTEGER,  0);
test(XSD_NONNEGATIVEINTEGER,  18446744073709551616);

echo "\nPositiveInteger\n";
//test(XSD_POSITIVEINTEGER,  0);
test(XSD_POSITIVEINTEGER,  1);
test(XSD_POSITIVEINTEGER,  18446744073709551616);

echo "\ninteger\n";
test(XSD_INTEGER, -18446744073709551616);
test(XSD_INTEGER,  18446744073709551616);
*/
echo "long\n";
test(XSD_LONG2147483647);
test(XSD_LONG2147483648);
test(XSD_LONG,  4294967296);
test(XSD_LONG,  8589934592);
test(XSD_LONG17179869184); 

echo 
"\nunsignedLong\n";
test(XSD_UNSIGNEDLONG,  2147483647);
test(XSD_UNSIGNEDLONG,  2147483648);
test(XSD_UNSIGNEDLONG,  4294967296);
test(XSD_UNSIGNEDLONG,  8589934592);
test(XSD_UNSIGNEDLONG17179869184);

?>
--EXPECT--
long
  2147483647
    <param1 xsi:type="xsd:long">2147483647</param1>
    2147483647
  2147483648
    <param1 xsi:type="xsd:long">2147483648</param1>
    2147483648
  4294967296
    <param1 xsi:type="xsd:long">4294967296</param1>
    4294967296
  8589934592
    <param1 xsi:type="xsd:long">8589934592</param1>
    8589934592
  17179869184
    <param1 xsi:type="xsd:long">17179869184</param1>
    17179869184

unsignedLong
  2147483647
    <param1 xsi:type="xsd:unsignedLong">2147483647</param1>
    2147483647
  2147483648
    <param1 xsi:type="xsd:unsignedLong">2147483648</param1>
    2147483648
  4294967296
    <param1 xsi:type="xsd:unsignedLong">4294967296</param1>
    4294967296
  8589934592
    <param1 xsi:type="xsd:unsignedLong">8589934592</param1>
    8589934592
  17179869184
    <param1 xsi:type="xsd:unsignedLong">17179869184</param1>
    17179869184