def test_value_ranking(self): o = OptionValueContainer() o.add_forwardings({'foo': 'bar'}) o.bar = RankedValue(RankedValue.CONFIG, 11) self.assertEqual(11, o.foo) o.bar = RankedValue(RankedValue.HARDCODED, 22) self.assertEqual(11, o.foo) o.bar = RankedValue(RankedValue.ENVIRONMENT, 33) self.assertEqual(33, o.foo) o.bar = 44 # No explicit rank is assumed to be a FLAG. self.assertEqual(44, o.foo)
def test_is_flagged(self): o = OptionValueContainer() o.add_forwardings({'foo': 'bar'}) o.bar = RankedValue(RankedValue.NONE, 11) self.assertFalse(o.is_flagged('foo')) o.bar = RankedValue(RankedValue.CONFIG, 11) self.assertFalse(o.is_flagged('foo')) o.bar = RankedValue(RankedValue.ENVIRONMENT, 11) self.assertFalse(o.is_flagged('foo')) o.bar = RankedValue(RankedValue.FLAG, 11) self.assertTrue(o.is_flagged('foo'))
def test_forwarding(self): o = OptionValueContainer() o.add_forwardings({'foo': 'bar'}) o.bar = 1 self.assertEqual(1, o.foo) o.bar = 2 self.assertEqual(2, o.foo) o.add_forwardings({'baz': 'qux'}) o.qux = 3 self.assertEqual(2, o.foo) self.assertEqual(3, o.baz) # Direct setting overrides forwarding. o.foo = 4 self.assertEqual(4, o.foo)
def test_deepcopy(self): # deepcopy semantics can get hairy when overriding __setattr__/__getattr__, so we test them. o = OptionValueContainer() o.foo = 1 o.bar = {'a': 111} p = copy.deepcopy(o) o.bar['b'] = 222 # Add to original dict. self.assertEqual(1, p.foo) self.assertEqual({'a': 111}, p.bar) # Ensure dict was copied.
def test_indexing(self): o = OptionValueContainer() o.add_forwardings({'foo': 'bar'}) o.bar = 1 self.assertEqual(1, o['foo']) self.assertEqual(1, o['bar']) with self.assertRaises(AttributeError): o['baz']
def test_copy(self): # copy semantics can get hairy when overriding __setattr__/__getattr__, so we test them. o = OptionValueContainer() o.add_forwardings({'foo': 'bar'}) o.add_forwardings({'baz': 'qux'}) o.bar = 1 o.qux = { 'a': 111 } p = copy.copy(o) o.baz['b'] = 222 # Add to original dict. self.assertEqual(1, p.foo) self.assertEqual({ 'a': 111, 'b': 222 }, p.baz) # Ensure dict was not copied.
def test_deepcopy(self): # deepcopy semantics can get hairy when overriding __setattr__/__getattr__, so we test them. o = OptionValueContainer() o.add_forwardings({'foo': 'bar'}) o.add_forwardings({'baz': 'qux'}) o.bar = 1 o.qux = {'a': 111} p = copy.deepcopy(o) o.baz['b'] = 222 # Add to original dict. self.assertEqual(1, p.foo) self.assertEqual({'a': 111}, p.baz) # Ensure dict was copied.
def test_indexing(self): o = OptionValueContainer() o.add_forwardings({'foo': 'bar'}) o.bar = 1 self.assertEqual(1, o['foo']) self.assertEqual(1, o['bar']) self.assertEqual(1, o.get('foo')) self.assertEqual(1, o.get('foo', 2)) self.assertIsNone(o.get('unknown')) self.assertEqual(2, o.get('unknown', 2)) with self.assertRaises(AttributeError): o['baz']
def test_deepcopy(self): # copy semantics can get hairy when overriding __setattr__/__getattr__, so we test them. o = OptionValueContainer() o.foo = RankedValue(RankedValue.FLAG, 1) o.bar = RankedValue(RankedValue.FLAG, {'a': 111}) p = copy.deepcopy(o) # Verify that the result is in fact a copy. self.assertEqual(1, p.foo) # Has original attribute. o.baz = RankedValue(RankedValue.FLAG, 42) self.assertFalse(hasattr(p, 'baz')) # Does not have attribute added after the copy. # Verify that it's a deep copy by modifying a referent in o and reading it in p. o.bar['b'] = 222 self.assertEqual({'a': 111}, p.bar)
def test_deepcopy(self) -> None: # copy semantics can get hairy when overriding __setattr__/__getattr__, so we test them. o = OptionValueContainer() o.foo = RankedValue(RankedValue.FLAG, 1) o.bar = RankedValue(RankedValue.FLAG, {"a": 111}) p = copy.deepcopy(o) # Verify that the result is in fact a copy. self.assertEqual(1, p.foo) # Has original attribute. o.baz = RankedValue(RankedValue.FLAG, 42) self.assertFalse(hasattr(p, "baz")) # Does not have attribute added after the copy. # Verify that it's a deep copy by modifying a referent in o and reading it in p. # TODO: add type hints to ranked_value.py and option_value_container.py so that this works. o.bar["b"] = 222 # type: ignore[index] self.assertEqual({"a": 111}, p.bar)
def test_deepcopy(self): # copy semantics can get hairy when overriding __setattr__/__getattr__, so we test them. o = OptionValueContainer() o.foo = 1 o.bar = {'a': 111} p = copy.deepcopy(o) # Verify that the result is in fact a copy. self.assertEqual(1, p.foo) # Has original attribute. o.baz = 42 self.assertFalse(hasattr( p, 'baz')) # Does not have attribute added after the copy. # Verify that it's a deep copy by modifying a referent in o and reading it in p. o.bar['b'] = 222 self.assertEqual({'a': 111}, p.bar)