def test_patch_class_self(self): """a class that creates itself should create a copy of the patched class""" contents = os.linesep.join([ "class PatchFactory(object):", " def clone(self): return type(self)()", " def bar(self): return 55", "" ]) testdata.create_module("pathclassmod", contents=contents) from pathclassmod import PatchFactory def mock_bar(self): return 33 MonkeyFactory = testdata.patch_class( PatchFactory, bar=mock_bar ) f = PatchFactory() fm = MonkeyFactory() self.assertEqual(55, f.bar()) self.assertEqual(55, f.clone().bar()) self.assertEqual(33, fm.bar()) self.assertEqual(33, fm.clone().bar())
def test_patch_class_property(self): class Foo(object): @property def bar(self): return 5 @property def che(self): return 55 def bam(self): return id(self) MonkeyFoo = testdata.patch_class( Foo, bar=3 ) f = Foo() fm = MonkeyFoo() self.assertEqual(5, f.bar) self.assertEqual(3, fm.bar) self.assertEqual(55, fm.che) self.assertNotEqual(f.bam(), fm.bam()) self.assertEqual(id(f), f.bam()) self.assertEqual(id(fm), fm.bam())
def test_patch_class(self): class Foo(object): che = [] def bar(self): return 5 def mock_bar(self): return 3 MonkeyFoo = testdata.patch_class( Foo, bar=mock_bar ) f = Foo() fm = MonkeyFoo() self.assertEqual(5, f.bar()) self.assertEqual(3, fm.bar()) MonkeyFoo.che.extend([1, 2, 3]) self.assertEqual(3, len(MonkeyFoo.che)) self.assertEqual(3, len(fm.che)) self.assertFalse(Foo.che) self.assertFalse(f.che)