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_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_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_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)