Commit | Line | Data |
---|---|---|
0235b0db | 1 | # SPDX-License-Identifier: GPL-2.0-only |
d2d857a8 MJ |
2 | # |
3 | # Copyright (C) 2019 EfficiOS Inc. | |
4 | # | |
d2d857a8 | 5 | |
9cf643d1 | 6 | import unittest |
5995b304 | 7 | |
f0a42b33 FD |
8 | from bt2 import clock_class as bt2_clock_class |
9 | from bt2 import event_class as bt2_event_class | |
10 | from bt2 import field_class as bt2_field_class | |
5995b304 SM |
11 | from bt2 import trace_class as bt2_trace_class |
12 | from bt2 import stream_class as bt2_stream_class | |
13 | from utils import run_in_component_init | |
9cf643d1 PP |
14 | |
15 | ||
16 | class StreamClassTestCase(unittest.TestCase): | |
17 | def setUp(self): | |
3cdfbaea SM |
18 | def f(comp_self): |
19 | tc = comp_self._create_trace_class(assigns_automatic_stream_class_id=True) | |
20 | cc = comp_self._create_clock_class() | |
21 | return tc, cc | |
22 | ||
23 | self._tc, self._cc = run_in_component_init(f) | |
24 | self._trace = self._tc() | |
25 | ||
26 | def test_create_default(self): | |
27 | sc = self._tc.create_stream_class() | |
28 | ||
f0a42b33 | 29 | self.assertIs(type(sc), bt2_stream_class._StreamClass) |
3cdfbaea SM |
30 | self.assertIsNone(sc.name) |
31 | self.assertIsNone(sc.packet_context_field_class) | |
32 | self.assertIsNone(sc.event_common_context_field_class) | |
33 | self.assertIsNone(sc.default_clock_class) | |
34 | self.assertTrue(sc.assigns_automatic_event_class_id) | |
35 | self.assertTrue(sc.assigns_automatic_stream_id) | |
26fc5aed | 36 | self.assertFalse(sc.supports_packets) |
9b24b6aa PP |
37 | self.assertFalse(sc.packets_have_beginning_default_clock_snapshot) |
38 | self.assertFalse(sc.packets_have_end_default_clock_snapshot) | |
2e90378a PP |
39 | self.assertFalse(sc.supports_discarded_events) |
40 | self.assertFalse(sc.discarded_events_have_default_clock_snapshots) | |
41 | self.assertFalse(sc.supports_discarded_packets) | |
42 | self.assertFalse(sc.discarded_packets_have_default_clock_snapshots) | |
5783664e | 43 | self.assertEqual(len(sc.user_attributes), 0) |
3cdfbaea SM |
44 | |
45 | def test_create_name(self): | |
f5567ea8 FD |
46 | sc = self._tc.create_stream_class(name="bozo") |
47 | self.assertEqual(sc.name, "bozo") | |
3cdfbaea SM |
48 | |
49 | def test_create_invalid_name(self): | |
91910435 | 50 | with self.assertRaisesRegex(TypeError, "'int' is not a 'str' object"): |
3cdfbaea | 51 | self._tc.create_stream_class(name=17) |
9cf643d1 | 52 | |
d3bf1370 SM |
53 | self.assertEqual(len(self._tc), 0) |
54 | ||
3cdfbaea SM |
55 | def test_create_packet_context_field_class(self): |
56 | fc = self._tc.create_structure_field_class() | |
cfbd7cf3 FD |
57 | sc = self._tc.create_stream_class( |
58 | packet_context_field_class=fc, supports_packets=True | |
59 | ) | |
3cdfbaea | 60 | self.assertEqual(sc.packet_context_field_class, fc) |
f0a42b33 FD |
61 | self.assertIs( |
62 | type(sc.packet_context_field_class), bt2_field_class._StructureFieldClass | |
63 | ) | |
9cf643d1 | 64 | |
3cdfbaea | 65 | def test_create_invalid_packet_context_field_class(self): |
91910435 SM |
66 | with self.assertRaisesRegex( |
67 | TypeError, | |
68 | "'int' is not a '<class 'bt2.field_class._StructureFieldClass'>' object", | |
69 | ): | |
d3bf1370 SM |
70 | self._tc.create_stream_class( |
71 | packet_context_field_class=22, supports_packets=True | |
72 | ) | |
73 | ||
74 | self.assertEqual(len(self._tc), 0) | |
9cf643d1 | 75 | |
26fc5aed PP |
76 | def test_create_invalid_packet_context_field_class_no_packets(self): |
77 | fc = self._tc.create_structure_field_class() | |
78 | ||
91910435 SM |
79 | with self.assertRaisesRegex( |
80 | ValueError, | |
81 | "cannot have a packet context field class without supporting packets", | |
82 | ): | |
26fc5aed PP |
83 | self._tc.create_stream_class(packet_context_field_class=fc) |
84 | ||
d3bf1370 SM |
85 | self.assertEqual(len(self._tc), 0) |
86 | ||
3cdfbaea SM |
87 | def test_create_event_common_context_field_class(self): |
88 | fc = self._tc.create_structure_field_class() | |
89 | sc = self._tc.create_stream_class(event_common_context_field_class=fc) | |
90 | self.assertEqual(sc.event_common_context_field_class, fc) | |
f0a42b33 FD |
91 | self.assertIs( |
92 | type(sc.event_common_context_field_class), | |
93 | bt2_field_class._StructureFieldClass, | |
94 | ) | |
811644b8 | 95 | |
3cdfbaea | 96 | def test_create_invalid_event_common_context_field_class(self): |
91910435 SM |
97 | with self.assertRaisesRegex( |
98 | TypeError, | |
99 | "'int' is not a '<class 'bt2.field_class._StructureFieldClass'>' object", | |
100 | ): | |
3cdfbaea | 101 | self._tc.create_stream_class(event_common_context_field_class=22) |
9cf643d1 | 102 | |
d3bf1370 SM |
103 | self.assertEqual(len(self._tc), 0) |
104 | ||
3cdfbaea SM |
105 | def test_create_default_clock_class(self): |
106 | sc = self._tc.create_stream_class(default_clock_class=self._cc) | |
107 | self.assertEqual(sc.default_clock_class.addr, self._cc.addr) | |
f0a42b33 | 108 | self.assertIs(type(sc.default_clock_class), bt2_clock_class._ClockClass) |
9cf643d1 | 109 | |
3cdfbaea | 110 | def test_create_invalid_default_clock_class(self): |
91910435 SM |
111 | with self.assertRaisesRegex( |
112 | TypeError, "'int' is not a '<class 'bt2.clock_class._ClockClass'>' object" | |
113 | ): | |
3cdfbaea | 114 | self._tc.create_stream_class(default_clock_class=12) |
9cf643d1 | 115 | |
d3bf1370 SM |
116 | self.assertEqual(len(self._tc), 0) |
117 | ||
5783664e | 118 | def test_create_user_attributes(self): |
f5567ea8 FD |
119 | sc = self._tc.create_stream_class(user_attributes={"salut": 23}) |
120 | self.assertEqual(sc.user_attributes, {"salut": 23}) | |
5783664e PP |
121 | |
122 | def test_create_invalid_user_attributes(self): | |
91910435 SM |
123 | with self.assertRaisesRegex( |
124 | TypeError, "cannot create value object from 'object' object" | |
125 | ): | |
5783664e PP |
126 | self._tc.create_stream_class(user_attributes=object()) |
127 | ||
d3bf1370 SM |
128 | self.assertEqual(len(self._tc), 0) |
129 | ||
5783664e | 130 | def test_create_invalid_user_attributes_value_type(self): |
91910435 SM |
131 | with self.assertRaisesRegex( |
132 | TypeError, | |
133 | "'SignedIntegerValue' is not a '<class 'bt2.value.MapValue'>' object", | |
134 | ): | |
5783664e PP |
135 | self._tc.create_stream_class(user_attributes=23) |
136 | ||
d3bf1370 SM |
137 | self.assertEqual(len(self._tc), 0) |
138 | ||
3cdfbaea SM |
139 | def test_automatic_stream_ids(self): |
140 | sc = self._tc.create_stream_class(assigns_automatic_stream_id=True) | |
141 | self.assertTrue(sc.assigns_automatic_stream_id) | |
9cf643d1 | 142 | |
3cdfbaea SM |
143 | stream = self._trace.create_stream(sc) |
144 | self.assertIsNotNone(stream.id) | |
9cf643d1 | 145 | |
3cdfbaea SM |
146 | def test_automatic_stream_ids_raises(self): |
147 | sc = self._tc.create_stream_class(assigns_automatic_stream_id=True) | |
148 | self.assertTrue(sc.assigns_automatic_stream_id) | |
149 | ||
91910435 SM |
150 | with self.assertRaisesRegex( |
151 | ValueError, "id provided, but stream class assigns automatic stream ids" | |
152 | ): | |
3cdfbaea SM |
153 | self._trace.create_stream(sc, id=123) |
154 | ||
d3bf1370 SM |
155 | self.assertEqual(len(self._trace), 0) |
156 | ||
157 | def test_automatic_stream_ids_wrong_type(self): | |
158 | with self.assertRaisesRegex(TypeError, "str' is not a 'bool' object"): | |
f5567ea8 | 159 | self._tc.create_stream_class(assigns_automatic_stream_id="True") |
d3bf1370 SM |
160 | |
161 | self.assertEqual(len(self._tc), 0) | |
162 | ||
3cdfbaea SM |
163 | def test_no_automatic_stream_ids(self): |
164 | sc = self._tc.create_stream_class(assigns_automatic_stream_id=False) | |
165 | self.assertFalse(sc.assigns_automatic_stream_id) | |
166 | ||
167 | stream = self._trace.create_stream(sc, id=333) | |
168 | self.assertEqual(stream.id, 333) | |
169 | ||
170 | def test_no_automatic_stream_ids_raises(self): | |
171 | sc = self._tc.create_stream_class(assigns_automatic_stream_id=False) | |
172 | self.assertFalse(sc.assigns_automatic_stream_id) | |
173 | ||
91910435 SM |
174 | with self.assertRaisesRegex( |
175 | ValueError, | |
176 | "id not provided, but stream class does not assign automatic stream ids", | |
177 | ): | |
3cdfbaea SM |
178 | self._trace.create_stream(sc) |
179 | ||
d3bf1370 SM |
180 | self.assertEqual(len(self._trace), 0) |
181 | ||
3cdfbaea SM |
182 | def test_automatic_event_class_ids(self): |
183 | sc = self._tc.create_stream_class(assigns_automatic_event_class_id=True) | |
184 | self.assertTrue(sc.assigns_automatic_event_class_id) | |
185 | ||
186 | ec = sc.create_event_class() | |
187 | self.assertIsNotNone(ec.id) | |
188 | ||
189 | def test_automatic_event_class_ids_raises(self): | |
190 | sc = self._tc.create_stream_class(assigns_automatic_event_class_id=True) | |
191 | self.assertTrue(sc.assigns_automatic_event_class_id) | |
192 | ||
91910435 SM |
193 | with self.assertRaisesRegex( |
194 | ValueError, | |
195 | "id provided, but stream class assigns automatic event class ids", | |
196 | ): | |
3cdfbaea SM |
197 | sc.create_event_class(id=123) |
198 | ||
d3bf1370 SM |
199 | self.assertEqual(len(sc), 0) |
200 | ||
201 | def test_automatic_event_class_ids_wrong_type(self): | |
202 | with self.assertRaisesRegex(TypeError, "'str' is not a 'bool' object"): | |
f5567ea8 | 203 | self._tc.create_stream_class(assigns_automatic_event_class_id="True") |
d3bf1370 SM |
204 | |
205 | self.assertEqual(len(self._tc), 0) | |
206 | ||
3cdfbaea SM |
207 | def test_no_automatic_event_class_ids(self): |
208 | sc = self._tc.create_stream_class(assigns_automatic_event_class_id=False) | |
209 | self.assertFalse(sc.assigns_automatic_event_class_id) | |
9cf643d1 | 210 | |
3cdfbaea SM |
211 | ec = sc.create_event_class(id=333) |
212 | self.assertEqual(ec.id, 333) | |
9cf643d1 | 213 | |
3cdfbaea SM |
214 | def test_no_automatic_event_class_ids_raises(self): |
215 | sc = self._tc.create_stream_class(assigns_automatic_event_class_id=False) | |
216 | self.assertFalse(sc.assigns_automatic_event_class_id) | |
9cf643d1 | 217 | |
91910435 SM |
218 | with self.assertRaisesRegex( |
219 | ValueError, | |
220 | "id not provided, but stream class does not assign automatic event class ids", | |
221 | ): | |
3cdfbaea SM |
222 | sc.create_event_class() |
223 | ||
d3bf1370 SM |
224 | self.assertEqual(len(sc), 0) |
225 | ||
26fc5aed | 226 | def test_supports_packets_without_cs(self): |
cfbd7cf3 FD |
227 | sc = self._tc.create_stream_class( |
228 | default_clock_class=self._cc, supports_packets=True | |
229 | ) | |
26fc5aed PP |
230 | self.assertTrue(sc.supports_packets) |
231 | self.assertFalse(sc.packets_have_beginning_default_clock_snapshot) | |
232 | self.assertFalse(sc.packets_have_end_default_clock_snapshot) | |
233 | ||
234 | def test_supports_packets_with_begin_cs(self): | |
cfbd7cf3 FD |
235 | sc = self._tc.create_stream_class( |
236 | default_clock_class=self._cc, | |
237 | supports_packets=True, | |
238 | packets_have_beginning_default_clock_snapshot=True, | |
239 | ) | |
26fc5aed | 240 | self.assertTrue(sc.supports_packets) |
9b24b6aa | 241 | self.assertTrue(sc.packets_have_beginning_default_clock_snapshot) |
26fc5aed | 242 | self.assertFalse(sc.packets_have_end_default_clock_snapshot) |
3cdfbaea | 243 | |
26fc5aed | 244 | def test_supports_packets_with_end_cs(self): |
cfbd7cf3 FD |
245 | sc = self._tc.create_stream_class( |
246 | default_clock_class=self._cc, | |
247 | supports_packets=True, | |
248 | packets_have_end_default_clock_snapshot=True, | |
249 | ) | |
26fc5aed PP |
250 | self.assertTrue(sc.supports_packets) |
251 | self.assertFalse(sc.packets_have_beginning_default_clock_snapshot) | |
252 | self.assertTrue(sc.packets_have_end_default_clock_snapshot) | |
253 | ||
254 | def test_supports_packets_raises_type_error(self): | |
91910435 | 255 | with self.assertRaisesRegex(TypeError, "'int' is not a 'bool' object"): |
082db648 | 256 | self._tc.create_stream_class( |
cfbd7cf3 FD |
257 | default_clock_class=self._cc, supports_packets=23 |
258 | ) | |
3cdfbaea | 259 | |
d3bf1370 SM |
260 | self.assertEqual(len(self._tc), 0) |
261 | ||
26fc5aed | 262 | def test_packets_have_begin_default_cs_raises_type_error(self): |
91910435 | 263 | with self.assertRaisesRegex(TypeError, "'int' is not a 'bool' object"): |
082db648 | 264 | self._tc.create_stream_class( |
cfbd7cf3 FD |
265 | default_clock_class=self._cc, |
266 | packets_have_beginning_default_clock_snapshot=23, | |
267 | ) | |
3cdfbaea | 268 | |
d3bf1370 SM |
269 | self.assertEqual(len(self._tc), 0) |
270 | ||
26fc5aed | 271 | def test_packets_have_end_default_cs_raises_type_error(self): |
91910435 | 272 | with self.assertRaisesRegex(TypeError, "'int' is not a 'bool' object"): |
082db648 | 273 | self._tc.create_stream_class( |
cfbd7cf3 FD |
274 | default_clock_class=self._cc, packets_have_end_default_clock_snapshot=23 |
275 | ) | |
26fc5aed | 276 | |
d3bf1370 SM |
277 | self.assertEqual(len(self._tc), 0) |
278 | ||
26fc5aed | 279 | def test_does_not_support_packets_raises_with_begin_cs(self): |
91910435 SM |
280 | with self.assertRaisesRegex( |
281 | ValueError, | |
282 | "cannot not support packets, but have packet beginning default clock snapshot", | |
283 | ): | |
082db648 | 284 | self._tc.create_stream_class( |
cfbd7cf3 FD |
285 | default_clock_class=self._cc, |
286 | packets_have_beginning_default_clock_snapshot=True, | |
287 | ) | |
26fc5aed | 288 | |
d3bf1370 SM |
289 | self.assertEqual(len(self._tc), 0) |
290 | ||
26fc5aed | 291 | def test_does_not_support_packets_raises_with_end_cs(self): |
91910435 SM |
292 | with self.assertRaisesRegex( |
293 | ValueError, | |
294 | "cannot not support packets, but have packet end default clock snapshots", | |
295 | ): | |
082db648 | 296 | self._tc.create_stream_class( |
cfbd7cf3 FD |
297 | default_clock_class=self._cc, |
298 | packets_have_end_default_clock_snapshot=True, | |
299 | ) | |
3cdfbaea | 300 | |
d3bf1370 SM |
301 | self.assertEqual(len(self._tc), 0) |
302 | ||
2e90378a | 303 | def test_supports_discarded_events_without_cs(self): |
cfbd7cf3 FD |
304 | sc = self._tc.create_stream_class( |
305 | default_clock_class=self._cc, supports_discarded_events=True | |
306 | ) | |
2e90378a PP |
307 | self.assertTrue(sc.supports_discarded_events) |
308 | self.assertFalse(sc.discarded_events_have_default_clock_snapshots) | |
309 | ||
310 | def test_supports_discarded_events_with_cs(self): | |
cfbd7cf3 FD |
311 | sc = self._tc.create_stream_class( |
312 | default_clock_class=self._cc, | |
313 | supports_discarded_events=True, | |
314 | discarded_events_have_default_clock_snapshots=True, | |
315 | ) | |
2e90378a PP |
316 | self.assertTrue(sc.supports_discarded_events) |
317 | self.assertTrue(sc.discarded_events_have_default_clock_snapshots) | |
318 | ||
319 | def test_supports_discarded_events_raises_type_error(self): | |
91910435 | 320 | with self.assertRaisesRegex(TypeError, "'int' is not a 'bool' object"): |
082db648 | 321 | self._tc.create_stream_class( |
cfbd7cf3 FD |
322 | default_clock_class=self._cc, supports_discarded_events=23 |
323 | ) | |
2e90378a | 324 | |
d3bf1370 SM |
325 | self.assertEqual(len(self._tc), 0) |
326 | ||
2e90378a | 327 | def test_discarded_events_have_default_cs_raises_type_error(self): |
91910435 | 328 | with self.assertRaisesRegex(TypeError, "'int' is not a 'bool' object"): |
082db648 | 329 | self._tc.create_stream_class( |
cfbd7cf3 FD |
330 | default_clock_class=self._cc, |
331 | discarded_events_have_default_clock_snapshots=23, | |
332 | ) | |
2e90378a | 333 | |
d3bf1370 SM |
334 | self.assertEqual(len(self._tc), 0) |
335 | ||
2e90378a | 336 | def test_does_not_support_discarded_events_raises_with_cs(self): |
91910435 SM |
337 | with self.assertRaisesRegex( |
338 | ValueError, | |
339 | "cannot not support discarded events, but have default clock snapshots for discarded event messages", | |
340 | ): | |
082db648 | 341 | self._tc.create_stream_class( |
cfbd7cf3 FD |
342 | default_clock_class=self._cc, |
343 | discarded_events_have_default_clock_snapshots=True, | |
344 | ) | |
2e90378a | 345 | |
d3bf1370 SM |
346 | self.assertEqual(len(self._tc), 0) |
347 | ||
aa740722 SM |
348 | def test_supports_discarded_events_with_clock_snapshots_without_default_clock_class_raises( |
349 | self, | |
350 | ): | |
351 | with self.assertRaisesRegex( | |
352 | ValueError, | |
f5567ea8 | 353 | "cannot have no default clock class, but have default clock snapshots for discarded event messages", |
aa740722 SM |
354 | ): |
355 | self._tc.create_stream_class( | |
356 | supports_discarded_events=True, | |
357 | discarded_events_have_default_clock_snapshots=True, | |
358 | ) | |
359 | ||
360 | self.assertEqual(len(self._tc), 0) | |
361 | ||
2e90378a | 362 | def test_supports_discarded_packets_without_cs(self): |
cfbd7cf3 FD |
363 | sc = self._tc.create_stream_class( |
364 | default_clock_class=self._cc, | |
365 | supports_discarded_packets=True, | |
366 | supports_packets=True, | |
367 | ) | |
2e90378a PP |
368 | self.assertTrue(sc.supports_discarded_packets) |
369 | self.assertFalse(sc.discarded_packets_have_default_clock_snapshots) | |
370 | ||
371 | def test_supports_discarded_packets_with_cs(self): | |
cfbd7cf3 FD |
372 | sc = self._tc.create_stream_class( |
373 | default_clock_class=self._cc, | |
374 | supports_discarded_packets=True, | |
375 | discarded_packets_have_default_clock_snapshots=True, | |
376 | supports_packets=True, | |
377 | ) | |
2e90378a PP |
378 | self.assertTrue(sc.supports_discarded_packets) |
379 | self.assertTrue(sc.discarded_packets_have_default_clock_snapshots) | |
380 | ||
26fc5aed | 381 | def test_supports_discarded_packets_raises_without_packet_support(self): |
91910435 SM |
382 | with self.assertRaisesRegex( |
383 | ValueError, "cannot support discarded packets, but not support packets" | |
384 | ): | |
082db648 | 385 | self._tc.create_stream_class( |
cfbd7cf3 FD |
386 | default_clock_class=self._cc, supports_discarded_packets=True |
387 | ) | |
26fc5aed | 388 | |
d3bf1370 SM |
389 | self.assertEqual(len(self._tc), 0) |
390 | ||
2e90378a | 391 | def test_supports_discarded_packets_raises_type_error(self): |
91910435 | 392 | with self.assertRaisesRegex(TypeError, "'int' is not a 'bool' object"): |
082db648 | 393 | self._tc.create_stream_class( |
cfbd7cf3 FD |
394 | default_clock_class=self._cc, |
395 | supports_discarded_packets=23, | |
396 | supports_packets=True, | |
397 | ) | |
2e90378a | 398 | |
d3bf1370 SM |
399 | self.assertEqual(len(self._tc), 0) |
400 | ||
2e90378a | 401 | def test_discarded_packets_have_default_cs_raises_type_error(self): |
91910435 | 402 | with self.assertRaisesRegex(TypeError, "'int' is not a 'bool' object"): |
082db648 | 403 | self._tc.create_stream_class( |
cfbd7cf3 FD |
404 | default_clock_class=self._cc, |
405 | discarded_packets_have_default_clock_snapshots=23, | |
406 | supports_packets=True, | |
407 | ) | |
2e90378a | 408 | |
d3bf1370 SM |
409 | self.assertEqual(len(self._tc), 0) |
410 | ||
2e90378a | 411 | def test_does_not_support_discarded_packets_raises_with_cs(self): |
91910435 SM |
412 | with self.assertRaisesRegex( |
413 | ValueError, | |
414 | "cannot not support discarded packets, but have default clock snapshots for discarded packet messages", | |
415 | ): | |
082db648 | 416 | self._tc.create_stream_class( |
cfbd7cf3 FD |
417 | default_clock_class=self._cc, |
418 | discarded_packets_have_default_clock_snapshots=True, | |
419 | supports_packets=True, | |
420 | ) | |
2e90378a | 421 | |
d3bf1370 SM |
422 | self.assertEqual(len(self._tc), 0) |
423 | ||
aa740722 SM |
424 | def test_supports_discarded_packets_with_clock_snapshots_without_default_clock_class_raises( |
425 | self, | |
426 | ): | |
427 | with self.assertRaisesRegex( | |
428 | ValueError, | |
f5567ea8 | 429 | "cannot have no default clock class, but have default clock snapshots for discarded packet messages", |
aa740722 SM |
430 | ): |
431 | self._tc.create_stream_class( | |
432 | supports_packets=True, | |
433 | supports_discarded_packets=True, | |
434 | discarded_packets_have_default_clock_snapshots=True, | |
435 | ) | |
436 | ||
437 | self.assertEqual(len(self._tc), 0) | |
438 | ||
3cdfbaea SM |
439 | def test_trace_class(self): |
440 | sc = self._tc.create_stream_class() | |
441 | self.assertEqual(sc.trace_class.addr, self._tc.addr) | |
f0a42b33 | 442 | self.assertIs(type(sc.trace_class), bt2_trace_class._TraceClass) |
3cdfbaea SM |
443 | |
444 | def _create_stream_class_with_event_classes(self): | |
445 | sc = self._tc.create_stream_class(assigns_automatic_event_class_id=False) | |
446 | ec1 = sc.create_event_class(id=23) | |
447 | ec2 = sc.create_event_class(id=17) | |
448 | return sc, ec1, ec2 | |
9cf643d1 PP |
449 | |
450 | def test_getitem(self): | |
3cdfbaea SM |
451 | sc, ec1, ec2 = self._create_stream_class_with_event_classes() |
452 | ||
453 | self.assertEqual(sc[23].addr, ec1.addr) | |
f0a42b33 | 454 | self.assertEqual(type(sc[23]), bt2_event_class._EventClass) |
3cdfbaea | 455 | self.assertEqual(sc[17].addr, ec2.addr) |
f0a42b33 | 456 | self.assertEqual(type(sc[17]), bt2_event_class._EventClass) |
9cf643d1 PP |
457 | |
458 | def test_getitem_wrong_key_type(self): | |
3cdfbaea SM |
459 | sc, _, _ = self._create_stream_class_with_event_classes() |
460 | ||
91910435 | 461 | with self.assertRaisesRegex(TypeError, "'str' is not an 'int' object"): |
f5567ea8 | 462 | sc["event23"] |
9cf643d1 PP |
463 | |
464 | def test_getitem_wrong_key(self): | |
3cdfbaea SM |
465 | sc, _, _ = self._create_stream_class_with_event_classes() |
466 | ||
f5567ea8 | 467 | with self.assertRaisesRegex(KeyError, "19"): |
3cdfbaea | 468 | sc[19] |
9cf643d1 PP |
469 | |
470 | def test_len(self): | |
3cdfbaea SM |
471 | sc, _, _ = self._create_stream_class_with_event_classes() |
472 | ||
473 | self.assertEqual(len(sc), 2) | |
9cf643d1 PP |
474 | |
475 | def test_iter(self): | |
3cdfbaea SM |
476 | sc, _, _ = self._create_stream_class_with_event_classes() |
477 | ||
478 | ec_ids = sorted(sc) | |
479 | self.assertEqual(ec_ids, [17, 23]) | |
d14ddbba SM |
480 | |
481 | ||
f5567ea8 | 482 | if __name__ == "__main__": |
d14ddbba | 483 | unittest.main() |