-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathtest_async.py
More file actions
46 lines (41 loc) · 1.57 KB
/
Copy pathtest_async.py
File metadata and controls
46 lines (41 loc) · 1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from testtools.testcase import TestCase
from ._base import Effect, perform
from ._dispatcher import ComposedDispatcher, TypeDispatcher
from ._intents import ParallelEffects, base_dispatcher, parallel
from .parallel_async import perform_parallel_async
from .test_base import func_dispatcher
from .test_parallel_performers import ParallelPerformerTestsMixin
class PerformParallelAsyncTests(TestCase, ParallelPerformerTestsMixin):
"""Tests for :func:`perform_parallel_async`."""
def setUp(self):
super(PerformParallelAsyncTests, self).setUp()
self.dispatcher = ComposedDispatcher(
[base_dispatcher, TypeDispatcher({ParallelEffects: perform_parallel_async})]
)
def test_out_of_order(self):
"""
The result order corresponds to the order of the effects as passed to
:obj:`ParallelEffects` even when the results become available in a
different order.
"""
result = []
boxes = [None] * 2
eff = parallel(
[
Effect(lambda box: boxes.__setitem__(0, box)),
Effect(lambda box: boxes.__setitem__(1, box)),
]
)
perform(
ComposedDispatcher(
[
TypeDispatcher({ParallelEffects: perform_parallel_async}),
func_dispatcher,
]
),
eff.on(success=result.append, error=print),
)
boxes[1].succeed("a")
self.assertEqual(result, [])
boxes[0].succeed("b")
self.assertEqual(result[0], ["b", "a"])