Remove $id$ tag now that we are on git; update copyright notice to year 2013
[plcapi.git] / test / testsuite.php
index 5784be4..90c5844 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-       /* $Id$ */
 
        include(getcwd().'/parse_args.php');
 
                                "a simple CR here".chr(13).
                                "a simple LF here".chr(10).
                                "and then LFCR".chr(10).chr(13).
-                               "last but not least weird names: Günter, Elène, and an xml comment closing tag: -->";
+                               "last but not least weird names: G�nter, El�ne, and an xml comment closing tag: -->";
                        $f=new xmlrpcmsg('examples.stringecho', array(
                                new xmlrpcval($sendstring, 'string')
                        ));
@@ -222,6 +221,20 @@ And turned it into nylon';
                        }
                }
 
+        function testDateTime()
+        {
+            $time = time();
+            $t1 = new xmlrpcval($time, 'dateTime.iso8601');
+            $t2 = new xmlrpcval(iso8601_encode($time), 'dateTime.iso8601');
+            $this->assertEquals($t1->serialize(), $t2->serialize());
+            if (class_exists('DateTime'))
+            {
+                $datetime = new DateTime();
+                $t3 = new xmlrpcval($datetime->setTimestamp($time), 'dateTime.iso8601');
+                $this->assertEquals($t1->serialize(), $t3->serialize());
+            }
+        }
+
                function testCountEntities()
                {
                        $sendstring = "h'fd>onc>>l>>rw&bpu>q>e<v&gxs<ytjzkami<";
@@ -446,6 +459,19 @@ And turned it into nylon';
                        }
                }
 
+           function testCatchExceptions()
+           {
+               global $URI;
+               $f = new xmlrpcmsg('examples.raiseException', array(
+                       new xmlrpcval('whatever', 'string')
+               ));
+               $v = $this->send($f, $GLOBALS['xmlrpcerr']['server_error']);
+               $this->client->path = $URI.'?EXCEPTION_HANDLING=1';
+               $v = $this->send($f, 1);
+               $this->client->path = $URI.'?EXCEPTION_HANDLING=2';
+               $v = $this->send($f, $GLOBALS['xmlrpcerr']['invalid_return']);
+           }
+
                function testZeroParams()
                {
                        $f = new xmlrpcmsg('system.listMethods');
@@ -528,7 +554,7 @@ And turned it into nylon';
                                'c4' => array('value' => 'c4', 'expires' => time()+60*60*24*30, 'path' => '/'),
                                'c5' => array('value' => 'c5', 'expires' => time()+60*60*24*30, 'path' => '/', 'domain' => 'localhost'),
                        );
-                       $cookiesval =& php_xmlrpc_encode($cookies);
+                       $cookiesval = php_xmlrpc_encode($cookies);
                        $f=new xmlrpcmsg('examples.setcookies',array($cookiesval));
                        $r=$this->send($f, 0, true);
                        if($r)
@@ -603,7 +629,7 @@ And turned it into nylon';
                        global $failed_tests;
                        foreach(get_class_methods('LocalhostTests') as $meth)
                        {
-                               if(strpos($meth, 'test') === 0 && $meth != 'testHttps')
+                               if(strpos($meth, 'test') === 0 && $meth != 'testHttps' && $meth != 'testCatchExceptions')
                                {
                                        if (!isset($failed_tests[$meth]))
                                                $this->$meth();
@@ -805,13 +831,13 @@ And turned it into nylon';
                }
 
                function testUnicodeInMemberName(){
-                       $v = array('Günter, Elène' => new xmlrpcval(1));
+                       $v = array('G�nter, El�ne' => new xmlrpcval(1));
                        $r = new xmlrpcresp(new xmlrpcval($v, 'struct'));
                        $r = $r->serialize();
                        $m = new xmlrpcmsg('dummy');
                        $r = $m->parseResponse($r);
                        $v = $r->value();
-                       $this->assertEquals($v->structmemexists('Günter, Elène'), true);
+                       $this->assertEquals($v->structmemexists('G�nter, El�ne'), true);
                }
 
                function testUnicodeInErrorString()
@@ -821,7 +847,7 @@ And turned it into nylon';
 <!-- $Id -->
 <!-- found by G. giunta, covers what happens when lib receives
   UTF8 chars in reponse text and comments -->
-<!-- àüè&#224;&#252;&#232; -->
+<!-- ���&#224;&#252;&#232; -->
 <methodResponse>
 <fault>
 <value>
@@ -832,7 +858,7 @@ And turned it into nylon';
 </member>
 <member>
 <name>faultString</name>
-<value><string>àüè&#224;&#252;&#232;</string></value>
+<value><string>���&#224;&#252;&#232;</string></value>
 </member>
 </struct>
 </value>
@@ -841,7 +867,7 @@ And turned it into nylon';
                        $m=new xmlrpcmsg('dummy');
                        $r=$m->parseResponse($response);
                        $v=$r->faultString();
-                       $this->assertEquals('àüèàüè', $v);
+                       $this->assertEquals('������', $v);
                }
 
                function testValidNumbers()
@@ -1189,19 +1215,19 @@ and there they were.</value></member><member><name>postid</name><value>7414222</
                {
                        $s = new xmlrpcmsg('dummy');
 $f = "HTTP/1.1 200 OK\r\nContent-type: text/xml; charset=UTF-8\r\n\r\n".'<?xml version="1.0"?><methodResponse><params><param><value><struct><member><name>userid</name><value>311127</value></member>
-<member><name>dateCreated</name><value><dateTime.iso8601>20011126T09:17:52</dateTime.iso8601></value></member><member><name>content</name><value>'.utf8_encode('àüèàüè').'</value></member><member><name>postid</name><value>7414222</value></member></struct></value></param></params></methodResponse>
+<member><name>dateCreated</name><value><dateTime.iso8601>20011126T09:17:52</dateTime.iso8601></value></member><member><name>content</name><value>'.utf8_encode('������').'</value></member><member><name>postid</name><value>7414222</value></member></struct></value></param></params></methodResponse>
 ';
                        $r = $s->parseResponse($f, false, 'phpvals');
                        $v = $r->value();
                        $v = $v['content'];
-                       $this->assertEquals("àüèàüè", $v);
+                       $this->assertEquals("������", $v);
 $f = '<?xml version="1.0" encoding="utf-8"?><methodResponse><params><param><value><struct><member><name>userid</name><value>311127</value></member>
-<member><name>dateCreated</name><value><dateTime.iso8601>20011126T09:17:52</dateTime.iso8601></value></member><member><name>content</name><value>'.utf8_encode('àüèàüè').'</value></member><member><name>postid</name><value>7414222</value></member></struct></value></param></params></methodResponse>
+<member><name>dateCreated</name><value><dateTime.iso8601>20011126T09:17:52</dateTime.iso8601></value></member><member><name>content</name><value>'.utf8_encode('������').'</value></member><member><name>postid</name><value>7414222</value></member></struct></value></param></params></methodResponse>
 ';
                        $r = $s->parseResponse($f, false, 'phpvals');
                        $v = $r->value();
                        $v = $v['content'];
-                       $this->assertEquals("àüèàüè", $v);
+                       $this->assertEquals("������", $v);
                }
 
                function testUTF8IntString()
@@ -1241,6 +1267,21 @@ $f = '<?xml version="1.0" encoding="utf-8"?><methodResponse><params><param><valu
                        $r = $m->parseresponse($s);
                        $v = $r->value();
                        $this->assertequals('null', $v->scalartyp());
+                   // test with the apache version: EX:NIL
+                   $GLOBALS['xmlrpc_null_apache_encoding'] = true;
+                   // serialization
+                   $v = new xmlrpcval('hello', 'null');
+                   $s = $v->serialize();
+                   $this->assertequals(1, preg_match( '#<value><ex:nil/></value>#', $s ));
+                   // deserialization
+            $r = new xmlrpcresp($v);
+            $s = $r->serialize();
+            $r = $m->parseresponse($s);
+            $v = $r->value();
+            $this->assertequals('null', $v->scalartyp());
+                   $GLOBALS['xmlrpc_null_extension'] = false;
+                   $r = $m->parseresponse($s);
+                   $this->assertequals(2, $r->faultCode());
                }
 
                function TestLocale()
@@ -1317,8 +1358,8 @@ $f = '<?xml version="1.0" encoding="utf-8"?><methodResponse><params><param><valu
                        $this->client->path = $URI;
 
                        $r = $this->client->send($f, 5, 'http11');
-                       $r = $r->value();
-                       $this->assertEquals('hello', $r->scalarVal());
+                       $ro = $r->value();
+                       $this->assertEquals('hello', $ro->scalarVal());
                }
        }
 
@@ -1330,11 +1371,13 @@ $f = '<?xml version="1.0" encoding="utf-8"?><methodResponse><params><param><valu
        $suite->addTest(new LocalhostTests('testBoolean'));
        $suite->addTest(new LocalhostTests('testCountEntities'));
        $suite->addTest(new LocalhostTests('testBase64'));
+       $suite->addTest(new LocalhostTests('testDateTime'));
        $suite->addTest(new LocalhostTests('testServerMulticall'));
        $suite->addTest(new LocalhostTests('testClientMulticall1'));
        $suite->addTest(new LocalhostTests('testClientMulticall2'));
        $suite->addTest(new LocalhostTests('testClientMulticall3'));
        $suite->addTest(new LocalhostTests('testCatchWarnings'));
+       $suite->addTest(new LocalhostTests('testCatchExceptions'));
        $suite->addTest(new LocalhostTests('testZeroParams'));
        $suite->addTest(new LocalhostTests('testCodeInjectionServerSide'));
        $suite->addTest(new LocalhostTests('testAutoRegisteredFunction'));
@@ -1410,7 +1453,7 @@ $f = '<?xml version="1.0" encoding="utf-8"?><methodResponse><params><param><valu
                echo "<h3>Using lib version: $xmlrpcVersion on PHP version: ".phpversion()."</h3>\n";
                echo '<h3>Running '.$suite->testCount().' tests (some of which are multiple) against servers: http://'.htmlspecialchars($LOCALSERVER.$URI).' and https://'.htmlspecialchars($HTTPSSERVER.$HTTPSURI)."\n ...</h3>\n";
                flush();
-           ob_flush();
+           @ob_flush();
        }
        else
        {