class DescriptorDecorator_WrappingANonDataDescriptor_Test(TestCase): def setUp(self): self.wrapped = mocks.Stubs.NonDataDescriptor() self.decor = DescriptorDecoratorBase(self.wrapped) self.instance = mocks.ClassWithDescriptor(self.decor) self.Class = type(self.instance) def test_get_from_class(self): self.assertIs(self.decor, self.decor.__get__(None, self.Class)) def test_get_from_class_redirects(self): self.decor.__get__(None, self.Class) self.assertTrue(self.wrapped.get_called) def test_get_from_instance(self): # The NonDataDescriptor returns self regardless of whether there's an # instance - typical non-data descriptors ignore instance self.assertIs(self.decor, self.decor.__get__(self.instance, self.Class)) def test_get_from_instance_redirects(self): self.decor.__get__(self.instance, self.Class) self.assertTrue(self.wrapped.get_called) def test_set_adds_to_instance(self): self.decor.__set__(self.instance, 5) self.assertEqual(self.instance.__dict__['attr'], 5) def test_delete_fails(self): with self.assertRaises(AttributeError): self.decor.__delete__(self.instance)
class DescriptorDecorator_WrappingADataDescriptorWithoutDelete(TestCase): def setUp(self): self.decor = DescriptorDecoratorBase(mocks.Stubs.DataDescriptorWithoutDelete()) self.instance = mocks.ClassWithDescriptor(self.decor) def test_delete_raises_AttributeError(self): with self.assertRaises(AttributeError): self.decor.__delete__(self.instance) def test_instance_delete_raises_AttributeError(self): with self.assertRaises(AttributeError): del self.instance.attr
class DescriptorDecorator_WrappingADataDescriptor_Test(TestCase): def setUp(self): self.wrapped = mocks.Stubs.FullDataDescriptor() self.decor = DescriptorDecoratorBase(self.wrapped) self.instance = mocks.ClassWithDescriptor(self.decor) self.Class = type(self.instance) def test_get_from_class_lifts_to_self(self): self.assertIs(self.decor, self.decor.__get__(None, self.Class)) def test_get_from_class_redirects(self): self.decor.__get__(None, self.Class) self.assertTrue(self.wrapped.get_called) def test_get_from_instance(self): result = self.decor.__get__(self.instance, self.Class) self.assertEqual(result, self.wrapped.__get__(self.instance, self.Class)) def test_get_from_instance_redirects(self): self.decor.__get__(self.instance, self.Class) self.assertTrue(self.wrapped.get_called) def test_set_does_not_add_to_instance(self): self.decor.__set__(self.instance, 5) self.assertFalse('attr' in self.instance.__dict__) def test_set_redirects(self): self.decor.__set__(self.instance, 5) self.assertTrue(self.wrapped.set_called) def test_delete_redirects(self): self.decor.__delete__(self.instance) self.assertTrue(self.wrapped.delete_called)