test_scripts.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from __future__ import annotations
  2. import gymnasium as gym
  3. import numpy as np
  4. from pytest_mock import MockerFixture
  5. from minigrid.benchmark import benchmark
  6. from minigrid.manual_control import ManualControl
  7. from minigrid.minigrid_env import MiniGridEnv
  8. from minigrid.utils.window import Window
  9. def test_benchmark():
  10. "Test that the benchmark function works for a specific environment"
  11. env_id = "MiniGrid-Empty-16x16-v0"
  12. benchmark(env_id, num_resets=10, num_frames=100)
  13. def test_window():
  14. "Testing the class functions of window.Window. This should locally open a window !"
  15. title = "testing window"
  16. window = Window(title)
  17. img = np.random.rand(100, 100, 3)
  18. window.show_img(img)
  19. caption = "testing caption"
  20. window.set_caption(caption)
  21. window.show(block=False)
  22. window.close()
  23. def test_manual_control(mocker: MockerFixture):
  24. class FakeRandomKeyboardEvent:
  25. active_actions = ["left", "right", "up", " ", "pageup", "pagedown"]
  26. reset_action = "backspace"
  27. close_action = "escape"
  28. def __init__(self, reset: bool = False, close: bool = False) -> None:
  29. if reset:
  30. self.key = self.reset_action
  31. return
  32. if close:
  33. self.key = self.close_action
  34. return
  35. self.key = np.random.choice(self.active_actions)
  36. env_id = "MiniGrid-Empty-16x16-v0"
  37. env: MiniGridEnv = gym.make(env_id)
  38. window = mocker.MagicMock()
  39. window.close = mocker.MagicMock()
  40. window.set_caption = mocker.MagicMock()
  41. manual_control = ManualControl(env, window=window)
  42. for i in range(3): # 3 resets
  43. mission = f"Mission {i}"
  44. env.mission = mission
  45. manual_control.reset()
  46. window.set_caption.assert_called_with(mission)
  47. for j in range(20): # Do 20 steps
  48. manual_control.key_handler(FakeRandomKeyboardEvent())
  49. fake_event = FakeRandomKeyboardEvent(reset=True)
  50. manual_control.key_handler(fake_event)
  51. window.close.assert_not_called()
  52. # Close the environment
  53. fake_event = FakeRandomKeyboardEvent(close=True)
  54. manual_control.key_handler(fake_event)
  55. window.close.assert_called()