Commit | Line | Data |
---|---|---|
1286dcbb PP |
1 | from bt2 import values |
2 | import unittest | |
3 | import copy | |
4 | import bt2 | |
5 | ||
6 | ||
90cfc012 | 7 | @unittest.skip("this is broken") |
1286dcbb PP |
8 | class QueryExecutorTestCase(unittest.TestCase): |
9 | def test_query(self): | |
10 | class MySink(bt2._UserSinkComponent): | |
11 | def _consume(self): | |
12 | pass | |
13 | ||
14 | @classmethod | |
15 | def _query(cls, query_exec, obj, params): | |
16 | nonlocal query_params | |
17 | query_params = params | |
18 | return { | |
19 | 'null': None, | |
20 | 'bt2': 'BT2', | |
21 | } | |
22 | ||
23 | query_params = None | |
24 | params = { | |
25 | 'array': ['coucou', 23, None], | |
26 | 'other_map': { | |
27 | 'yes': 'yeah', | |
28 | '19': 19, | |
29 | 'minus 1.5': -1.5, | |
30 | }, | |
31 | 'null': None, | |
32 | } | |
33 | ||
34 | res = bt2.QueryExecutor().query(MySink, 'obj', params) | |
35 | self.assertEqual(query_params, params) | |
36 | self.assertEqual(res, { | |
37 | 'null': None, | |
38 | 'bt2': 'BT2', | |
39 | }) | |
40 | del query_params | |
41 | ||
42 | def test_query_params_none(self): | |
43 | class MySink(bt2._UserSinkComponent): | |
44 | def _consume(self): | |
45 | pass | |
46 | ||
47 | @classmethod | |
48 | def _query(cls, query_exec, obj, params): | |
49 | nonlocal query_params | |
50 | query_params = params | |
51 | ||
52 | query_params = 23 | |
53 | res = bt2.QueryExecutor().query(MySink, 'obj', None) | |
54 | self.assertEqual(query_params, None) | |
55 | del query_params | |
56 | ||
57 | def test_query_gen_error(self): | |
58 | class MySink(bt2._UserSinkComponent): | |
59 | def _consume(self): | |
60 | pass | |
61 | ||
62 | @classmethod | |
63 | def _query(cls, query_exec, obj, params): | |
64 | raise ValueError | |
65 | ||
66 | with self.assertRaises(bt2.Error): | |
67 | res = bt2.QueryExecutor().query(MySink, 'obj', [17, 23]) | |
68 | ||
69 | def test_query_invalid_object(self): | |
70 | class MySink(bt2._UserSinkComponent): | |
71 | def _consume(self): | |
72 | pass | |
73 | ||
74 | @classmethod | |
75 | def _query(cls, query_exec, obj, params): | |
76 | raise bt2.InvalidQueryObject | |
77 | ||
78 | with self.assertRaises(bt2.InvalidQueryObject): | |
79 | res = bt2.QueryExecutor().query(MySink, 'obj', [17, 23]) | |
80 | ||
81 | def test_query_invalid_params(self): | |
82 | class MySink(bt2._UserSinkComponent): | |
83 | def _consume(self): | |
84 | pass | |
85 | ||
86 | @classmethod | |
87 | def _query(cls, query_exec, obj, params): | |
88 | raise bt2.InvalidQueryParams | |
89 | ||
90 | with self.assertRaises(bt2.InvalidQueryParams): | |
91 | res = bt2.QueryExecutor().query(MySink, 'obj', [17, 23]) | |
92 | ||
93 | def test_query_try_again(self): | |
94 | class MySink(bt2._UserSinkComponent): | |
95 | def _consume(self): | |
96 | pass | |
97 | ||
98 | @classmethod | |
99 | def _query(cls, query_exec, obj, params): | |
100 | raise bt2.TryAgain | |
101 | ||
102 | with self.assertRaises(bt2.TryAgain): | |
103 | res = bt2.QueryExecutor().query(MySink, 'obj', [17, 23]) | |
104 | ||
105 | def test_cancel_no_query(self): | |
106 | query_exec = bt2.QueryExecutor() | |
107 | self.assertFalse(query_exec.is_canceled) | |
108 | query_exec.cancel() | |
109 | self.assertTrue(query_exec.is_canceled) | |
110 | ||
111 | def test_query_canceled(self): | |
112 | class MySink(bt2._UserSinkComponent): | |
113 | def _consume(self): | |
114 | pass | |
115 | ||
116 | @classmethod | |
117 | def _query(cls, query_exec, obj, params): | |
118 | raise bt2.TryAgain | |
119 | ||
120 | query_exec = bt2.QueryExecutor() | |
121 | query_exec.cancel() | |
122 | ||
123 | with self.assertRaises(bt2.QueryExecutorCanceled): | |
124 | res = query_exec.query(MySink, 'obj', [17, 23]) | |
125 | ||
126 | def test_eq(self): | |
127 | query_exec = bt2.QueryExecutor() | |
128 | self.assertEqual(query_exec, query_exec) | |
129 | ||
130 | def test_eq_invalid(self): | |
131 | query_exec = bt2.QueryExecutor() | |
132 | self.assertNotEqual(query_exec, 23) |