bt2: field.py: add `_count` method to `_VariantField`
[babeltrace.git] / tests / bindings / python / bt2 / test_field.py
index b17c175bca363c5b624e7a24286abf2e26f9f6fd..f478515fdfec23f10731ee22047d4a8e230ec3b5 100644 (file)
@@ -126,6 +126,52 @@ def _create_struct_array_field(tc, length):
     return packet.context_field[field_name]
 
 
+class BitArrayFieldTestCase(unittest.TestCase):
+    def _create_field(self):
+        return _create_field(self._tc, self._tc.create_bit_array_field_class(24))
+
+    def setUp(self):
+        self._tc = get_default_trace_class()
+        self._def_value = 15497
+        self._def = self._create_field()
+        self._def.value_as_integer = self._def_value
+        self._def_new_value = 101542
+
+    def test_assign_invalid_type(self):
+        with self.assertRaises(TypeError):
+            self._def.value_as_integer = 'onze'
+
+    def test_assign(self):
+        self._def.value_as_integer = 199
+        self.assertEqual(self._def.value_as_integer, 199)
+
+    def test_assign_masked(self):
+        self._def.value_as_integer = 0xE1549BB
+        self.assertEqual(self._def.value_as_integer, 0xE1549BB & ((1 << 24) - 1))
+
+    def test_eq(self):
+        other = self._create_field()
+        other.value_as_integer = self._def_value
+        self.assertEqual(self._def, other)
+
+    def test_ne_same_type(self):
+        other = self._create_field()
+        other.value_as_integer = self._def_value - 1
+        self.assertNotEqual(self._def, other)
+
+    def test_ne_diff_type(self):
+        self.assertNotEqual(self._def, self._def_value)
+
+    def test_len(self):
+        self.assertEqual(len(self._def), 24)
+
+    def test_str(self):
+        self.assertEqual(str(self._def), str(self._def_value))
+
+    def test_repr(self):
+        self.assertEqual(repr(self._def), repr(self._def_value))
+
+
 # Base class for numeric field test cases.
 #
 # To be compatible with this base class, a derived class must, in its
@@ -1077,6 +1123,52 @@ def _inject_numeric_testing_methods(cls):
         )
 
 
+class BoolFieldTestCase(_TestNumericField, unittest.TestCase):
+    def _create_fc(self, tc):
+        return tc.create_bool_field_class()
+
+    def setUp(self):
+        self._tc = get_default_trace_class()
+        self._def = _create_field(self._tc, self._create_fc(self._tc))
+        self._def.value = True
+        self._def_value = True
+        self._def_new_value = False
+
+    def test_assign_true(self):
+        raw = True
+        self._def.value = raw
+        self.assertEqual(self._def, raw)
+
+    def test_assign_false(self):
+        raw = False
+        self._def.value = raw
+        self.assertEqual(self._def, raw)
+
+    def test_assign_field_true(self):
+        field = _create_field(self._tc, self._create_fc(self._tc))
+        raw = True
+        field.value = raw
+        self._def.value = field
+        self.assertEqual(self._def, raw)
+
+    def test_assign_field_false(self):
+        field = _create_field(self._tc, self._create_fc(self._tc))
+        raw = False
+        field.value = raw
+        self._def.value = field
+        self.assertEqual(self._def, raw)
+
+    def test_assign_invalid_type(self):
+        with self.assertRaises(TypeError):
+            self._def.value = 17
+
+    def test_str_op(self):
+        self.assertEqual(str(self._def), str(self._def_value))
+
+
+_inject_numeric_testing_methods(BoolFieldTestCase)
+
+
 class _TestIntegerFieldCommon(_TestNumericField):
     def test_assign_true(self):
         raw = True
@@ -1391,7 +1483,7 @@ class _TestArrayFieldCommon:
 
     def test_getitem(self):
         field = self._def[1]
-        self.assertIs(type(field), bt2.field._SignedIntegerField)
+        self.assertIs(type(field), bt2._SignedIntegerField)
         self.assertEqual(field, 1847)
 
     def test_eq(self):
@@ -1600,7 +1692,7 @@ class StructureFieldTestCase(unittest.TestCase):
 
     def test_getitem(self):
         field = self._def['A']
-        self.assertIs(type(field), bt2.field._SignedIntegerField)
+        self.assertIs(type(field), bt2._SignedIntegerField)
         self.assertEqual(field, -1872)
 
     def test_member_at_index_out_of_bounds_after(self):
@@ -1777,6 +1869,77 @@ class StructureFieldTestCase(unittest.TestCase):
         self.assertTrue(expected_string_found)
 
 
+class OptionFieldTestCase(unittest.TestCase):
+    def _create_fc(self, tc):
+        fc = tc.create_option_field_class(tc.create_string_field_class())
+        top_fc = tc.create_structure_field_class()
+        top_fc.append_member('opt_field', fc)
+        return top_fc
+
+    def setUp(self):
+        self._tc = get_default_trace_class()
+        fld = _create_field(self._tc, self._create_fc(self._tc))
+        self._def = fld['opt_field']
+
+    def test_value_prop(self):
+        self._def.value = 'hiboux'
+        self.assertEqual(self._def.field, 'hiboux')
+        self.assertTrue(self._def.has_field)
+
+    def test_has_field_prop_true(self):
+        self._def.has_field = True
+        self.assertTrue(self._def.has_field)
+
+    def test_has_field_prop_true(self):
+        self._def.has_field = False
+        self.assertFalse(self._def.has_field)
+
+    def test_bool_op_true(self):
+        self._def.value = 'allo'
+        self.assertTrue(self._def)
+
+    def test_bool_op_true(self):
+        self._def.has_field = False
+        self.assertFalse(self._def)
+
+    def test_field_prop_existing(self):
+        self._def.value = 'meow'
+        field = self._def.field
+        self.assertEqual(field, 'meow')
+
+    def test_field_prop_none(self):
+        self._def.has_field = False
+        field = self._def.field
+        self.assertIsNone(field)
+
+    def test_field_prop_existing_then_none(self):
+        self._def.value = 'meow'
+        field = self._def.field
+        self.assertEqual(field, 'meow')
+        self._def.has_field = False
+        field = self._def.field
+        self.assertIsNone(field)
+
+    def test_eq(self):
+        field = _create_field(self._tc, self._create_fc(self._tc))
+        field = field['opt_field']
+        field.value = 'walk'
+        self._def.value = 'walk'
+        self.assertEqual(self._def, field)
+
+    def test_eq_invalid_type(self):
+        self._def.value = 'gerry'
+        self.assertNotEqual(self._def, 23)
+
+    def test_str_op(self):
+        self._def.value = 'marcel'
+        self.assertEqual(str(self._def), str(self._def.field))
+
+    def test_repr_op(self):
+        self._def.value = 'mireille'
+        self.assertEqual(repr(self._def), repr(self._def.field))
+
+
 class VariantFieldTestCase(unittest.TestCase):
     def _create_fc(self, tc):
         ft0 = tc.create_signed_integer_field_class(32)
@@ -1825,6 +1988,9 @@ class VariantFieldTestCase(unittest.TestCase):
         self._def.value = 1774
         self.assertEqual(self._def, field)
 
+    def test_len(self):
+        self.assertEqual(len(self._def), 4)
+
     def test_eq_invalid_type(self):
         self._def.selected_option_index = 1
         self._def.value = 'gerry'
This page took 0.025144 seconds and 4 git commands to generate.