def test_custom_on_closed_error_type(self): klass = self._make_class() decorated_class = _helpers.raise_on_closed( "I'm closed!", exc_class=RuntimeError)(klass) instance = decorated_class() instance._closed = True with six.assertRaisesRegex(self, RuntimeError, "I'm closed!"): instance.instance_method()
def test_public_instance_methods_on_closed_instance(self): klass = self._make_class() decorated_class = _helpers.raise_on_closed("I'm closed!")(klass) instance = decorated_class() instance._closed = True with six.assertRaisesRegex(self, exceptions.ProgrammingError, "I'm closed!"): instance.instance_method()
def test_preserves_method_names(self): klass = self._make_class() decorated_class = _helpers.raise_on_closed("I'm closed!")(klass) instance = decorated_class() self.assertEqual(instance.instance_method.__name__, "instance_method") self.assertEqual(instance.class_method.__name__, "class_method") self.assertEqual(instance.static_method.__name__, "static_method") self.assertEqual(instance._private_method.__name__, "_private_method")
def test_methods_wo_public_instance_methods_on_closed_instance(self): klass = self._make_class() decorated_class = _helpers.raise_on_closed("I'm closed!")(klass) instance = decorated_class() instance._closed = True # no errors expected self.assertEqual(instance.class_method(), "class member") self.assertEqual(instance.static_method(), "static return value") self.assertEqual(instance._private_method(), "instance member")
def test_methods_on_not_closed_instance(self): klass = self._make_class() decorated_class = _helpers.raise_on_closed("I'm closed!")(klass) instance = decorated_class() instance._closed = False self.assertEqual(instance.instance_method(), "instance member") self.assertEqual(instance.class_method(), "class member") self.assertEqual(instance.static_method(), "static return value") self.assertEqual(instance._private_method(), "instance member")
def test_custom_class_closed_attribute(self): klass = self._make_class() decorated_class = _helpers.raise_on_closed( "I'm closed!", closed_attr_name="_really_closed")(klass) instance = decorated_class() instance._closed = False instance._really_closed = True with self.assertRaisesRegex(exceptions.ProgrammingError, "I'm closed!"): instance.instance_method()