trigger mirror
[m6w6/pq-gateway] / tests / lib / pq / Query / AsyncExecutorTest.php
1 <?php
2
3 namespace pq\Query;
4
5 include_once __DIR__."/../../../setup.inc";
6
7 use pq\Connection;
8 use React\Promise\Deferred as Reacted;
9 use Amp\Deferred as Amped;
10
11 class AsyncExecutorTest extends \PHPUnit_Framework_TestCase {
12 private $conn;
13 private $query;
14
15 protected function setUp() {
16 $this->conn = new Connection(PQ_TEST_DSN);
17 $this->query = new Writer("SELECT \$1::int,\$2::int", [1,2]);
18 }
19
20 function testReact() {
21 $exec = new AsyncExecutor($this->conn);
22 $exec->setCallbacks(
23 # init context
24 function() {
25 return new Reacted;
26 },
27 # done
28 function(Reacted $context, $result) {
29 $context->resolve($result);
30 },
31 # then
32 function(Reacted $context, callable $cb) {
33 return $context->promise()->then($cb);
34 });
35
36 $guard = new \stdClass;
37 $exec->execute($this->query, function($result) use($guard) {
38 $guard->result = $result;
39 });
40 $this->conn->getResult();
41 $this->assertTrue(!empty($guard->result), "guard is empty");
42 $this->assertInstanceOf("pq\\Result", $guard->result);
43 $this->assertSame([[1,2]], $guard->result->fetchAll());
44 }
45
46 function testAmp() {
47 $exec = new AsyncExecutor($this->conn);
48 $exec->setCallbacks(
49 # init context
50 function() {
51 return new Amped;
52 },
53 # done
54 function(Amped $context, $result) {
55 $context->succeed($result);
56 },
57 # then
58 function(Amped $context, callable $cb) {
59 return $context->promise()->when(function($error, $result) use ($cb) {
60 $cb($result);
61 });
62 });
63 $guard = new \stdClass;
64 $exec->execute($this->query, function($result) use($guard) {
65 $guard->result = $result;
66 });
67 $this->conn->getResult();
68 $this->assertTrue(!empty($guard->result), "guard is empty");
69 $this->assertInstanceOf("pq\\Result", $guard->result);
70 $this->assertSame([[1,2]], $guard->result->fetchAll());
71 }
72 }