diff --git a/test/browser/test_sdl2_image_prepare.c b/test/browser/test_sdl2_image_prepare.c index 045bc8994bc87..065d3ebed3144 100644 --- a/test/browser/test_sdl2_image_prepare.c +++ b/test/browser/test_sdl2_image_prepare.c @@ -40,6 +40,8 @@ void ready(const char *f) { testImage("screenshot.jpg"); // relative path SDL_RenderPresent(renderer); + + EM_ASM(reftestUnblock()); } int main() { @@ -56,6 +58,7 @@ int main() { assert(emscripten_run_preload_plugins("screenshot.jpg", ready, NULL) == 0); + EM_ASM(reftestBlock()); return 0; } diff --git a/test/browser/test_sdl2_image_prepare_data.c b/test/browser/test_sdl2_image_prepare_data.c index e6919f4888956..7664be3f40e7a 100644 --- a/test/browser/test_sdl2_image_prepare_data.c +++ b/test/browser/test_sdl2_image_prepare_data.c @@ -55,6 +55,8 @@ void ready(void *arg, const char *fileName) { free((void*)seenName); // As the API docs say, we are responsible for freeing the 'fake' names we are given SDL_RenderPresent(renderer); + + EM_ASM(reftestUnblock()); } } @@ -75,6 +77,7 @@ int main() { emscripten_run_preload_plugins_data(buffer, SIZE, "jpg", (void*)25, ready, NULL); emscripten_run_preload_plugins_data(buffer, SIZE, "jpg", (void*)33, ready, NULL); // twice to see different filenames + EM_ASM(reftestBlock()); return 0; } diff --git a/test/browser/test_sdl_image_must_prepare.c b/test/browser/test_sdl_image_must_prepare.c index 2105b82752700..f55a0da252e10 100644 --- a/test/browser/test_sdl_image_must_prepare.c +++ b/test/browser/test_sdl_image_must_prepare.c @@ -36,6 +36,8 @@ void ready(const char *f) { testImage("screenshot.jpg", 1); SDL_Flip(screen); + + EM_ASM(reftestUnblock()); } int main() { @@ -48,6 +50,7 @@ int main() { assert(emscripten_run_preload_plugins("screenshot.jpg", ready, NULL) == 0); + EM_ASM(reftestBlock()); return 0; } diff --git a/test/browser/test_sdl_image_prepare.c b/test/browser/test_sdl_image_prepare.c index 26d209a776edf..fd70ed4e6b1d5 100644 --- a/test/browser/test_sdl_image_prepare.c +++ b/test/browser/test_sdl_image_prepare.c @@ -37,6 +37,8 @@ void ready(const char *f) { testImage("screenshot.jpg"); // relative path SDL_Flip(screen); + + EM_ASM(reftestUnblock()); } int main() { @@ -51,6 +53,7 @@ int main() { assert(emscripten_run_preload_plugins("screenshot.jpg", ready, NULL) == 0); + EM_ASM(reftestBlock()); return 0; } diff --git a/test/browser/test_sdl_image_prepare_data.c b/test/browser/test_sdl_image_prepare_data.c index 4caa9e56d1e7a..bde1a21c62486 100644 --- a/test/browser/test_sdl_image_prepare_data.c +++ b/test/browser/test_sdl_image_prepare_data.c @@ -55,6 +55,7 @@ void ready(void *arg, const char *fileName) { free((void*)seenName); // As the API docs say, we are responsible for freeing the 'fake' names we are given SDL_Flip(screen); + EM_ASM(reftestUnblock()); } } @@ -73,6 +74,7 @@ int main() { emscripten_run_preload_plugins_data(buffer, SIZE, "jpg", (void*)25, ready, NULL); emscripten_run_preload_plugins_data(buffer, SIZE, "jpg", (void*)33, ready, NULL); // twice to see different filenames + EM_ASM(reftestBlock()); return 0; } diff --git a/test/common.py b/test/common.py index ae3ad7ede255c..4ff48516b22b8 100644 --- a/test/common.py +++ b/test/common.py @@ -2209,7 +2209,21 @@ def make_reftest(self, expected): # pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB infile outfile shutil.copy(expected, 'expected.png') create_file('reftest.js', ''' + // We have some tests that don't perform rendering during `main` so + // the normal process of performing `doReftest` in `postRun` doesn't + // work. These tests can delay the call to `doReftest` by calling + // `reftestBlock` and then calling `reftestUnblock` once they have + // done their rendering. + var reftestBlocked = false; + function reftestBlock() { + reftestBlocked = true; + } + function reftestUnblock() { + reftestBlocked = false; + doReftest(); + } function doReftest() { + if (reftestBlocked) return; if (doReftest.done) return; doReftest.done = true; console.log('doReftest'); @@ -2330,9 +2344,10 @@ def reftest(self, filename, reference, reference_slack=0, *args, **kwargs): expected = [str(i) for i in range(0, reference_slack + 1)] self.make_reftest(reference) if self.proxied: - print("XXXX") assert 'post_build' not in kwargs kwargs['post_build'] = self.post_manual_reftest + create_file('fakereftest.js', 'var reftestUnblock = () => {}; var reftestBlock = () => {};') + kwargs['args'] += ['--pre-js', 'fakereftest.js'] else: kwargs.setdefault('args', []) kwargs['args'] += ['--pre-js', 'reftest.js', '-sGL_TESTING']