timer.spec.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import {Timer} from './timer';
  2. jest.useFakeTimers();
  3. describe('Replay Timer', () => {
  4. it('works', () => {
  5. const timer = new Timer();
  6. timer.start();
  7. jest.advanceTimersByTime(1008);
  8. timer.stop();
  9. expect(timer.getTime()).toBe(1008);
  10. jest.advanceTimersByTime(1008);
  11. expect(timer.getTime()).toBe(1008);
  12. timer.resume();
  13. jest.advanceTimersByTime(1008);
  14. timer.stop();
  15. expect(timer.getTime()).toBe(2016);
  16. });
  17. it('sets a custom time', () => {
  18. const timer = new Timer();
  19. timer.setTime(5678);
  20. expect(timer.getTime()).toBe(5678);
  21. jest.advanceTimersByTime(1008);
  22. // not started yet
  23. expect(timer.getTime()).toBe(5678);
  24. // starting the timer will wipe out the set time!
  25. timer.start();
  26. expect(timer.getTime()).toBe(0);
  27. jest.advanceTimersByTime(1008);
  28. expect(timer.getTime()).toBe(1008);
  29. // so that the timer doesn't infinitely run
  30. timer.stop();
  31. });
  32. it('handles multiple callbacks', () => {
  33. const timer = new Timer();
  34. const spy1 = jest.fn();
  35. const spy2 = jest.fn();
  36. const spy3 = jest.fn();
  37. const spy4 = jest.fn();
  38. timer.addNotificationAtTime(4000, spy3);
  39. timer.addNotificationAtTime(1000, spy1);
  40. timer.addNotificationAtTime(1000, spy2);
  41. timer.addNotificationAtTime(2000, spy4);
  42. timer.start();
  43. // Syncs with RAF, so each tick of the timer should be +16ms
  44. jest.advanceTimersByTime(1008);
  45. timer.stop();
  46. expect(spy1).toHaveBeenCalledTimes(1);
  47. expect(spy2).toHaveBeenCalledTimes(1);
  48. expect(spy3).toHaveBeenCalledTimes(0);
  49. expect(spy4).toHaveBeenCalledTimes(0);
  50. });
  51. });