diff options
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/runner.py | 28 | ||||
-rw-r--r-- | tests/sdl_key.c | 47 |
2 files changed, 75 insertions, 0 deletions
diff --git a/tests/runner.py b/tests/runner.py index 66934895..7691d41b 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -6381,6 +6381,34 @@ f.close() Popen(['python', EMCC, os.path.join(self.get_dir(), 'sdl_font.c'), '-o', 'page.html']).communicate() self.run_browser('page.html', '', '/report_result?80') + def test_sdl_key(self): + open(os.path.join(self.get_dir(), 'pre.js'), 'w').write(''' + Module.postRun = function() { + function doOne() { + _one(); + setTimeout(doOne, 1000/60); + } + setTimeout(doOne, 1000/60); + } + + function simulateKeyEvent(c) { + var event = document.createEvent("KeyboardEvent"); + event.initKeyEvent("keydown", true, true, window, + 0, 0, 0, 0, + c, c); + dispatchEvent(event); + var event2 = document.createEvent("KeyboardEvent"); + event2.initKeyEvent("keyup", true, true, window, + 0, 0, 0, 0, + c, c); + dispatchEvent(event2); + } + ''') + open(os.path.join(self.get_dir(), 'sdl_key.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_key.c')).read())) + + Popen(['python', EMCC, os.path.join(self.get_dir(), 'sdl_key.c'), '-o', 'page.html', '--pre-js', 'pre.js']).communicate() + self.run_browser('page.html', '', '/report_result?30030') + def test_worker(self): # Test running in a web worker output = Popen(['python', EMCC, path_from_root('tests', 'hello_world_worker.cpp'), '-o', 'worker.js'], stdout=PIPE, stderr=PIPE).communicate() diff --git a/tests/sdl_key.c b/tests/sdl_key.c new file mode 100644 index 00000000..633e975f --- /dev/null +++ b/tests/sdl_key.c @@ -0,0 +1,47 @@ +#include <stdio.h> +#include <SDL/SDL.h> +#include <SDL/SDL_ttf.h> +#include <emscripten.h> + +int result = 1; + +void one() { + SDL_Event event; + while (SDL_PollEvent(&event)) { + switch(event.type) { + case SDL_KEYDOWN: + break; + case SDL_KEYUP: + switch (event.key.keysym.sym) { + case SDLK_RIGHT: printf("right\n"); result *= 2; break; + case SDLK_LEFT: printf("left\n"); result *= 3; break; + case SDLK_DOWN: printf("down\n"); result *= 5; break; + case SDLK_UP: printf("up\n"); result *= 7; break; + case SDLK_SPACE: printf("space\n"); result *= 11; break; + case SDLK_a: printf("a\n"); result *= 13; break; + default: { REPORT_RESULT(); emscripten_run_script("throw 'done'"); } + } + break; + default: /* Report an unhandled event */ + printf("I don't know what this event is!\n"); + } + } +} + +int main(int argc, char **argv) { + SDL_Init(SDL_INIT_VIDEO); + SDL_Surface *screen = SDL_SetVideoMode(600, 450, 32, SDL_HWSURFACE); + + emscripten_run_script("simulateKeyEvent(38)"); + emscripten_run_script("simulateKeyEvent(40)"); + emscripten_run_script("simulateKeyEvent(37)"); + emscripten_run_script("simulateKeyEvent(39)"); + emscripten_run_script("simulateKeyEvent(32)"); + emscripten_run_script("simulateKeyEvent(97)"); + emscripten_run_script("simulateKeyEvent(100)"); // trigger the end + + if (argc == 1337) one(); // keep it alive + + return 0; +} + |