| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- MODULE test_key ;
- (*
- m2SDL3 test: push synthetic SDL_Event buffers through
- SDL_PushEvent and check PollM2Event decodes type 0300H
- (key down, keycode at offset 28) and 0100H (quit).
- SDL3 events are 128 bytes; pushes return BOOLEAN.
- *)
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM SDL3 IMPORT SDL_Init, SDL_Quit, SDLInitEvents;
- FROM SDL3Events IMPORT SDL_PushEvent, SDL_PollEvent,
- EventKeyDown, EventQuit, EventWindowCloseRequested, EventBufferBytes;
- FROM SDL3Utils IMPORT PollM2Event, M2Event, evKey, evQuit;
- FROM libc IMPORT printf;
- VAR
- buf: ARRAY [0..EventBufferBytes-1] OF CHAR;
- ev: M2Event;
- PROCEDURE ZeroBuf;
- VAR j: INTEGER;
- BEGIN
- FOR j := 0 TO EventBufferBytes - 1 DO buf[j] := 0C END
- END ZeroBuf;
- PROCEDURE Put32 (off: CARDINAL; v: CARDINAL);
- BEGIN
- buf[off] := CHR(v MOD 256);
- buf[off+1] := CHR(v DIV 256 MOD 256);
- buf[off+2] := CHR(v DIV 65536 MOD 256);
- buf[off+3] := CHR(v DIV 16777216 MOD 256)
- END Put32;
- PROCEDURE Fail (msg: ARRAY OF CHAR);
- BEGIN
- printf("FAIL test_key: %s\n", msg);
- HALT(1)
- END Fail;
- BEGIN
- IF NOT SDL_Init(SDLInitEvents) THEN
- printf("FAIL test_key: SDL_Init events\n");
- HALT(1)
- END;
- (* key down, keycode "q" = 113 at offset 28. *)
- ZeroBuf;
- Put32(0, EventKeyDown);
- Put32(28, 113);
- IF NOT SDL_PushEvent(ADR(buf)) THEN Fail("push key") END;
- (* window close request must also decode as quit. *)
- ZeroBuf;
- Put32(0, EventWindowCloseRequested);
- IF NOT SDL_PushEvent(ADR(buf)) THEN Fail("push close") END;
- (* quit. *)
- ZeroBuf;
- Put32(0, EventQuit);
- IF NOT SDL_PushEvent(ADR(buf)) THEN Fail("push quit") END;
- IF NOT PollM2Event(ev) THEN Fail("poll 1 empty") END;
- IF ORD(ev.kind) # ORD(evKey) THEN Fail("ev1 not key") END;
- IF NOT ev.pressed THEN Fail("ev1 not pressed") END;
- IF ev.sym # 113 THEN Fail("ev1 sym") END;
- IF NOT PollM2Event(ev) THEN Fail("poll 2 empty") END;
- IF ORD(ev.kind) # ORD(evQuit) THEN Fail("ev2 not quit") END;
- IF NOT PollM2Event(ev) THEN Fail("poll 3 empty") END;
- IF ORD(ev.kind) # ORD(evQuit) THEN Fail("ev3 not quit") END;
- IF PollM2Event(ev) THEN Fail("queue not drained") END;
- SDL_Quit;
- printf("PASS test_key\n")
- END test_key.
|