blob: 745a3f120096532be44a7df0c326c333db522104 [file]
#include <assert.h>
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <emscripten/emscripten.h>
#include <emscripten/threading.h>
EMSCRIPTEN_KEEPALIVE void FinishTest(int result) {
printf("Test finished, result: %d\n", result);
assert(result == 1);
exit(0);
}
void TestAsyncRunScript() {
// 5. Test emscripten_async_run_script() runs in a pthread.
#if __EMSCRIPTEN_PTHREADS__
emscripten_async_run_script("Module['_FinishTest'](ENVIRONMENT_IS_PTHREAD && (typeof ENVIRONMENT_IS_WORKER !== 'undefined' && ENVIRONMENT_IS_WORKER));", 1);
#else
emscripten_async_run_script("Module['_FinishTest'](!(typeof ENVIRONMENT_IS_WORKER !== 'undefined' && ENVIRONMENT_IS_WORKER));", 1);
#endif
}
void AsyncScriptLoaded() {
printf("async script load succeeded!\n");
TestAsyncRunScript();
}
void AsyncScriptFailed() {
printf("async script load failed!\n");
TestAsyncRunScript();
}
int main() {
// 1. Test that emscripten_run_script() works in a pthread, and it gets
// executed in the web worker and not on the main thread.
#if __EMSCRIPTEN_PTHREADS__
emscripten_run_script("Module['ranScript'] = ENVIRONMENT_IS_PTHREAD && (typeof ENVIRONMENT_IS_WORKER !== 'undefined' && ENVIRONMENT_IS_WORKER);");
#else
emscripten_run_script("Module['ranScript'] = true;");
#endif
// 2. Test that emscripten_run_script_int() works in a pthread and it gets
// executed in the web worker and not on the main thread.
#if __EMSCRIPTEN_PTHREADS__
int result = emscripten_run_script_int("Module['ranScript'] && ENVIRONMENT_IS_PTHREAD && (typeof ENVIRONMENT_IS_WORKER !== 'undefined' && ENVIRONMENT_IS_WORKER);");
#else
int result = emscripten_run_script_int("Module['ranScript'];");
#endif
printf("Module['ranScript'] = %d\n", result);
assert(result);
// 3. Test emscripten_run_script_string() runs in a pthread.
#if __EMSCRIPTEN_PTHREADS__
char *data = emscripten_run_script_string("ENVIRONMENT_IS_PTHREAD && (typeof ENVIRONMENT_IS_WORKER !== 'undefined' && ENVIRONMENT_IS_WORKER) ? 'in pthread' : 'not in pthread';");
printf("%s\n", data);
assert(!strcmp(data, "in pthread"));
#else
char *data = emscripten_run_script_string("(typeof ENVIRONMENT_IS_WORKER !== 'undefined' && ENVIRONMENT_IS_WORKER) ? 'in worker' : 'not in worker';");
printf("%s\n", data);
assert(!strcmp(data, "not in worker"));
#endif
// 4. Test emscripten_async_load_script() runs in a pthread.
emscripten_async_load_script("foo.js", AsyncScriptLoaded, AsyncScriptFailed);
// This return code should be ignored since emscripten_async_load_script
// keeps the runtime alive until FinishTest is called.
return 99;
}