def test_comparison(self): d = ObjectDict() d.bar = {'prop': 'value'} d.foo = 3 # should compare like a normal dict self.assertEqual(d, {'foo': 3, 'bar': {'prop': 'value'}})
def test_cross_setting(self): d = ObjectDict() # Set one way d['bar'] = 4 d.far = 5 # Read the other self.assertEqual(d.bar, 4) self.assertEqual(d['far'], 5)
def test_nested_attributes(self): d = ObjectDict() # set var to a dict, which should auto convert to ObjectDict d.bar = {'prop': 'value'} self.assertIsInstance(d.bar, ObjectDict) # test Reading self.assertEqual(d.bar.prop, 'value') # test partial setting d.bar.prop = 'newer' self.assertEqual(d.bar.prop, 'newer')
def test_extraction_list(self): d = ObjectDict({'foo': 0, 'bar': [{'x': 1, 'y': 2}, {'x': 3, 'y': 4}]}) self.assertTrue(isinstance(d.bar, list)) self.assertEqual([getattr(x, 'x') for x in d.bar], [1, 3]) self.assertEqual([getattr(x, 'y') for x in d.bar], [2, 4])
def test_missing_entry(self): d = ObjectDict() with self.assertRaises(KeyError): d['bar'] # This should be attribute, not key error with self.assertRaises(AttributeError): d.bar
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.config = ObjectDict()
def test_dir(self): d = ObjectDict({'a': 15, 'b': [[{'c': "foo"}]]}) self.assertIn('a', dir(d)) self.assertIn('b', dir(d)) self.assertNotIn('c', dir(d)) self.assertIn('c', dir(d.b[0][0]))
def test_constructor_multiple_lists(self): d = ObjectDict({'a': 15, 'b': [[{'c': "foo"}]]}) self.assertEqual(d.b[0][0].c, 'foo') self.assertIsInstance(d.b[0][0], ObjectDict)
def test_constructor_dict(self): d = ObjectDict(foo=3, bar=dict(x=1, y=2)) self.assertEqual(d.foo, 3) self.assertEqual(d.bar.x, 1) self.assertIsInstance(d.bar, ObjectDict)
def test_extraction_empty_list(self): d = ObjectDict() self.assertEqual(list(d.keys()), [])
def test_dict_constructor(self): a = {'a': 1} self.assertEqual(ObjectDict(**a), a)
def test_constructor_corner_case(self): self.assertEqual(ObjectDict({}), {}) self.assertEqual(ObjectDict(), {}) with self.assertRaises(TypeError): ObjectDict({'a': 1}, {'b': 5})
def test_set_index(self): d = ObjectDict() d['bar'] = 4 self.assertEqual(d['bar'], 4)
def test_set_attribute(self): d = ObjectDict() d.far = 5 self.assertEqual(d.far, 5)
def test_basic(self): d = ObjectDict({'foo': 3}) self.assertEqual(d.foo, 3) self.assertEqual(d['foo'], 3)