test_key.mod 1.7 KB

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