Skip to content

Commit 9b8b3fe

Browse files
committedMay 13, 2019
Improved tests for event dispatcher
- Adding some cases, and fixed workflow
1 parent 69c1d35 commit 9b8b3fe

8 files changed

+256
-242
lines changed
 

‎AsyncEventDispatcher.php

+8-15
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,14 @@ protected function doAsyncDispatch(
6363
) {
6464
$promise = new FulfilledPromise();
6565
foreach ($listeners as $listener) {
66-
if ($event->isPropagationStopped()) {
67-
break;
68-
}
69-
70-
$result = $listener($event, $eventName, $this);
71-
if (!$result instanceof PromiseInterface) {
72-
$result = new FulfilledPromise($result);
73-
}
74-
75-
$promise = $promise->then(function () use ($result) {
76-
return new FulfilledPromise(function (PromiseEvent $event) use ($result) {
77-
return $event->hasPromise()
78-
? new FulfilledPromise()
79-
: $result;
80-
});
66+
$promise = $promise->then(function () use ($event, $eventName, $listener) {
67+
return
68+
(new FulfilledPromise())
69+
->then(function () use ($event, $eventName, $listener) {
70+
return $event->isPropagationStopped()
71+
? new FulfilledPromise()
72+
: $listener($event, $eventName, $this);
73+
});
8174
});
8275
}
8376

‎BaseBundle/BaseAsyncKernel.php

-224
This file was deleted.

‎Tests/AsyncKernelFunctionalTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515

1616
namespace Symfony\Component\HttpKernel\Tests;
1717

18+
use Mmoreram\BaseBundle\Kernel\AsyncBaseKernel;
1819
use Mmoreram\BaseBundle\Tests\BaseFunctionalTest;
1920
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
2021
use Symfony\Component\HttpKernel\AsyncEventDispatcher;
2122
use Symfony\Component\HttpKernel\AsyncHttpKernel;
22-
use Symfony\Component\HttpKernel\BaseBundle\BaseAsyncKernel;
2323
use Symfony\Component\HttpKernel\KernelInterface;
2424

2525
/**
@@ -91,7 +91,7 @@ protected static function getKernel(): KernelInterface
9191
],
9292
];
9393

94-
return new BaseAsyncKernel(
94+
return new AsyncBaseKernel(
9595
[
9696
FrameworkBundle::class,
9797
],
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony Async Kernel
5+
*
6+
* For the full copyright and license information, please view the LICENSE
7+
* file that was distributed with this source code.
8+
*
9+
* Feel free to edit as you please, and have fun.
10+
*
11+
* @author Marc Morera <yuhu@mmoreram.com>
12+
*/
13+
14+
declare(strict_types=1);
15+
16+
namespace Symfony\Component\HttpKernel\Tests;
17+
18+
use Clue\React\Block;
19+
use React\EventLoop\StreamSelectLoop;
20+
use Symfony\Component\HttpFoundation\Request;
21+
use Symfony\Component\HttpFoundation\Response;
22+
23+
/**
24+
* Class GetResponsesPromiseFunctionalMidPromiseTest.
25+
*/
26+
class GetResponsesPromiseFunctionalMidPromiseTest extends AsyncKernelFunctionalTest
27+
{
28+
/**
29+
* Decorate configuration.
30+
*
31+
* @param array $configuration
32+
*
33+
* @return array
34+
*/
35+
protected static function decorateConfiguration(array $configuration): array
36+
{
37+
$configuration = parent::decorateConfiguration($configuration);
38+
$configuration['services']['listener'] = [
39+
'class' => Listener::class,
40+
'tags' => [
41+
[
42+
'name' => 'kernel.event_listener',
43+
'event' => 'kernel.async_request',
44+
'method' => 'handleGetResponsePromise1',
45+
],
46+
[
47+
'name' => 'kernel.event_listener',
48+
'event' => 'kernel.async_request',
49+
'method' => 'handleGetResponsePromise2',
50+
],
51+
[
52+
'name' => 'kernel.event_listener',
53+
'event' => 'kernel.async_request',
54+
'method' => 'handleGetResponsePromise1',
55+
],
56+
[
57+
'name' => 'kernel.event_listener',
58+
'event' => 'kernel.async_request',
59+
'method' => 'handleGetResponsePromiseA',
60+
],
61+
[
62+
'name' => 'kernel.event_listener',
63+
'event' => 'kernel.async_request',
64+
'method' => 'handleGetResponsePromise2',
65+
],
66+
[
67+
'name' => 'kernel.event_listener',
68+
'event' => 'kernel.async_request',
69+
'method' => 'handleGetResponsePromise3',
70+
],
71+
],
72+
];
73+
74+
return $configuration;
75+
}
76+
77+
/**
78+
* Everything should work as before in the world of sync requests.
79+
*/
80+
public function testSyncKernel()
81+
{
82+
$loop = new StreamSelectLoop();
83+
$request = new Request([], [], [], [], [], [
84+
'REQUEST_METHOD' => 'GET',
85+
'REQUEST_URI' => '/promise',
86+
]);
87+
88+
$_GET['partial'] = '';
89+
$promise = self::$kernel
90+
->handleAsync($request)
91+
->then(function (Response $response) {
92+
$this->assertEquals(
93+
'A',
94+
$response->getContent()
95+
);
96+
97+
$this->assertEquals('121', $_GET['partial']);
98+
});
99+
100+
$loop->run();
101+
Block\await($promise, $loop);
102+
$this->assertEquals('121', $_GET['partial']);
103+
}
104+
}

0 commit comments

Comments
 (0)