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_WrappingADataDescriptorWithoutSet(TestCase): def setUp(self): self.decor = DescriptorDecoratorBase(mocks.Stubs.DataDescriptorWithoutSet()) self.instance = mocks.ClassWithDescriptor(self.decor) def test_set_raises_AttributeError(self): with self.assertRaises(AttributeError): self.decor.__set__(self.instance, 5) def test_instance_set_raises_AttributeError(self): with self.assertRaises(AttributeError): self.instance.attr = 5
class DescriptorDecorator_WrappingABindingDescriptor(TestCase): def setUp(self): self.decor = DescriptorDecoratorBase(mocks.Binding(mocks.Descriptor())) self.Class = type(mocks.ClassWithDescriptor(self.decor)) def test_get_from_class_returns_UnboundAttribute(self): result = self.decor.__get__(None, self.Class) self.assertIsInstance(result, UnboundAttribute) def test_UnboundAttribute_lifts_descriptor(self): result = self.decor.__get__(None, self.Class) self.assertIs(result.descriptor, self.decor)
class DescriptorDecorator_WrappingADataDescriptorWithoutGet(TestCase): def setUp(self): self.decor = DescriptorDecoratorBase(mocks.Stubs.DataDescriptorWithoutGet()) self.instance = mocks.ClassWithDescriptor(self.decor) self.Class = type(self.instance) def test_get_from_instance_returns_self(self): result = self.decor.__get__(self.instance, self.Class) self.assertIs(result, self.decor) def test_get_from_class_returns_self(self): result = self.decor.__get__(None, self.Class) self.assertIs(result, self.decor)
def test_lift_descriptor_new_descriptor(self): unboundattr = UnboundAttribute(Class.descAttr, Class) wrapper_descriptor = DescriptorDecoratorBase(Class.descAttr) new_unboundattr = unboundattr.lift_descriptor(wrapper_descriptor) self.assertEqual(new_unboundattr.descriptor, wrapper_descriptor)
def test_self_lifting(self): wrapped = mocks.Descriptor() wrapper = DescriptorDecoratorBase(None) result = _lifted_desc_results(wrapped, wrapper, None, object) self.assertIs(result, wrapper)
def test_Unbounded_lifting(self): wrapped = Binding(None) wrapper = DescriptorDecoratorBase(wrapped) result = _lifted_desc_results(wrapped, wrapper, None, object) self.assertIs(result, wrapper)
def test_lift_descriptor_set(self): instance = Class() unboundattr = UnboundAttribute(Class.descAttr, Class) wrapper_descriptor = DescriptorDecoratorBase(Class.descAttr) new_unboundattr = unboundattr.lift_descriptor(wrapper_descriptor) new_unboundattr.set(instance, 5) self.assertEqual(instance.descAttr, 5)
def test_other(self): wrapped = mocks.Descriptor() instance = mocks.ClassWithDescriptor(wrapped) instance.attr = 5 wrapper = DescriptorDecoratorBase(wrapped) result = _lifted_desc_results(wrapped, wrapper, instance, type(instance)) self.assertEqual(result, 5)
def test_redirects_to_wrapped_methods(self): wrapper = DescriptorDecoratorBase(DescriptorDecorator_Base_Test.Wrapped()) self.assertTrue(wrapper.other_method())
def setUp(self): self.decor = DescriptorDecoratorBase(Binding(mocks.Descriptor())) self.Class = type(mocks.ClassWithDescriptor(self.decor)) self.instance = self.Class() self.instance.attr = 5
def setUp(self): self.decor = DescriptorDecoratorBase(mocks.Binding(mocks.Descriptor())) self.Class = type(mocks.ClassWithDescriptor(self.decor))
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)
def setUp(self): self.decor = DescriptorDecoratorBase(mocks.Stubs.DataDescriptorWithoutGet()) self.instance = mocks.ClassWithDescriptor(self.decor) self.Class = type(self.instance)
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_doesnt_redirect_to_nonexistant_methods(self): wrapper = DescriptorDecoratorBase(DescriptorDecorator_Base_Test.Wrapped()) with self.assertRaises(AttributeError): wrapper.non_existant_method()
def setUp(self): unboundattr = UnboundAttribute(Class.descAttr, Class) self.wrapper_descriptor = DescriptorDecoratorBase(Class.descAttr) self.new_unboundattr = unboundattr.lift_descriptor( self.wrapper_descriptor)