/kivy/tests/test_knspace.py

https://github.com/akshayaurora/kivy · Python · 247 lines · 204 code · 37 blank · 6 comment · 0 complexity · f66b7198184d3f2572e0dd8b00690d1a MD5 · raw file

  1. import unittest
  2. '''ACHTUNG: when testing, never re-use widget names, otherwise the tests
  3. may fail as the namespace will remember the names between tests.
  4. '''
  5. class KNSpaceTestCase(unittest.TestCase):
  6. def test_not_exists(self):
  7. from kivy.uix.behaviors.knspace import knspace
  8. self.assertRaises(AttributeError, lambda: knspace.label)
  9. def test_not_exists_property(self):
  10. from kivy.uix.behaviors.knspace import knspace
  11. self.assertRaises(AttributeError, lambda: knspace.label2)
  12. knspace.property('label2')
  13. self.assertIsNone(knspace.label2)
  14. def test_allow_none(self):
  15. from kivy.uix.behaviors.knspace import knspace, KNSpaceBehavior
  16. from kivy.uix.widget import Widget
  17. class MyWidget(KNSpaceBehavior, Widget):
  18. pass
  19. knspace.label3 = 1
  20. knspace.label3 = None
  21. w = MyWidget()
  22. w.knspace = knspace
  23. w.knspace = None
  24. def test_name(self):
  25. from kivy.uix.behaviors.knspace import knspace, KNSpaceBehavior
  26. from kivy.uix.widget import Widget
  27. class MyWidget(KNSpaceBehavior, Widget):
  28. pass
  29. w = MyWidget()
  30. w.knsname = 'label4'
  31. w.knsname = ''
  32. def test_proxy_ref(self):
  33. from kivy.uix.behaviors.knspace import knspace
  34. from kivy.uix.widget import Widget
  35. w = Widget()
  36. knspace.widget1 = w
  37. self.assertIs(w.proxy_ref, knspace.widget1)
  38. knspace.widget1 = 55
  39. self.assertIs(55, knspace.widget1)
  40. def test_constructor(self):
  41. from kivy.uix.behaviors.knspace import knspace, KNSpaceBehavior
  42. from kivy.uix.widget import Widget
  43. class MyWidget(KNSpaceBehavior, Widget):
  44. pass
  45. w = MyWidget(knsname='construct_name')
  46. self.assertEqual(knspace.construct_name, w)
  47. def test_re_assign(self):
  48. from kivy.uix.behaviors.knspace import knspace, KNSpaceBehavior
  49. from kivy.uix.widget import Widget
  50. class MyWidget(KNSpaceBehavior, Widget):
  51. pass
  52. w = MyWidget(knsname='construct_name2')
  53. self.assertEqual(knspace.construct_name2, w)
  54. w2 = MyWidget(knsname='construct_name2')
  55. self.assertEqual(knspace.construct_name2, w2)
  56. def test_simple(self):
  57. from kivy.lang import Builder
  58. from kivy.uix.behaviors.knspace import knspace
  59. w = Builder.load_string('''
  60. <NamedLabel@KNSpaceBehavior+Label>
  61. NamedLabel:
  62. knsname: 'label5'
  63. text: 'Hello'
  64. ''')
  65. self.assertEqual(knspace.label5, w)
  66. self.assertIs(w, knspace.label5.__self__)
  67. self.assertIsNot(w, knspace.label5)
  68. self.assertEqual('Hello', knspace.label5.text)
  69. w.text = 'Goodbye'
  70. self.assertEqual('Goodbye', knspace.label5.text)
  71. def test_simple_multiple_names(self):
  72. from kivy.lang import Builder
  73. from kivy.uix.behaviors.knspace import knspace
  74. w = Builder.load_string('''
  75. <NamedLabel@KNSpaceBehavior+Label>
  76. BoxLayout:
  77. NamedLabel:
  78. knsname: 'label61'
  79. text: 'Hello'
  80. NamedLabel:
  81. knsname: 'label62'
  82. text: 'Goodbye'
  83. ''')
  84. self.assertEqual('Hello', knspace.label61.text)
  85. self.assertEqual('Goodbye', knspace.label62.text)
  86. def test_simple_binding(self):
  87. from kivy.lang import Builder
  88. from kivy.uix.behaviors.knspace import knspace
  89. w = Builder.load_string('''
  90. #:import knspace kivy.uix.behaviors.knspace.knspace
  91. <NamedLabel@KNSpaceBehavior+Label>
  92. BoxLayout:
  93. text: knspace.label7.text if knspace.label7 else ''
  94. NamedLabel:
  95. knsname: 'label7'
  96. text: 'Hello'
  97. ''')
  98. self.assertEqual('Hello', w.text)
  99. knspace.label7.text = 'Goodbye'
  100. self.assertEqual('Goodbye', w.text)
  101. def test_simple_name_change(self):
  102. from kivy.lang import Builder
  103. from kivy.uix.behaviors.knspace import knspace
  104. w = Builder.load_string('''
  105. <NamedLabel@KNSpaceBehavior+Label>
  106. NamedLabel:
  107. knsname: 'label8'
  108. text: 'Hello'
  109. ''')
  110. self.assertEqual(w, knspace.label8)
  111. w.knsname = 'named_label8'
  112. self.assertIsNone(knspace.label8)
  113. self.assertEqual(w, knspace.named_label8)
  114. def test_fork_string(self):
  115. from kivy.lang import Builder
  116. from kivy.uix.behaviors.knspace import knspace
  117. w = Builder.load_string('''
  118. <NamedLabel@KNSpaceBehavior+Label>
  119. BoxLayout:
  120. NamedLabel:
  121. knspace: 'fork'
  122. knsname: 'label9'
  123. text: 'Hello'
  124. NamedLabel:
  125. knspace: 'fork'
  126. knsname: 'label9'
  127. text: 'Goodbye'
  128. ''')
  129. self.assertEqual(w.children[0].knspace.label9.text, 'Goodbye')
  130. self.assertEqual(w.children[1].knspace.label9.text, 'Hello')
  131. def test_fork(self):
  132. from kivy.lang import Builder
  133. from kivy.uix.behaviors.knspace import knspace, KNSpaceBehavior
  134. from kivy.uix.widget import Widget
  135. class NamedWidget(KNSpaceBehavior, Widget):
  136. pass
  137. nw = NamedWidget()
  138. w = Widget()
  139. w2 = Widget()
  140. before = knspace.fork()
  141. knspace.widget2 = w
  142. after = knspace.fork()
  143. self.assertEqual(knspace.widget2, w)
  144. self.assertEqual(before.widget2, w)
  145. self.assertEqual(after.widget2, w)
  146. child = knspace.fork()
  147. child2 = knspace.fork()
  148. grandchild = child.fork()
  149. child.widget3 = w2
  150. self.assertEqual(grandchild.widget3, w2)
  151. self.assertEqual(child.widget3, w2)
  152. # this could actually be none rather than raising, depending
  153. # on when the class was instantiated. So if this fails, change the
  154. # test to assert is none.
  155. self.assertIsNone(knspace.widget3)
  156. grandchild.parent = child2
  157. self.assertIsNone(grandchild.widget3)
  158. def test_fork_binding(self):
  159. from kivy.lang import Builder
  160. from kivy.uix.behaviors.knspace import knspace
  161. w = Builder.load_string('''
  162. <NamedLabel@KNSpaceBehavior+Label>
  163. <MyComplexWidget@NamedLabel>:
  164. knsname: 'root_label'
  165. text: 'Hello'
  166. NamedLabel:
  167. id: child
  168. knsname: 'child_label'
  169. text: self.knspace.root_label.text if self.knspace.root_label else ''
  170. BoxLayout:
  171. MyComplexWidget:
  172. knspace: 'fork'
  173. id: first
  174. MyComplexWidget:
  175. knspace: 'fork'
  176. id: second
  177. ''')
  178. self.assertEqual(w.ids.first.ids.child.text, 'Hello')
  179. self.assertEqual(w.ids.second.ids.child.text, 'Hello')
  180. self.assertEqual(w.ids.first.knspace.child_label.text, 'Hello')
  181. self.assertEqual(w.ids.second.knspace.child_label.text, 'Hello')
  182. w.ids.first.text = 'Goodbye'
  183. self.assertEqual(w.ids.first.ids.child.text, 'Goodbye')
  184. self.assertEqual(w.ids.second.ids.child.text, 'Hello')
  185. self.assertEqual(w.ids.first.knspace.child_label.text, 'Goodbye')
  186. self.assertEqual(w.ids.second.knspace.child_label.text, 'Hello')
  187. first = w.ids.first.knspace
  188. w.ids.first.knspace = w.ids.second.knspace
  189. w.ids.second.knspace = first
  190. self.assertEqual(w.ids.first.ids.child.text, 'Goodbye')
  191. self.assertEqual(w.ids.second.ids.child.text, 'Hello')
  192. self.assertEqual(w.ids.first.knspace.child_label.text, 'Goodbye')
  193. self.assertEqual(w.ids.second.knspace.child_label.text, 'Hello')
  194. w.ids.first.text = 'Goodbye2'
  195. self.assertEqual(w.ids.first.ids.child.text, 'Goodbye2')
  196. self.assertEqual(w.ids.second.ids.child.text, 'Hello')
  197. self.assertEqual(w.ids.first.knspace.child_label.text, 'Goodbye2')
  198. self.assertEqual(w.ids.second.knspace.child_label.text, 'Hello')
  199. w.ids.first.knspace.root_label.text = 'Goodbye3'
  200. self.assertEqual(w.ids.first.ids.child.text, 'Goodbye3')
  201. self.assertEqual(w.ids.second.ids.child.text, 'Hello')
  202. self.assertEqual(w.ids.first.knspace.child_label.text, 'Goodbye3')
  203. self.assertEqual(w.ids.second.knspace.child_label.text, 'Hello')