def test_final_property(self): from Merlin.Testing.BaseClass import Callback, CProperty32 class C(CProperty32): pass x = C() Callback.On(x) # 0 - 4 + 400 + 40 pv = x.Property # -4 self.assertEqual(432, pv) class C(CProperty32): def __init__(self): self.field = 5 def get_Property(self): return self.field def set_Property(self, value): self.field = value + 50 Property = property(get_Property, set_Property) x = C() Callback.On(x) #self.assertEqual(x.Property, 5) # bug 372831 x.Property = 6
def test_long_hierarchy(self): from Merlin.Testing import Flag from Merlin.Testing.BaseClass import Callback, CType11, CType21 class C(CType11): pass x = C() x.m1() Flag.Check(10) Flag.Reset() Callback.On(x) Flag.Check(10) class C(CType11): def m1(self): Flag.Set(20) x = C() Callback.On(x) Flag.Check(20) class C(CType21): pass x = C() self.assertRaises(AttributeError, Callback.On, x) class C(CType21): def m1(self): Flag.Set(30) x = C() Callback.On(x) Flag.Check(30)
def test_super_on_property(self): from Merlin.Testing.BaseClass import Callback, CProperty30 class C(CProperty30): def get_Property(self): return super(C, self).Property def set_Property(self, value): CProperty30.Property.SetValue(self, value + 500) Property = property(get_Property, set_Property) x = C() Callback.On(x) # read (base_read)/+200/+500/write (base_write/+20) self.assertEqual(x.Property, 720) x = C() x.Property = 1 self.assertEqual(x.Property, 521) ## bad user code attempt: use 'Property' directly class C(CProperty30): def get_Property(self): return super(C, self).Property def set_Property(self, value): super(C, self).Property = value Property = property(get_Property, set_Property) x = C() self.assertRaises(AttributeError, Callback.On, x) self.assertEqual(x.Property, 0) # read def f(): x.Property = 1 # write self.assertRaises(AttributeError, f) # cannot set slot
def test_abstract_property(self): from Merlin.Testing.BaseClass import Callback, CProperty31 class C(CProperty31): pass x = C() self.assertRaises(AttributeError, Callback.On, x) class C(CProperty31): def __init__(self): self.field = 1 def get_PropertyX(self): return self.field; def set_PropertyX(self, value): self.field = value + 10 Property = property(get_PropertyX, set_PropertyX) x = C() Callback.On(x) self.assertEqual(x.field, 111) x = C() self.assertTrue(not hasattr(CProperty31, 'get_Property')) self.assertTrue(not hasattr(CProperty31, 'set_Property')) self.assertTrue(not hasattr(x, 'get_Property')) self.assertTrue(not hasattr(x, 'set_Property'))
def test_final_methods(self): from Merlin.Testing.BaseClass import Callback, Class210e class C(Class210e): def m210(self): return 700 x = C() self.assertEqual(x.m210(), 700) #self.assertEqual(Class210a.m210(x), 210) # bug 368813 self.assertEqual(Class210e.m210(x), 214) self.assertEqual(Callback.On(x), 214)
def test_virtual_property(self): from Merlin.Testing.BaseClass import Callback, CProperty30 class C(CProperty30): pass x = C() Callback.On(x) self.assertEqual(x.Property, 220) self.assertTrue(not hasattr(CProperty30, 'set_Property')) self.assertTrue(not hasattr(CProperty30, 'get_Property')) class C(CProperty30): def __init__(self): self.field = 3 def get_Property(self): return self.field def set_Property(self, value): self.field = value + 30 x = C() Callback.On(x) self.assertEqual( x.field, 233) # we read field, we added 200 from C#, and added 30 ourself self.assertEqual(x.Property, 233) x.field = 3 C.Property = property(C.get_Property, C.set_Property) Callback.On(x) self.assertEqual(x.field, 233) self.assertEqual(x.Property, 233) self.assertTrue(not hasattr(CProperty30, 'set_Property')) self.assertTrue(not hasattr(CProperty30, 'get_Property')) del C.Property # workaround: remove after bug 327528 C.Property = property(C.get_Property) self.assertRaisesMessage(AttributeError, "readonly attribute", Callback.On, x)
def test_basic(self): from Merlin.Testing.BaseClass import Callback, COperator10 class C(COperator10): def __add__(self, other): return C(self.Value * other.Value) x = C(4) y = C(5) z = x + y self.assertEqual(z.Value, 20) z = Callback.On(x, y)
def test_super_on_default_index(self): from Merlin.Testing.BaseClass import Callback, CIndexer40 class C(CIndexer40): def __setitem__(self, index, value): super(C, self).__setitem__(index, value) def __getitem__(self, index): return super(C, self).__getitem__(index) x = C() Callback.On(x) self.assertEqual(x[0], 12) x[1] = 90 self.assertEqual(x[1], 90)
def test_csindexer(self): from Merlin.Testing.BaseClass import Callback, IIndexer20 class C(IIndexer20): def __init__(self): self.dict = {} def __setitem__(self, index, value): self.dict[index] = value def __getitem__(self, index): return self.dict[index] x = C() #IIndexer20.set_Item(x, 1, 'One') # bug 363289 #IIndexer20.set_Item(x, 2, 'Two') #self.assertEqual(IIndexer20.get_Item(x, 2), 'Two') x.dict = {1: 'One', 2: 'Two'} Callback.On1(x) self.assertEqual(x.dict[1], 'one') self.assertEqual(x.dict[2], 'TWO') x[3] = 'Three' self.assertEqual('TWO', x[2]) class C(IIndexer20): def __init__(self): self.field = "start" def __setitem__(self, index, value): self.field = "-%s %s %s" % (index[0], index[1], value) def __getitem__(self, index): return self.field + "-%s %s" % (index[0], index[1]) # experimental def set_Item(self, index1, index2, value): self.field = "+%s %s %s" % (index1, index2, value) def get_Item(self, index1, index2): return self.field + "+%s %s" % (index1, index2) x = C() #Callback.On2(x) # bug 372940 #self.assertEqual(x.field, "+1 2 start+3 4inside clr") x = C() x[1, 2] = x[3, 4] + "something" self.assertEqual(x.field, "-1 2 start-3 4something")
def test_virtual_override_method(self): from Merlin.Testing.BaseClass import Callback, Class210a, Class210b, Class210c, Class210d class C(Class210b): pass x = C() self.assertEqual(Class210a.m210(x), 210) self.assertEqual(Class210b.m210(x), 211) self.assertEqual(x.m210(), 211) self.assertEqual(C.m210(x), 211) self.assertEqual(Callback.On(x), 210) C.m210 = lambda self: 400 self.assertEqual(Class210a.m210(x), 210) self.assertEqual(Class210b.m210(x), 211) self.assertEqual(x.m210(), 400) self.assertEqual(C.m210(x), 400) self.assertEqual(Callback.On(x), 210) class C(Class210c): def m210(self): return 500 x = C() #self.assertEqual(Class210a.m210(x), 210) # bug 368813 self.assertEqual(Class210c.m210(x), 212) self.assertEqual(x.m210(), 500) self.assertEqual(C.m210(x), 500) self.assertEqual(Callback.On(x), 500) del C.m210 #self.assertEqual(Class210a.m210(x), 210) # bug 368813 self.assertEqual(Class210c.m210(x), 212) self.assertEqual(x.m210(), 212) self.assertEqual(C.m210(x), 212) self.assertEqual(Callback.On(x), 212) class C(Class210d): pass x = C() self.assertEqual(Class210a.m210(x), 210) self.assertEqual(Class210d.m210(x), 210) self.assertEqual(x.m210(), 210) self.assertEqual(C.m210(x), 210) self.assertEqual(Callback.On(x), 210) C.m210 = lambda self: 600 #self.assertEqual(Class210a.m210(x), 210) # bug 368813 self.assertEqual(Class210d.m210(x), 210) self.assertEqual(x.m210(), 600) self.assertEqual(C.m210(x), 600) self.assertEqual(Callback.On(x), 600)