test_key.mod 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. MODULE test_key ;
  2. (*
  3. m2SDL3 test: push synthetic SDL_Event buffers through
  4. SDL_PushEvent and check PollM2Event decodes type 0300H
  5. (key down, keycode at offset 28) and 0100H (quit).
  6. SDL3 events are 128 bytes; pushes return BOOLEAN.
  7. *)
  8. FROM SYSTEM IMPORT ADDRESS, ADR;
  9. FROM SDL3 IMPORT SDL_Init, SDL_Quit, SDLInitEvents;
  10. FROM SDL3Events IMPORT SDL_PushEvent, SDL_PollEvent,
  11. EventKeyDown, EventQuit, EventWindowCloseRequested, EventBufferBytes;
  12. FROM SDL3Utils IMPORT PollM2Event, M2Event, evKey, evQuit;
  13. FROM libc IMPORT printf;
  14. VAR
  15. buf: ARRAY [0..EventBufferBytes-1] OF CHAR;
  16. ev: M2Event;
  17. PROCEDURE ZeroBuf;
  18. VAR j: INTEGER;
  19. BEGIN
  20. FOR j := 0 TO EventBufferBytes - 1 DO buf[j] := 0C END
  21. END ZeroBuf;
  22. PROCEDURE Put32 (off: CARDINAL; v: CARDINAL);
  23. BEGIN
  24. buf[off] := CHR(v MOD 256);
  25. buf[off+1] := CHR(v DIV 256 MOD 256);
  26. buf[off+2] := CHR(v DIV 65536 MOD 256);
  27. buf[off+3] := CHR(v DIV 16777216 MOD 256)
  28. END Put32;
  29. PROCEDURE Fail (msg: ARRAY OF CHAR);
  30. BEGIN
  31. printf("FAIL test_key: %s\n", msg);
  32. HALT(1)
  33. END Fail;
  34. BEGIN
  35. IF NOT SDL_Init(SDLInitEvents) THEN
  36. printf("FAIL test_key: SDL_Init events\n");
  37. HALT(1)
  38. END;
  39. (* key down, keycode "q" = 113 at offset 28. *)
  40. ZeroBuf;
  41. Put32(0, EventKeyDown);
  42. Put32(28, 113);
  43. IF NOT SDL_PushEvent(ADR(buf)) THEN Fail("push key") END;
  44. (* window close request must also decode as quit. *)
  45. ZeroBuf;
  46. Put32(0, EventWindowCloseRequested);
  47. IF NOT SDL_PushEvent(ADR(buf)) THEN Fail("push close") END;
  48. (* quit. *)
  49. ZeroBuf;
  50. Put32(0, EventQuit);
  51. IF NOT SDL_PushEvent(ADR(buf)) THEN Fail("push quit") END;
  52. IF NOT PollM2Event(ev) THEN Fail("poll 1 empty") END;
  53. IF ORD(ev.kind) # ORD(evKey) THEN Fail("ev1 not key") END;
  54. IF NOT ev.pressed THEN Fail("ev1 not pressed") END;
  55. IF ev.sym # 113 THEN Fail("ev1 sym") END;
  56. IF NOT PollM2Event(ev) THEN Fail("poll 2 empty") END;
  57. IF ORD(ev.kind) # ORD(evQuit) THEN Fail("ev2 not quit") END;
  58. IF NOT PollM2Event(ev) THEN Fail("poll 3 empty") END;
  59. IF ORD(ev.kind) # ORD(evQuit) THEN Fail("ev3 not quit") END;
  60. IF PollM2Event(ev) THEN Fail("queue not drained") END;
  61. SDL_Quit;
  62. printf("PASS test_key\n")
  63. END test_key.