ソースを参照

add terminal test

Bastien Sevajol 7 年 前
コミット
5f2ac56cd5
共有1 個のファイルを変更した40 個の追加6 個の削除を含む
  1. 40 6
      tests/test_terminals.py

+ 40 - 6
tests/test_terminals.py ファイルの表示

@@ -6,17 +6,23 @@ from synergine2.terminals import TerminalManager
6 6
 from tests import BaseTest
7 7
 
8 8
 
9
-class FakeTerminal(Terminal):
9
+class MultiplyTerminal(Terminal):
10 10
     def receive(self, package: TerminalPackage):
11 11
         self.send(TerminalPackage(package.value * 2))
12 12
         self.send(TerminalPackage(package.value * 4))
13 13
 
14 14
 
15
+class DivideTerminal(Terminal):
16
+    def receive(self, package: TerminalPackage):
17
+        self.send(TerminalPackage(package.value / 2))
18
+        self.send(TerminalPackage(package.value / 4))
19
+
20
+
15 21
 class TestTerminals(BaseTest):
16
-    def test_terminals_communications(self):
22
+    def test_terminal_communications(self):
17 23
         terminals_manager = TerminalManager(
18 24
             terminals=[
19
-                FakeTerminal(),
25
+                MultiplyTerminal(),
20 26
             ]
21 27
         )
22 28
         terminals_manager.start()
@@ -24,9 +30,10 @@ class TestTerminals(BaseTest):
24 30
 
25 31
         # We wait max 2s (see time.sleep) to consider
26 32
         # process have finished. If not, it will fail
33
+        packages = []
27 34
         for i in range(200):
28
-            packages = terminals_manager.receive()
29
-            if packages:
35
+            packages.extend(terminals_manager.receive())
36
+            if len(packages) == 2:
30 37
                 break
31 38
             time.sleep(0.01)
32 39
 
@@ -36,4 +43,31 @@ class TestTerminals(BaseTest):
36 43
         assert 168 in values
37 44
 
38 45
         terminals_manager.stop()  # pytest must execute this if have fail
39
-        # TODO: Tester avec plusieurs terminaux
46
+
47
+    def test_terminals_communications(self):
48
+        terminals_manager = TerminalManager(
49
+            terminals=[
50
+                MultiplyTerminal(),
51
+                DivideTerminal(),
52
+            ]
53
+        )
54
+        terminals_manager.start()
55
+        terminals_manager.send(TerminalPackage(42))
56
+
57
+        # We wait max 2s (see time.sleep) to consider
58
+        # process have finished. If not, it will fail
59
+        packages = []
60
+        for i in range(200):
61
+            packages.extend(terminals_manager.receive())
62
+            if len(packages) == 4:
63
+                break
64
+            time.sleep(0.01)
65
+
66
+        assert 4 == len(packages)
67
+        values = [p.value for p in packages]
68
+        assert 84 in values
69
+        assert 168 in values
70
+        assert 21 in values
71
+        assert 10.5 in values
72
+
73
+        terminals_manager.stop()  # pytest must execute this if have fail