PageRenderTime 38ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/examples/libtest/ClassTest.py

http://pyjamas.googlecode.com/
Python | 254 lines | 153 code | 66 blank | 35 comment | 0 complexity | cf99218300411ff22ddc11f4ac771b5f MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0
  1. from UnitTest import UnitTest
  2. class ClassTest(UnitTest):
  3. def __init__(self):
  4. UnitTest.__init__(self)
  5. def getName(self):
  6. return "Class"
  7. # test Class.x
  8. def testClassVars(self):
  9. expected_result1="test"
  10. expected_result2=1
  11. # check class var value without instance
  12. self.assertEquals(ExampleClass.x, expected_result1)
  13. self.assertEquals(ExampleClass.x.upper(), expected_result1.upper())
  14. # verify class var value for instances
  15. y = ExampleClass()
  16. self.assertEquals(y.x, expected_result1)
  17. # modify class var
  18. ExampleClass.x = expected_result2
  19. self.assertEquals(ExampleClass.x, expected_result2)
  20. # verify that class var changed for NEW instances
  21. z = ExampleClass()
  22. self.assertEquals(z.x, expected_result2)
  23. # verify that class var changed for EXISTING instances
  24. self.assertEquals(y.x, expected_result2)
  25. # test Class().x
  26. def testInheritedProperties(self):
  27. expected_result1="test"
  28. expected_result2=1
  29. expected_result3="other"
  30. # check parent property
  31. obj1 = ExampleParentClass()
  32. self.assertEquals(obj1.x, expected_result1)
  33. # check default inherited property
  34. obj1.x = expected_result2
  35. obj2 = ExampleChildClass()
  36. self.assertEquals(obj2.x, expected_result1)
  37. # change inherited property
  38. obj2.x = expected_result3
  39. self.assertEquals(obj2.x, expected_result3)
  40. # verify that parent class properties were NOT changed
  41. self.assertEquals(obj1.x, expected_result2)
  42. # test Class().anObject
  43. def testInheritedPropertyObjects(self):
  44. expected_result1 = "another"
  45. expected_result2 = "other"
  46. # check parent property
  47. obj1 = ExampleParentObject()
  48. self.assertEquals(len(obj1.x), 0)
  49. # check default inherited property
  50. obj1.x.append(expected_result2)
  51. obj2 = ExampleChildObject()
  52. self.assertEquals(len(obj2.x), 1)
  53. # change inherited property
  54. obj2.x.append(expected_result1)
  55. self.assertEquals(obj2.x[1], expected_result1)
  56. # verify that parent class properties were NOT changed
  57. self.assertEquals(obj1.x[0], expected_result2)
  58. # test Class().__init__
  59. def testInheritedConstructors(self):
  60. expected_result1 = "test"
  61. expected_result2 = "parent"
  62. expected_result3 = "grandparent"
  63. expected_result4 = "older"
  64. # verify that parent.__init__ is called if there is no child.__init__()
  65. obj1 = ExampleChildNoConstructor()
  66. self.assertEquals(obj1.x, expected_result1, "ExampleParentConstructor.__init__() was NOT called for ExampleChildNoConstructor")
  67. # verify that parent.__init__ is NOT called (child.__init__() is defined)
  68. obj2 = ExampleChildConstructor()
  69. self.assertNotEqual(obj2.x, expected_result1, "ExampleParentConstructor.__init__() was called for ExampleChildConstructor")
  70. # verify that parent.__init__ is explicitly called
  71. obj3 = ExampleChildExplicitConstructor()
  72. self.assertEquals(obj3.x, expected_result1, "ExampleParentConstructor.__init__() was NOT called for ExampleChildExplicitConstructor")
  73. # verify inherited values
  74. self.assertEquals(obj1.y, expected_result2, "Did not inherit property from parent")
  75. self.assertEquals(obj2.y, expected_result2, "Did not inherit property from parent")
  76. self.assertEquals(obj1.z, expected_result3, "Did not inherit property from grandparent")
  77. self.assertEquals(obj2.z, expected_result3, "Did not inherit property from grandparent")
  78. self.assertNotEqual(obj1.r, expected_result4, "ExampleGrandParentConstructor.__init__() was called")
  79. self.assertNotEqual(obj2.r, expected_result4, "ExampleGrandParentConstructor.__init__() was called")
  80. # check inherited class vars (from parent)
  81. self.assertEqual(ExampleChildConstructor.y, expected_result2, "Did not inherit class var from parent")
  82. self.assertEqual(ExampleChildNoConstructor.y, expected_result2, "Did not inherit class var from parent")
  83. self.assertEqual(ExampleChildExplicitConstructor.y, expected_result2, "Did not inherit class var from parent")
  84. # check inherited class vars (from grandparent)
  85. self.assertEqual(ExampleChildConstructor.z, expected_result3, "Did not inherit class var from grandparent")
  86. self.assertEqual(ExampleChildNoConstructor.z, expected_result3, "Did not inherit class var from grandparent")
  87. self.assertEqual(ExampleChildExplicitConstructor.z, expected_result3, "Did not inherit class var from grandparent")
  88. def testClassMethods(self):
  89. results = ExampleClass.sampleClassMethod("a")
  90. self.assertEqual(results[0], ExampleClass, "Expected first parameter to be the class instance")
  91. self.assertEqual(results[1], "a")
  92. results = ExampleParentClass.sampleClassMethod("a")
  93. self.assertEqual(results[0], ExampleParentClass, "Expected first parameter to be the class instance")
  94. self.assertEqual(results[1], "a")
  95. results = ExampleChildClass.sampleClassMethod("a")
  96. self.assertEqual(results[0], ExampleChildClass, "Expected first parameter to be the class instance")
  97. self.assertEqual(results[1], "a")
  98. results = ExampleClass.sampleClassMethodVarargs("a", "b", "c")
  99. self.assertEqual(results[0], ExampleClass, "Expected first parameter to be the class instance")
  100. self.assertEqual(results[1][0], "a")
  101. self.assertEqual(results[1][1], "b")
  102. self.assertEqual(results[1][2], "c")
  103. results = ExampleClass.sampleClassMethodKwargs(c=9, b=8, a=7)
  104. self.assertEqual(results[0], ExampleClass, "Expected first parameter to be the class instance")
  105. self.assertEqual(results[1], 7)
  106. self.assertEqual(results[2], 8)
  107. self.assertEqual(results[3], 9)
  108. #
  109. # Repeat the test using class instances; the effect should be the same
  110. #
  111. results = ExampleClass().sampleClassMethod("a")
  112. self.assertEqual(results[0], ExampleClass, "Expected first parameter to be the class instance")
  113. self.assertEqual(results[1], "a")
  114. results = ExampleParentClass().sampleClassMethod("a")
  115. self.assertEqual(results[0], ExampleParentClass, "Expected first parameter to be the class instance")
  116. self.assertEqual(results[1], "a")
  117. results = ExampleChildClass().sampleClassMethod("a")
  118. self.assertEqual(results[0], ExampleChildClass, "Expected first parameter to be the class instance")
  119. self.assertEqual(results[1], "a")
  120. results = ExampleClass().sampleClassMethodVarargs("a", "b", "c")
  121. self.assertEqual(results[0], ExampleClass, "Expected first parameter to be the class instance")
  122. self.assertEqual(results[1][0], "a")
  123. self.assertEqual(results[1][1], "b")
  124. self.assertEqual(results[1][2], "c")
  125. # results = ExampleClass().sampleClassMethodKwargs(c=9, b=8, a=7)
  126. # self.assertEqual(results[0], ExampleClass, "Expected first parameter to be the class instance")
  127. # self.assertEqual(results[1], 7)
  128. # self.assertEqual(results[2], 8)
  129. # self.assertEqual(results[3], 9)
  130. def testStaticMethod(self):
  131. self.assertEqual(ExampleClass.sampleStaticMethod("a"), "a", "Expected static method to take the parameter I give as its first parameter")
  132. def testClassDefinitionOrder(self):
  133. x = ExampleSubclassDefinedBeforeSuperclass()
  134. self.assertEqual(x.someMethod(), "abc", "Expected someMethod to return 'abc'")
  135. # testClassVars
  136. class ExampleClass:
  137. x = "test"
  138. @classmethod
  139. def sampleClassMethod(cls, arg):
  140. return cls, arg
  141. @classmethod
  142. def sampleClassMethodVarargs(cls, *args):
  143. return cls, args
  144. @classmethod
  145. def sampleClassMethodKwargs(cls, a=0, b=1, c=2):
  146. return cls, a, b, c
  147. @staticmethod
  148. def sampleStaticMethod(arg):
  149. return arg
  150. # testInheritedProperties
  151. class ExampleParentClass:
  152. x = "test"
  153. @classmethod
  154. def sampleClassMethod(cls, arg):
  155. return cls, arg
  156. class ExampleChildClass(ExampleParentClass):
  157. pass
  158. # testInheritedPropertyObjects
  159. class ExampleParentObject:
  160. x = []
  161. class ExampleChildObject(ExampleParentObject):
  162. pass
  163. # testInheritedConstructors
  164. class ExampleGrandParentConstructor:
  165. z = "grandparent"
  166. def __init__(self):
  167. self.r = "older"
  168. def older(self):
  169. self.w = 2
  170. class ExampleParentConstructor(ExampleGrandParentConstructor):
  171. y = "parent"
  172. def __init__(self):
  173. self.x = "test"
  174. def dosomething(self):
  175. self.m = 1
  176. class ExampleChildConstructor(ExampleParentConstructor):
  177. def __init__(self):
  178. pass
  179. class ExampleChildNoConstructor(ExampleParentConstructor):
  180. pass
  181. class ExampleChildExplicitConstructor(ExampleParentConstructor):
  182. def __init__(self):
  183. ExampleParentConstructor.__init__(self)
  184. class ExampleSubclassDefinedBeforeSuperclass(ExampleSuperclassDefinedAfterSubclass):
  185. pass
  186. class ExampleSuperclassDefinedAfterSubclass:
  187. def someMethod(self):
  188. return 'abc'