fix test
[m6w6/ext-http] / tests / client029.phpt
index 1c8dc4f3528700708d342f08478461847e1fc591..a95508c27bc47974817ffe5c4c68a28fa9e193f2 100644 (file)
@@ -4,24 +4,23 @@ client curl user handler
 <?php 
 include "skipif.inc";
 skip_client_test();
-_ext("ev");
-
+_ext("event");
 ?> 
---XFAIL--
-ext-ev leaks
 --FILE--
 <?php 
 echo "Test\n";
 
 class UserHandler implements http\Client\Curl\User
 {
+       private $evbase;
        private $client;
        private $run;
        private $ios = [];
        private $timeout;
 
 
-       function __construct(http\Client $client) {
+       function __construct(http\Client $client, EventBase $evbase) {
+               $this->evbase = $evbase;
                $this->client = $client;
        }
        
@@ -32,17 +31,17 @@ class UserHandler implements http\Client\Curl\User
        function timer(int $timeout_ms) {
                echo "T";
                if (isset($this->timeout)) {
-                       $this->timeout->set($timeout_ms/1000, 0);
-                       $this->timeout->start();
+                       $this->timeout->add($timeout_ms/1000);
                } else {
-                       $this->timeout = new EvTimer($timeout_ms/1000, 0, function() {
+                       $this->timeout = Event::timer($this->evbase, function() {
                                if (!call_user_func($this->run, $this->client)) {
                                        if ($this->timeout) {
-                                               $this->timeout->stop();
+                                               $this->timeout->del();
                                                $this->timeout = null;
                                        }
                                }
                        });
+                       $this->timeout->add($timeout_ms/1000);
                }
        }
        
@@ -55,7 +54,7 @@ class UserHandler implements http\Client\Curl\User
                case self::POLL_REMOVE:
                        if (isset($this->ios[(int) $socket])) {
                                echo "U";
-                               $this->ios[(int) $socket]->stop();
+                               $this->ios[(int) $socket]->del();
                                unset($this->ios[(int) $socket]);
                        }
                        break;
@@ -63,44 +62,50 @@ class UserHandler implements http\Client\Curl\User
                default:
                        $ev = 0;
                        if ($action & self::POLL_IN) {
-                               $ev |= Ev::READ;
+                               $ev |= Event::READ;
                        }
                        if ($action & self::POLL_OUT) {
-                               $ev |= Ev::WRITE;
+                               $ev |= Event::WRITE;
                        }
                        if (isset($this->ios[(int) $socket])) {
-                               $this->ios[(int) $socket]->set($socket, $ev);
+                               $this->ios[(int) $socket]->set($this->evbase, 
+                                               $socket, $ev, $this->onEvent($socket));
                        } else {
-                               $this->ios[(int) $socket] = new EvIo($socket, $ev, function($watcher, $events) use($socket) {
-                                       $action = 0;
-                                       if ($events & Ev::READ) {
-                                               $action |= self::POLL_IN;
-                                       }
-                                       if ($events & Ev::WRITE) {
-                                               $action |= self::POLL_OUT;
-                                       }
-                                       if (!call_user_func($this->run, $this->client, $socket, $action)) {
-                                               if ($this->timeout) {
-                                                       $this->timeout->stop();
-                                                       $this->timeout = null;
-                                               }
-                                       }
-                               });
+                               $this->ios[(int) $socket] = new Event($this->evbase, 
+                                               $socket, $ev, $this->onEvent($socket));
                        }
                        break;
                }
        }
        
+       function onEvent($socket) {
+               return function($watcher, $events) use($socket) {
+                       $action = 0;
+                       if ($events & Ev::READ) {
+                               $action |= self::POLL_IN;
+                       }
+                       if ($events & Ev::WRITE) {
+                               $action |= self::POLL_OUT;
+                       }
+                       if (!call_user_func($this->run, $this->client, $socket, $action)) {
+                               if ($this->timeout) {
+                                       $this->timeout->del();
+                                       $this->timeout = null;
+                               }
+                       }
+               };
+       }
+       
        function once() {
-               throw new BadMethodCallException("this test uses Ev::run()");
+               throw new BadMethodCallException("this test uses EventBase::loop()");
        }
        
        function wait(int $timeout_ms = null) {
-               throw new BadMethodCallException("this test uses Ev::run()");
+               throw new BadMethodCallException("this test uses EventBase::loop()");
        }
        
        function send() {
-               throw new BadMethodCallException("this test uses Ev::run()");
+               throw new BadMethodCallException("this test uses EventBase::loop()");
        }
 }
 
@@ -108,19 +113,20 @@ class UserHandler implements http\Client\Curl\User
 include "helper/server.inc";
 
 server("proxy.inc", function($port) {
+       $evbase = new EventBase;
        $client = new http\Client;
        $client->configure([
-                       "use_eventloop" => new UserHandler($client)
+                       "use_eventloop" => new UserHandler($client, $evbase)
        ]);
        $client->enqueue(new http\Client\Request("GET", "http://localhost:$port/"), function($r) {
                var_dump($r->getResponseCode());
        });
-       Ev::run();
+       $evbase->loop();
 });
 
 ?>
 ===DONE===
 --EXPECTREGEX--
 Test
-T[ST]+U+int\(200\)
+T*[ST]+U+T*int\(200\)
 ===DONE===