prepare v4.2.5
[m6w6/ext-http] / tests / client013.phpt
1 --TEST--
2 client observers
3 --SKIPIF--
4 <?php
5 include "skipif.inc";
6 skip_client_test();
7 ?>
8 --FILE--
9 <?php
10
11 include "helper/server.inc";
12
13 echo "Test\n";
14
15 class Client extends http\Client {
16 public $pi;
17 }
18 class ProgressObserver1 implements SplObserver {
19 #[ReturnTypeWillChange]
20 function update(SplSubject $c, $r = null) {
21 if ($c->getProgressInfo($r)) $c->pi .= "-";
22 }
23 }
24 class ProgressObserver2 implements SplObserver {
25 #[ReturnTypeWillChange]
26 function update(SplSubject $c, $r = null) {
27 if ($c->getProgressInfo($r)) $c->pi .= ".";
28 }
29 }
30 class CallbackObserver implements SplObserver {
31 public $callback;
32 function __construct($callback) {
33 $this->callback = $callback;
34 }
35 #[ReturnTypeWillChange]
36 function update(SplSubject $c, $r = null) {
37 call_user_func($this->callback, $c, $r);
38 }
39 }
40
41 server("proxy.inc", function($port) {
42 $client = new Client;
43 $client->attach($o1 = new ProgressObserver1);
44 $client->attach($o2 = new ProgressObserver2);
45 $client->attach(
46 $o3 = new CallbackObserver(
47 function ($c, $r) {
48 $p = (array) $c->getProgressInfo($r);
49 if (!$p) {
50 return;
51 }
52 var_dump(array_key_exists("started", $p));
53 var_dump(array_key_exists("finished", $p));
54 var_dump(array_key_exists("dlnow", $p));
55 var_dump(array_key_exists("ulnow", $p));
56 var_dump(array_key_exists("dltotal", $p));
57 var_dump(array_key_exists("ultotal", $p));
58 var_dump(array_key_exists("info", $p));
59 }
60 )
61 );
62
63 $client->enqueue(new http\Client\Request("GET", "http://localhost:$port/"))->send();
64 var_dump(1 === preg_match("/(\.-)+/", $client->pi));
65 var_dump(3 === count($client->getObservers()));
66 $client->detach($o1);
67 var_dump(2 === count($client->getObservers()));
68 $client->detach($o2);
69 var_dump(1 === count($client->getObservers()));
70 $client->detach($o3);
71 var_dump(0 === count($client->getObservers()));
72
73 });
74
75 ?>
76 Done
77 --EXPECTREGEX--
78 Test\n(bool\(true\)\n)+Done