test_move.py 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. # coding: utf-8
  2. import time
  3. from freezegun import freeze_time
  4. from synergine2.config import Config
  5. from synergine2_xyz.move import MoveToBehaviour, MoveToMechanism, MoveToIntention, StartMoveEvent, FinishMoveEvent
  6. from synergine2_xyz.simulation import XYZSimulation
  7. from synergine2_xyz.subjects import XYZSubject
  8. from tests import BaseTest
  9. class MySubject(XYZSubject):
  10. pass
  11. class MySimulation(XYZSimulation):
  12. pass
  13. class TestMove(BaseTest):
  14. def test_behaviour_cycle(self):
  15. config = Config({
  16. 'game': {
  17. 'move': {
  18. 'walk_ref_time': 2,
  19. }
  20. }
  21. })
  22. simulation = MySimulation(config)
  23. subject = MySubject(config, simulation)
  24. behaviour = MoveToBehaviour(config, simulation, subject)
  25. with freeze_time("2000-01-01 00:00:00"):
  26. move_intention = MoveToIntention((0, 3), time.time())
  27. assert move_intention.path_progression == -1
  28. assert move_intention.just_reach is False
  29. assert move_intention.initial is True
  30. subject.intentions.set(move_intention)
  31. move_data = {
  32. 'new_path': [(0, 1), (0, 2)],
  33. 'last_intention_time': time.time(),
  34. 'just_reach': False,
  35. 'initial': True,
  36. }
  37. data = {
  38. MoveToMechanism: move_data,
  39. }
  40. run_data = behaviour.run(data)
  41. assert move_data == run_data
  42. events = behaviour.action(run_data)
  43. assert events
  44. assert 1 == len(events)
  45. assert isinstance(events[0], StartMoveEvent)
  46. assert move_intention.path_progression == -1
  47. assert move_intention.just_reach is False
  48. assert move_intention.initial is False
  49. # Update data like mechanism do it
  50. move_data['last_intention_time'] = move_intention.last_intention_time
  51. move_data['just_reach'] = move_intention.just_reach
  52. move_data['initial'] = move_intention.initial
  53. # Only one second, no reach
  54. with freeze_time("2000-01-01 00:00:01"):
  55. run_data = behaviour.run(data)
  56. assert run_data is False
  57. # Two second, step reach
  58. with freeze_time("2000-01-01 00:00:02"):
  59. run_data = behaviour.run(data)
  60. assert {
  61. 'new_path': [(0, 1), (0, 2)],
  62. 'initial': False,
  63. 'just_reach': False,
  64. 'last_intention_time': 946684800.0,
  65. 'reach_next': True,
  66. } == run_data
  67. events = behaviour.action(run_data)
  68. assert events
  69. assert 1 == len(events)
  70. assert isinstance(events[0], FinishMoveEvent)
  71. # Update data like mechanism do it
  72. move_data['last_intention_time'] = move_intention.last_intention_time
  73. move_data['just_reach'] = move_intention.just_reach
  74. move_data['initial'] = move_intention.initial
  75. # Three seconds, start a new move
  76. with freeze_time("2000-01-01 00:00:03"):
  77. run_data = behaviour.run(data)
  78. assert {
  79. 'new_path': [(0, 1), (0, 2)],
  80. 'initial': False,
  81. 'just_reach': True,
  82. 'last_intention_time': 946684802.0,
  83. 'reach_next': False,
  84. } == run_data
  85. events = behaviour.action(run_data)
  86. assert events
  87. assert 1 == len(events)
  88. assert isinstance(events[0], StartMoveEvent)
  89. # Update data like mechanism do it
  90. move_data['last_intention_time'] = move_intention.last_intention_time
  91. move_data['just_reach'] = move_intention.just_reach
  92. move_data['initial'] = move_intention.initial
  93. # Four seconds, start a new move
  94. with freeze_time("2000-01-01 00:00:04"):
  95. run_data = behaviour.run(data)
  96. assert {
  97. 'new_path': [(0, 1), (0, 2)],
  98. 'initial': False,
  99. 'just_reach': False,
  100. 'last_intention_time': 946684802.0,
  101. 'reach_next': True,
  102. } == run_data
  103. events = behaviour.action(run_data)
  104. assert events
  105. assert 1 == len(events)
  106. assert isinstance(events[0], FinishMoveEvent)