test_StatePush.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. from direct.fsm import StatePush
  2. def test_PushesStateChanges():
  3. psc = StatePush.PushesStateChanges(0)
  4. assert psc.getState() == 0
  5. psc.destroy()
  6. def test_ReceivesStateChanges():
  7. rsc = StatePush.ReceivesStateChanges(None)
  8. rsc.destroy()
  9. def test_StateVar():
  10. sv = StatePush.StateVar(0)
  11. assert sv.get() == 0
  12. sv.set(1)
  13. assert sv.get() == 1
  14. sv.destroy()
  15. def test_StateChangeNode():
  16. sv = StatePush.StateVar(0)
  17. assert sv.get() == 0
  18. scn = StatePush.StateChangeNode(sv)
  19. assert scn.getState() == 0
  20. sv.set(1)
  21. assert sv.get() == 1
  22. assert scn.getState() == 1
  23. scn2 = StatePush.StateChangeNode(scn)
  24. assert scn2.getState() == 1
  25. sv.set(2)
  26. assert scn2.getState() == 2
  27. scn3 = StatePush.StateChangeNode(scn)
  28. assert scn3.getState() == 2
  29. sv.set(3)
  30. assert scn2.getState() == 3
  31. assert scn3.getState() == 3
  32. scn3.destroy()
  33. scn2.destroy()
  34. scn.destroy()
  35. sv.destroy()
  36. def test_ReceivesMultipleStateChanges():
  37. rsc = StatePush.ReceivesMultipleStateChanges()
  38. sv = StatePush.StateVar(0)
  39. sv2 = StatePush.StateVar('b')
  40. rsc._subscribeTo(sv, 'a')
  41. rsc._subscribeTo(sv2, 2)
  42. rsc._unsubscribe('a')
  43. rsc.destroy()
  44. def test_FunctionCall_1():
  45. l = []
  46. def handler1(value, l=l):
  47. l.append(value)
  48. assert not l
  49. sv = StatePush.StateVar(0)
  50. fc = StatePush.FunctionCall(handler1, sv)
  51. assert not l
  52. fc.pushCurrentState()
  53. assert l == [0,]
  54. sv.set(1)
  55. assert l == [0,1,]
  56. sv.set(2)
  57. assert l == [0,1,2,]
  58. fc.destroy()
  59. sv.destroy()
  60. def test_FunctionCall_2():
  61. l = []
  62. def handler2(value, kDummy=None, kValue=None, l=l):
  63. l.append((value, kValue))
  64. assert not l
  65. sv = StatePush.StateVar(0)
  66. ksv = StatePush.StateVar('a')
  67. fc = StatePush.FunctionCall(handler2, sv, kValue=ksv)
  68. assert not l
  69. fc.pushCurrentState()
  70. assert l == [(0,'a',),]
  71. sv.set(1)
  72. assert l == [(0,'a'),(1,'a'),]
  73. ksv.set('b')
  74. assert l == [(0,'a'),(1,'a'),(1,'b'),]
  75. fc.destroy()
  76. sv.destroy()
  77. def test_EnterExit():
  78. l = []
  79. def enter(l=l):
  80. l.append(1)
  81. def exit(l=l):
  82. l.append(0)
  83. sv = StatePush.StateVar(0)
  84. ee = StatePush.EnterExit(sv, enter, exit)
  85. sv.set(0)
  86. assert not l
  87. sv.set(1)
  88. assert l == [1,]
  89. sv.set(2)
  90. assert l == [1,]
  91. sv.set(0)
  92. assert l == [1,0,]
  93. sv.set(True)
  94. assert l == [1,0,1,]
  95. sv.set(False)
  96. assert l == [1,0,1,0,]
  97. ee.destroy()
  98. sv.destroy()
  99. def test_Pulse():
  100. l = []
  101. def handler(value, l=l):
  102. l.append(value)
  103. p = StatePush.Pulse()
  104. fc = StatePush.FunctionCall(handler, p)
  105. assert not l
  106. fc.pushCurrentState()
  107. assert l == [False, ]
  108. p.sendPulse()
  109. assert l == [False, True, False, ]
  110. p.sendPulse()
  111. assert l == [False, True, False, True, False, ]
  112. fc.destroy()
  113. p.destroy()
  114. def test_AttrSetter():
  115. from types import SimpleNamespace
  116. o = SimpleNamespace()
  117. svar = StatePush.StateVar(0)
  118. aset = StatePush.AttrSetter(svar, o, 'testAttr')
  119. assert hasattr(o, 'testAttr')
  120. assert o.testAttr == 0
  121. svar.set('red')
  122. assert o.testAttr == 'red'
  123. aset.destroy()
  124. svar.destroy()