blob: 1ff5045ca0c5c422d908351c5e042a4529bf1142 [file] [log] [blame]
// Copyright 2018 The Emscripten Authors. All rights reserved.
// Emscripten is available under two separate licenses, the MIT license and the
// University of Illinois/NCSA Open Source License. Both these licenses can be
// found in the LICENSE file.
#include <stdio.h>
#include <assert.h>
#include <emscripten.h>
// test file operations after main() exits
#define NAME "file.cpp"
EMSCRIPTEN_KEEPALIVE
extern "C" void finish(void*) {
EM_ASM({
var printed = Module['extraSecretBuffer'].split('Iteration').length - 1;
console.log(printed);
assert(printed == 5, 'should have printed 5 iterations');
});
printf("Test passed.\n");
#ifdef REPORT_RESULT
REPORT_RESULT(0);
#endif
}
EMSCRIPTEN_KEEPALIVE
extern "C" void looper() {
// exiting main should not cause any weirdness with file opening
printf("Iteration\n");
FILE* f = fopen("/dev/stdin", "rb");
if (!f) {
printf("Test failed.\n");
#ifdef REPORT_RESULT
REPORT_RESULT(1);
#endif
}
fclose(f);
}
int main() {
EM_ASM({
(function() {
// exiting main should not cause any weirdness with printing
var realPrint = out;
Module['extraSecretBuffer'] = '';
out = function(x) {
Module['extraSecretBuffer'] += x;
realPrint(x);
};
})();
});
printf("Start\n");
FILE* f = fopen(NAME, "wb");
fclose(f);
printf("Looping...\n");
EM_ASM({
out('js');
var counter = 0;
function looper() {
out('js looping');
Module['_looper']();
counter++;
if (counter < 5) {
out('js queueing');
setTimeout(looper, 1);
} else {
out('js finishing');
setTimeout(Module['_finish'], 1);
}
}
looper();
});
}