| 
<?phpinclude '../../JsonRpcClient.php';
 
 $url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
 $serverUrl = substr($url, 0, strpos($url, 'tests')) . 'server.php';
 
 $client = new JsonRpcClient($serverUrl);
 
 function json_prettify($str)
 {
 $result = '';
 $len = strlen($str);
 $pos = 0;
 $indent = '    ';
 $prev = '';
 $newline = "\r\n";
 
 for ($i = 0; $i < $len; $i++) {
 
 if ($str[$i] === '[' || $str[$i] === '{') {
 $pos++;
 
 if ($prev !== ',' && $prev !== '[' && $prev !== '' && $prev !== ':') {
 $result .= $newline . str_repeat($indent, $pos - 1);
 }
 
 $result .= $str[$i] . $newline . str_repeat($indent, $pos);
 } elseif ($str[$i] === ':') {
 $result .= $str[$i] . ' ';
 } elseif ($str[$i] === ',') {
 $result .= $str[$i] . $newline . str_repeat($indent, $pos);
 } elseif ($str[$i] === ']' || $str[$i] === '}') {
 $pos--;
 $result .= $newline . str_repeat($indent, $pos) . $str[$i];
 } else {
 $result .= $str[$i];
 }
 
 $prev = $str[$i];
 }
 
 return $result;
 }
 
 function test($request, $expected = null)
 {
 global $client;
 
 $result = '';
 $response = $client->rawcall($request);
 
 if ($expected !== null) {
 $expected = json_encode(json_decode($expected));
 }
 
 $result .= '--> ' . $request . "\r\n";
 
 if ($response !== null) {
 $result .= '<-- ' . json_prettify($response) . "\r\n";
 }
 
 if ($response === $expected) {
 $result .= '<strong class="pass">Pass</strong>';
 } else {
 $result .= '<strong class="fail">Fail</strong> (expecting ' . $expected . ')';
 }
 
 return $result;
 }
 ?>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">
 <html>
 <head>
 <title>Optional parameters tests</title>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <style type="text/css">
 html, body {
 font: 12px Arial
 }
 
 h1 {
 font-size: 17px
 }
 
 pre {
 border: solid 1px #ccc;
 padding: 10px;
 display: inline-block;
 *display: inline;
 zoom: 1
 }
 
 .example {
 background-color: #FFEAEA;
 }
 
 pre strong {
 display: block;
 width: auto;
 font-size: 14px;
 color: #fff;
 padding: 3px;
 margin: 10px 0
 }
 
 .pass {
 background-color: green;
 }
 
 .fail {
 background-color: red;
 }
 </style>
 </head>
 <body>
 <h1>Optional parameters tests</h1>
 
 <?php
 try {
 $request = '{}';
 test($request);
 ?>
 
 <h2>Named parameters:</h2>
 
 <h3>Method has 3 optional arguments:</h3>
 
 <p>no argument is passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedAllOptional', null, 1));
 $expected = '{"jsonrpc": "2.0","result": ["",null,100],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>only argument #1 is passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedAllOptional', array('param1' => 'first is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed",null,100],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>only argument #2 is passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedAllOptional', array('param2' => 'second is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["","second is passed",100],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>only argument #3 is passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedAllOptional', array('param3' => 'third is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["",null,"third is passed"],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>arguments #1 and #2 are passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedAllOptional', array('param1' => 'first is passed', 'param2' => 'second is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed","second is passed",100],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>Flip arguments:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedAllOptional', array('param2' => 'second is passed', 'param1' => 'first is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed","second is passed",100],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>arguments #1 and #3 are passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedAllOptional', array('param1' => 'first is passed', 'param3' => 'third is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed",null,"third is passed"],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>Flip arguments:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedAllOptional', array('param3' => 'third is passed', 'param1' => 'first is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed",null,"third is passed"],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>arguments #2 and #3 are passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedAllOptional', array('param2' => 'second is passed', 'param3' => 'third is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["","second is passed","third is passed"],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>Flip arguments:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedAllOptional', array('param3' => 'third is passed', 'param2' => 'second is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["","second is passed","third is passed"],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>all passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedAllOptional', array('param1' => 'first is passed', 'param2' => 'second is passed', 'param3' => 'third is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed","second is passed","third is passed"],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>Flip arguments:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedAllOptional', array('param2' => 'second is passed', 'param1' => 'first is passed', 'param3' => 'third is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed","second is passed","third is passed"],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <h3>Method has 3 arguments, #1 is required, #2 and #3 are optional</h3>
 
 <p>only argument #1 is passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedFirstRequired', array('param1' => 'first is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed",null,100],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>arguments #1 and #2 are passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedFirstRequired', array('param1' => 'first is passed', 'param2' => 'second is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed","second is passed",100],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>arguments #1 and #3 are passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedFirstRequired', array('param1' => 'first is passed', 'param3' => 'third is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed",null,"third is passed"],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <h3>Method has 3 arguments, #1 and #2 are required, #3 is optional</h3>
 
 <p>only arguments #1 and #2 is passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedThirdOptional', array('param1' => 'first is passed', 'param2' => 'second is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed","second is passed",100],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedThirdOptional', array('param1' => 'first is passed', 'param2' => 'second is passed', 'param3' => 'third is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed","second is passed","third is passed"],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>Flip arguments:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testNamedThirdOptional', array('param2' => 'second is passed', 'param1' => 'first is passed', 'param3' => 'third is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed","second is passed","third is passed"],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <h2>Positional parameters</h2>
 
 <h3>Method has 3 optional arguments:</h3>
 
 <p>no argument is passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testPositionalAllOptional', null, 1));
 $expected = '{"jsonrpc": "2.0","result": ["",null,100],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>only argument #1 is passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testPositionalAllOptional', array('first is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed",null,100],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <p>only arguments #1 and #2 are passed:</p>
 
 <pre class="example">
 <?php
 $request = json_encode($client->prepare('testPositionalAllOptional', array('first is passed', 'second is passed'), 1));
 $expected = '{"jsonrpc": "2.0","result": ["first is passed","second is passed",100],"id": 1}';
 
 echo test($request, $expected);
 ?>
 </pre>
 
 <?php } catch (Exception $e) { ?>
 <p><?php echo $e->getMessage(); ?></p>
 <?php } ?>
 </body>
 </html>
 |