Commit | Line | Data |
---|---|---|
9cf643d1 | 1 | import unittest |
8c2367b8 | 2 | from utils import get_default_trace_class |
9cf643d1 PP |
3 | |
4 | ||
5 | class TraceTestCase(unittest.TestCase): | |
6 | def setUp(self): | |
8c2367b8 | 7 | self._tc = get_default_trace_class() |
9cf643d1 PP |
8 | |
9 | def test_create_default(self): | |
8c2367b8 SM |
10 | trace = self._tc() |
11 | self.assertEqual(trace.name, None) | |
811644b8 PP |
12 | |
13 | def test_create_full(self): | |
8c2367b8 SM |
14 | trace = self._tc(name='my name') |
15 | self.assertEqual(trace.name, 'my name') | |
9cf643d1 | 16 | |
8c2367b8 | 17 | def test_create_invalid_name(self): |
9cf643d1 | 18 | with self.assertRaises(TypeError): |
8c2367b8 | 19 | self._tc(name=17) |
9cf643d1 | 20 | |
05abc762 PP |
21 | def test_attr_trace_class(self): |
22 | trace = self._tc(name='my name') | |
23 | self.assertEqual(trace.cls.addr, self._tc.addr) | |
24 | ||
8c2367b8 SM |
25 | def test_len(self): |
26 | trace = self._tc() | |
27 | sc = self._tc.create_stream_class() | |
28 | self.assertEqual(len(trace), 0) | |
9cf643d1 | 29 | |
8c2367b8 SM |
30 | trace.create_stream(sc) |
31 | self.assertEqual(len(trace), 1) | |
9cf643d1 | 32 | |
8c2367b8 SM |
33 | def _create_trace_with_some_streams(self): |
34 | sc = self._tc.create_stream_class(assigns_automatic_stream_id=False) | |
35 | trace = self._tc() | |
36 | trace.create_stream(sc, id=12) | |
37 | trace.create_stream(sc, id=15) | |
38 | trace.create_stream(sc, id=17) | |
9cf643d1 | 39 | |
8c2367b8 | 40 | return trace |
9cf643d1 PP |
41 | |
42 | def test_iter(self): | |
8c2367b8 SM |
43 | trace = self._create_trace_with_some_streams() |
44 | stream_ids = set(trace) | |
45 | self.assertEqual(stream_ids, {12, 15, 17}) | |
9cf643d1 | 46 | |
8c2367b8 SM |
47 | def test_getitem(self): |
48 | trace = self._create_trace_with_some_streams() | |
9cf643d1 | 49 | |
8c2367b8 | 50 | self.assertEqual(trace[12].id, 12) |
9cf643d1 | 51 | |
8c2367b8 SM |
52 | def test_getitem_invalid_key(self): |
53 | trace = self._create_trace_with_some_streams() | |
9cf643d1 | 54 | with self.assertRaises(KeyError): |
8c2367b8 | 55 | trace[18] |
9cf643d1 | 56 | |
8c2367b8 SM |
57 | def test_destruction_listener(self): |
58 | def on_trace_class_destruction(trace_class): | |
59 | nonlocal trace_class_destroyed | |
60 | trace_class_destroyed = True | |
811644b8 | 61 | |
8c2367b8 SM |
62 | def on_trace_destruction(trace): |
63 | nonlocal trace_destroyed | |
64 | trace_destroyed = True | |
811644b8 | 65 | |
8c2367b8 SM |
66 | trace_destroyed = False |
67 | trace_class_destroyed = False | |
811644b8 | 68 | |
8c2367b8 SM |
69 | trace_class = get_default_trace_class() |
70 | stream_class = trace_class.create_stream_class() | |
71 | trace = trace_class() | |
72 | stream = trace.create_stream(stream_class) | |
811644b8 | 73 | |
8c2367b8 SM |
74 | trace_class.add_destruction_listener(on_trace_class_destruction) |
75 | trace.add_destruction_listener(on_trace_destruction) | |
811644b8 | 76 | |
8c2367b8 SM |
77 | self.assertFalse(trace_class_destroyed) |
78 | self.assertFalse(trace_destroyed) | |
9cf643d1 | 79 | |
8c2367b8 | 80 | del trace |
9cf643d1 | 81 | |
8c2367b8 SM |
82 | self.assertFalse(trace_class_destroyed) |
83 | self.assertFalse(trace_destroyed) | |
9cf643d1 | 84 | |
8c2367b8 | 85 | del stream |
9cf643d1 | 86 | |
8c2367b8 SM |
87 | self.assertFalse(trace_class_destroyed) |
88 | self.assertTrue(trace_destroyed) | |
9cf643d1 | 89 | |
8c2367b8 | 90 | del trace_class |
9cf643d1 | 91 | |
8c2367b8 SM |
92 | self.assertFalse(trace_class_destroyed) |
93 | self.assertTrue(trace_destroyed) | |
9cf643d1 | 94 | |
8c2367b8 | 95 | del stream_class |
9cf643d1 | 96 | |
8c2367b8 SM |
97 | self.assertTrue(trace_class_destroyed) |
98 | self.assertTrue(trace_destroyed) |