diff options
35 files changed, 428 insertions, 158 deletions
diff --git a/src/library.js b/src/library.js index 7cfe93bb..2c60c8ba 100644 --- a/src/library.js +++ b/src/library.js @@ -2266,7 +2266,11 @@ LibraryManager.library = { // void clearerr(FILE *stream); // http://pubs.opengroup.org/onlinepubs/000095399/functions/clearerr.html stream = FS.getStream(stream); - if (stream) stream.error = false; + if (!stream) { + return; + } + stream.eof = false; + stream.error = false; }, fclose__deps: ['close', 'fsync'], fclose: function(stream) { @@ -2327,7 +2331,6 @@ LibraryManager.library = { if (streamObj.eof || streamObj.error) return -1; var ret = _fread(_fgetc.ret, 1, 1, stream); if (ret == 0) { - streamObj.eof = true; return -1; } else if (ret == -1) { streamObj.error = true; @@ -5159,6 +5162,37 @@ LibraryManager.library = { }, // ========================================================================== + // termios.h + // ========================================================================== + tcgetattr: function(fildes, termios_p) { + // http://pubs.opengroup.org/onlinepubs/009695399/functions/tcgetattr.html + var stream = FS.getStream(fildes); + if (!stream) { + ___setErrNo(ERRNO_CODES.EBADF); + return -1; + } + if (!stream.tty) { + ___setErrNo(ERRNO_CODES.ENOTTY); + return -1; + } + return 0; + }, + + tcsetattr: function(fildes, optional_actions, termios_p) { + // http://pubs.opengroup.org/onlinepubs/7908799/xsh/tcsetattr.html + var stream = FS.getStream(fildes); + if (!stream) { + ___setErrNo(ERRNO_CODES.EBADF); + return -1; + } + if (!stream.tty) { + ___setErrNo(ERRNO_CODES.ENOTTY); + return -1; + } + return 0; + }, + + // ========================================================================== // time.h // ========================================================================== diff --git a/src/library_browser.js b/src/library_browser.js index 591a3c11..235ccc78 100644 --- a/src/library_browser.js +++ b/src/library_browser.js @@ -830,15 +830,21 @@ mergeInto(LibraryManager.library, { }, emscripten_get_now: function() { - if (ENVIRONMENT_IS_NODE) { - var t = process['hrtime'](); - return t[0] * 1e3 + t[1] / 1e6; - } - else if (ENVIRONMENT_IS_WEB && window['performance'] && window['performance']['now']) { - return window['performance']['now'](); - } else { - return Date.now(); + if (!_emscripten_get_now.actual) { + if (ENVIRONMENT_IS_NODE) { + _emscripten_get_now.actual = function() { + var t = process['hrtime'](); + return t[0] * 1e3 + t[1] / 1e6; + } + } else if (typeof dateNow !== 'undefined') { + _emscripten_get_now.actual = dateNow; + } else if (ENVIRONMENT_IS_WEB && window['performance'] && window['performance']['now']) { + _emscripten_get_now.actual = function() { return window['performance']['now'](); }; + } else { + _emscripten_get_now.actual = Date.now; + } } + return _emscripten_get_now.actual(); }, emscripten_create_worker: function(url) { diff --git a/src/library_fs.js b/src/library_fs.js index 77066059..5573dc27 100644 --- a/src/library_fs.js +++ b/src/library_fs.js @@ -516,7 +516,7 @@ mergeInto(LibraryManager.library, { return FS.create(path, mode); }, createDataFile: function(parent, name, data, canRead, canWrite, canOwn) { - var path = PATH.join(typeof parent === 'string' ? parent : FS.getPath(parent), name); + var path = name ? PATH.join(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent; var mode = FS.getMode(canRead, canWrite); var node = FS.create(path, mode); if (data) { @@ -776,7 +776,7 @@ mergeInto(LibraryManager.library, { Browser.init(); // TODO we should allow people to just pass in a complete filename instead // of parent and name being that we just join them anyways - var fullname = PATH.resolve(PATH.join(parent, name)); + var fullname = name ? PATH.resolve(PATH.join(parent, name)) : parent; function processData(byteArray) { function finish(byteArray) { if (!dontCreateFile) { diff --git a/src/library_tty.js b/src/library_tty.js index 8f44cd07..53239989 100644 --- a/src/library_tty.js +++ b/src/library_tty.js @@ -1,17 +1,35 @@ mergeInto(LibraryManager.library, { $TTY__deps: ['$FS'], + $TTY__postset: '__ATINIT__.unshift({ func: function() { TTY.init() } });' + + '__ATEXIT__.push({ func: function() { TTY.shutdown() } });' + + 'TTY.utf8 = new Runtime.UTF8Processor();', $TTY: { ttys: [], + init: function () { + if (ENVIRONMENT_IS_NODE) { + // currently, FS.init does not distinguish if process.stdin is a file or TTY + // device, it always assumes it's a TTY device. because of this, we're forcing + // process.stdin to UTF8 encoding to at least make stdin reading compatible + // with text files until FS.init can be refactored. + process['stdin']['setEncoding']('utf8'); + } + }, + shutdown: function() { + if (ENVIRONMENT_IS_NODE) { + // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + process['stdin']['pause'](); + } + }, register: function(dev, ops) { TTY.ttys[dev] = { input: [], output: [], ops: ops }; FS.registerDevice(dev, TTY.stream_ops); }, stream_ops: { open: function(stream) { - // this wouldn't be required if the library wasn't eval'd at first... - if (!TTY.utf8) { - TTY.utf8 = new Runtime.UTF8Processor(); - } var tty = TTY.ttys[stream.node.rdev]; if (!tty) { throw new FS.ErrnoError(ERRNO_CODES.ENODEV); @@ -66,17 +84,22 @@ mergeInto(LibraryManager.library, { return i; } }, - // NOTE: This is weird to support stdout and stderr - // overrides in addition to print and printErr overrides. default_tty_ops: { + // get_char has 3 particular return values: + // a.) the next character represented as an integer + // b.) undefined to signal that no data is currently available + // c.) null to signal an EOF get_char: function(tty) { if (!tty.input.length) { var result = null; if (ENVIRONMENT_IS_NODE) { - if (process.stdin.destroyed) { - return undefined; + result = process['stdin']['read'](); + if (!result) { + if (process['stdin']['_readableState'] && process['stdin']['_readableState']['ended']) { + return null; // EOF + } + return undefined; // no data available } - result = process.stdin.read(); } else if (typeof window != 'undefined' && typeof window.prompt == 'function') { // Browser. diff --git a/src/settings.js b/src/settings.js index 258d4960..b40330b8 100644 --- a/src/settings.js +++ b/src/settings.js @@ -876,9 +876,9 @@ var C_DEFINES = { 'SOCK_DGRAM': '2', 'SOCK_STREAM': '1', 'STDC_HEADERS': '1', - 'STDERR_FILENO': '2', - 'STDIN_FILENO': '0', - 'STDOUT_FILENO': '1', + 'STDERR_FILENO': '3', + 'STDIN_FILENO': '1', + 'STDOUT_FILENO': '2', 'S_BLKSIZE': '1024', 'S_ENFMT': '0002000', 'S_IEXEC': '0000100', diff --git a/tests/emscripten_get_now.cpp b/tests/emscripten_get_now.cpp new file mode 100644 index 00000000..17aa7d32 --- /dev/null +++ b/tests/emscripten_get_now.cpp @@ -0,0 +1,46 @@ +#include <stdio.h> +#include "emscripten.h" + +#ifndef REPORT_RESULT +// To be able to run this test outside the browser harness in node.js/spidermonkey: +#define REPORT_RESULT int dummy +#endif + +int result = 0; + +int main() { + // This code tests three things: + // a) Calling emscripten_get_now(), time actually proceeds. + // b) Values returned by emscripten_get_now() are strictly nondecreasing. + // c) emscripten_get_now() is able to return sub-millisecond precision timer values. + bool detected_good_timer_precision = false; + float smallest_delta = 0.f; + for(int x = 0; x < 1000; ++x) { // Have several attempts to find a good small delta, i.e. give time to JS engine to warm up the code and so on. + float t = emscripten_get_now(); + float t2 = emscripten_get_now(); + for(int i = 0; i < 100 && t == t2; ++i) { + t2 = emscripten_get_now(); + } + + if (t2 < t && t2 - t < 1000.f) { // Timer must be monotonous. + printf("Timer is not monotonous!\\n"); + smallest_delta = t2 - t; + break; + } + if (t2 > t && t2 - t < 0.7f) { // Must pass less than a millisecond between two calls. + detected_good_timer_precision = true; + smallest_delta = t2 - t; + break; + } + } + + if (detected_good_timer_precision) { + printf("Timer resolution is good. (%f msecs)\\n", smallest_delta); + result = 1; + } else { + printf("Error: Bad timer precision: Smallest timer delta: %f msecs\\n", smallest_delta); + result = 0; + } + REPORT_RESULT(); + return 0; +} diff --git a/tests/module/test_stdin.c b/tests/module/test_stdin.c new file mode 100644 index 00000000..4838d466 --- /dev/null +++ b/tests/module/test_stdin.c @@ -0,0 +1,57 @@ +#include <errno.h> +#include <fcntl.h> +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> +#if EMSCRIPTEN +#include <emscripten.h> +#endif + +int line = 0; + +void main_loop(void *arg) +{ + char str[10] = {0}; + int ret; + + errno = 0; + while (errno != EAGAIN) { + if (line == 0) { + ret = fgetc(stdin); + if (ret != EOF) putc(ret, stdout); + if (ret == '\n') line++; + } else if (line > 0) { + ret = scanf("%10s", str); + if (ret > 0) puts(str); + } + + if (ferror(stdin) && errno != EAGAIN) { + puts("error"); + exit(EXIT_FAILURE); + } + + if (feof(stdin)) { + puts("eof"); + exit(EXIT_SUCCESS); + } + + clearerr(stdin); + } +} + +int main(int argc, char const *argv[]) +{ + fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); + + // SM shell doesn't implement an event loop and therefor doesn't support + // emscripten_set_main_loop. However, its stdin reads are sync so it + // should exit out after calling main_loop once. + main_loop(NULL); + +#if EMSCRIPTEN + emscripten_set_main_loop(main_loop, 60, 0); +#else + while (1) main_loop(NULL); sleep(1); +#endif + return 0; +}
\ No newline at end of file diff --git a/tests/msvc10/emscripten_api_browser.vcxproj b/tests/msvc10/emscripten_api_browser.vcxproj index 9f4a05fd..f1290f02 100644 --- a/tests/msvc10/emscripten_api_browser.vcxproj +++ b/tests/msvc10/emscripten_api_browser.vcxproj @@ -80,6 +80,18 @@ <OptimizeReferences>true</OptimizeReferences> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + <DisableWarnings>vexing-parse</DisableWarnings> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + <DisableWarnings>vexing-parse</DisableWarnings> + </ClCompile> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="..\emscripten_api_browser.cpp" /> </ItemGroup> diff --git a/tests/msvc10/glbook_10_MultiTexture.vcxproj b/tests/msvc10/glbook_10_MultiTexture.vcxproj index b59fda0a..86167eb3 100644 --- a/tests/msvc10/glbook_10_MultiTexture.vcxproj +++ b/tests/msvc10/glbook_10_MultiTexture.vcxproj @@ -82,12 +82,14 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_11_Multisample.vcxproj b/tests/msvc10/glbook_11_Multisample.vcxproj index ae5170be..3b7becb1 100644 --- a/tests/msvc10/glbook_11_Multisample.vcxproj +++ b/tests/msvc10/glbook_11_Multisample.vcxproj @@ -82,12 +82,14 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_11_Stencil_Test.vcxproj b/tests/msvc10/glbook_11_Stencil_Test.vcxproj index d72d7fa6..654f4a8e 100644 --- a/tests/msvc10/glbook_11_Stencil_Test.vcxproj +++ b/tests/msvc10/glbook_11_Stencil_Test.vcxproj @@ -82,12 +82,14 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_13_ParticleSystem.vcxproj b/tests/msvc10/glbook_13_ParticleSystem.vcxproj index 458d76fa..b8648f93 100644 --- a/tests/msvc10/glbook_13_ParticleSystem.vcxproj +++ b/tests/msvc10/glbook_13_ParticleSystem.vcxproj @@ -82,12 +82,14 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_15_Hello_Triangle_KD.vcxproj b/tests/msvc10/glbook_15_Hello_Triangle_KD.vcxproj index 654164b3..5d3026a2 100644 --- a/tests/msvc10/glbook_15_Hello_Triangle_KD.vcxproj +++ b/tests/msvc10/glbook_15_Hello_Triangle_KD.vcxproj @@ -82,12 +82,14 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_2_Hello_Triangle.vcxproj b/tests/msvc10/glbook_2_Hello_Triangle.vcxproj index b992294d..7a26f304 100644 --- a/tests/msvc10/glbook_2_Hello_Triangle.vcxproj +++ b/tests/msvc10/glbook_2_Hello_Triangle.vcxproj @@ -92,12 +92,14 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> diff --git a/tests/msvc10/glbook_8_Simple_VertexShader.vcxproj b/tests/msvc10/glbook_8_Simple_VertexShader.vcxproj index fb01c1da..37b07d9d 100644 --- a/tests/msvc10/glbook_8_Simple_VertexShader.vcxproj +++ b/tests/msvc10/glbook_8_Simple_VertexShader.vcxproj @@ -82,12 +82,14 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_9_MipMap2D.vcxproj b/tests/msvc10/glbook_9_MipMap2D.vcxproj index 1d747d1d..2cb190b6 100644 --- a/tests/msvc10/glbook_9_MipMap2D.vcxproj +++ b/tests/msvc10/glbook_9_MipMap2D.vcxproj @@ -82,12 +82,14 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_9_Simple_Texture2D.vcxproj b/tests/msvc10/glbook_9_Simple_Texture2D.vcxproj index d9232e5d..fe44f617 100644 --- a/tests/msvc10/glbook_9_Simple_Texture2D.vcxproj +++ b/tests/msvc10/glbook_9_Simple_Texture2D.vcxproj @@ -82,12 +82,14 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_9_Simple_TextureCubemap.vcxproj b/tests/msvc10/glbook_9_Simple_TextureCubemap.vcxproj index c5c6ee1b..d84142a9 100644 --- a/tests/msvc10/glbook_9_Simple_TextureCubemap.vcxproj +++ b/tests/msvc10/glbook_9_Simple_TextureCubemap.vcxproj @@ -82,12 +82,14 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_9_TextureWrap.vcxproj b/tests/msvc10/glbook_9_TextureWrap.vcxproj index 6cfbb0c8..7f710fba 100644 --- a/tests/msvc10/glbook_9_TextureWrap.vcxproj +++ b/tests/msvc10/glbook_9_TextureWrap.vcxproj @@ -82,12 +82,14 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign;int-conversion</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> + <DisableWarnings>pointer-sign;int-conversion</DisableWarnings> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/new.vcxproj b/tests/msvc10/new.vcxproj deleted file mode 100644 index 11ad95ae..00000000 --- a/tests/msvc10/new.vcxproj +++ /dev/null @@ -1,89 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Emscripten"> - <Configuration>Debug</Configuration> - <Platform>Emscripten</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Emscripten"> - <Configuration>Release</Configuration> - <Platform>Emscripten</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{5190107D-91B3-4EF8-82CB-08381DD19ABB}</ProjectGuid> - <RootNamespace>new</RootNamespace> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> - <PlatformToolset>emcc</PlatformToolset> - <ConfigurationType>HTMLPage</ConfigurationType> - </PropertyGroup> - <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> - <PlatformToolset>emcc</PlatformToolset> - <ConfigurationType>HTMLPage</ConfigurationType> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> - <IntDir>$(Platform)\$(ProjectName)_$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> - <IntDir>$(Platform)\$(ProjectName)_$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\new.cpp" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/tests/msvc10/sdl_audio.vcxproj b/tests/msvc10/sdl_audio.vcxproj index 80a48d90..7f53853b 100644 --- a/tests/msvc10/sdl_audio.vcxproj +++ b/tests/msvc10/sdl_audio.vcxproj @@ -80,6 +80,22 @@ <OptimizeReferences>true</OptimizeReferences> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + </ClCompile> + <Link> + <AdditionalOptions>--preload-file ../sounds/alarmvictory_1.ogg@/sound.ogg --preload-file ../sounds/alarmcreatemiltaryfoot_1.wav@/sound2.wav --preload-file ../sounds/noise.ogg@/ --embed-file ../sounds/the_entertainer.ogg@/ --preload-file ../runner.py@/bad.ogg %(AdditionalOptions)</AdditionalOptions> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + </ClCompile> + <Link> + <AdditionalOptions>--preload-file ../sounds/alarmvictory_1.ogg@/sound.ogg --preload-file ../sounds/alarmcreatemiltaryfoot_1.wav@/sound2.wav --preload-file ../sounds/noise.ogg@/ --embed-file ../sounds/the_entertainer.ogg@/ --preload-file ../runner.py@/bad.ogg %(AdditionalOptions)</AdditionalOptions> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="..\sdl_audio.c" /> </ItemGroup> diff --git a/tests/msvc10/sdl_canvas.vcxproj b/tests/msvc10/sdl_canvas.vcxproj index 42215b38..91fd1dd5 100644 --- a/tests/msvc10/sdl_canvas.vcxproj +++ b/tests/msvc10/sdl_canvas.vcxproj @@ -83,6 +83,16 @@ <OptimizeReferences>true</OptimizeReferences> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + </ClCompile> + </ItemDefinitionGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> diff --git a/tests/msvc10/sdl_gl_read.vcxproj b/tests/msvc10/sdl_gl_read.vcxproj index de6233c1..8ba31677 100644 --- a/tests/msvc10/sdl_gl_read.vcxproj +++ b/tests/msvc10/sdl_gl_read.vcxproj @@ -80,6 +80,18 @@ <OptimizeReferences>true</OptimizeReferences> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + <DisableWarnings>pointer-sign</DisableWarnings> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + <DisableWarnings>pointer-sign</DisableWarnings> + </ClCompile> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="..\sdl_gl_read.c" /> </ItemGroup> diff --git a/tests/msvc10/sdl_image.vcxproj b/tests/msvc10/sdl_image.vcxproj index 631ea5cd..543d6976 100644 --- a/tests/msvc10/sdl_image.vcxproj +++ b/tests/msvc10/sdl_image.vcxproj @@ -80,6 +80,23 @@ <OptimizeReferences>true</OptimizeReferences> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy;SCREENSHOT_DIRNAME=\"/assets\";SCREENSHOT_BASENAME=\"screenshot.jpg\"</PreprocessorDefinitions> + <EchoCommandLines>true</EchoCommandLines> + </ClCompile> + <Link> + <AdditionalOptions>--preload-file ../screenshot.jpg@/assets/ %(AdditionalOptions)</AdditionalOptions> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy;SCREENSHOT_DIRNAME=\"/assets\";SCREENSHOT_BASENAME=\"screenshot.jpg\"</PreprocessorDefinitions> + </ClCompile> + <Link> + <AdditionalOptions>--preload-file ../screenshot.jpg@/assets/ %(AdditionalOptions)</AdditionalOptions> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="..\sdl_image.c" /> </ItemGroup> diff --git a/tests/msvc10/sdl_key.vcxproj b/tests/msvc10/sdl_key.vcxproj index 3840256a..cb7b888e 100644 --- a/tests/msvc10/sdl_key.vcxproj +++ b/tests/msvc10/sdl_key.vcxproj @@ -80,6 +80,16 @@ <OptimizeReferences>true</OptimizeReferences> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + </ClCompile> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="..\sdl_key.c" /> </ItemGroup> diff --git a/tests/msvc10/sdl_mouse.vcxproj b/tests/msvc10/sdl_mouse.vcxproj index 7d582eb3..f3336a29 100644 --- a/tests/msvc10/sdl_mouse.vcxproj +++ b/tests/msvc10/sdl_mouse.vcxproj @@ -80,6 +80,16 @@ <OptimizeReferences>true</OptimizeReferences> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + </ClCompile> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="..\sdl_mouse.c" /> </ItemGroup> diff --git a/tests/msvc10/sdl_ogl.vcxproj b/tests/msvc10/sdl_ogl.vcxproj index b96eac4d..fc8bdb4d 100644 --- a/tests/msvc10/sdl_ogl.vcxproj +++ b/tests/msvc10/sdl_ogl.vcxproj @@ -80,6 +80,22 @@ <OptimizeReferences>true</OptimizeReferences> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + </ClCompile> + <Link> + <AdditionalOptions>-s LEGACY_GL_EMULATION=1 --preload-file ../screenshot.png@/ %(AdditionalOptions)</AdditionalOptions> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> + <ClCompile> + <PreprocessorDefinitions>REPORT_RESULT=int dummy</PreprocessorDefinitions> + </ClCompile> + <Link> + <AdditionalOptions>-s LEGACY_GL_EMULATION=1 %(AdditionalOptions)</AdditionalOptions> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="..\sdl_ogl.c" /> </ItemGroup> diff --git a/tests/msvc10/tests_msvc10.sln b/tests/msvc10/tests_msvc10.sln index 67333016..e606469b 100644 --- a/tests/msvc10/tests_msvc10.sln +++ b/tests/msvc10/tests_msvc10.sln @@ -53,8 +53,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "files", "files.vcxproj", "{ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hashtest", "hashtest.vcxproj", "{61D7F11F-25EE-4C2C-9D73-8601F68B055E}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "new", "new.vcxproj", "{5190107D-91B3-4EF8-82CB-08381DD19ABB}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdl_audio", "sdl_audio.vcxproj", "{F28A1DE1-5949-4AF5-8901-A37871C2514E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdl_canvas", "sdl_canvas.vcxproj", "{CE360D01-4362-4FE4-A77E-8EF6E3F623CF}" @@ -196,10 +194,6 @@ Global {61D7F11F-25EE-4C2C-9D73-8601F68B055E}.Debug|Emscripten.Build.0 = Debug|Emscripten {61D7F11F-25EE-4C2C-9D73-8601F68B055E}.Release|Emscripten.ActiveCfg = Release|Emscripten {61D7F11F-25EE-4C2C-9D73-8601F68B055E}.Release|Emscripten.Build.0 = Release|Emscripten - {5190107D-91B3-4EF8-82CB-08381DD19ABB}.Debug|Emscripten.ActiveCfg = Debug|Emscripten - {5190107D-91B3-4EF8-82CB-08381DD19ABB}.Debug|Emscripten.Build.0 = Debug|Emscripten - {5190107D-91B3-4EF8-82CB-08381DD19ABB}.Release|Emscripten.ActiveCfg = Release|Emscripten - {5190107D-91B3-4EF8-82CB-08381DD19ABB}.Release|Emscripten.Build.0 = Release|Emscripten {F28A1DE1-5949-4AF5-8901-A37871C2514E}.Debug|Emscripten.ActiveCfg = Debug|Emscripten {F28A1DE1-5949-4AF5-8901-A37871C2514E}.Debug|Emscripten.Build.0 = Debug|Emscripten {F28A1DE1-5949-4AF5-8901-A37871C2514E}.Release|Emscripten.ActiveCfg = Release|Emscripten @@ -270,7 +264,6 @@ Global {65E0ED61-A813-4AEB-8DB0-A58657858EE2} = {8E55380B-7067-47FF-8B6B-6D656B8D8CC3} {BE6A123E-9729-44A3-976F-3C06A3724894} = {8E55380B-7067-47FF-8B6B-6D656B8D8CC3} {61D7F11F-25EE-4C2C-9D73-8601F68B055E} = {8E55380B-7067-47FF-8B6B-6D656B8D8CC3} - {5190107D-91B3-4EF8-82CB-08381DD19ABB} = {8E55380B-7067-47FF-8B6B-6D656B8D8CC3} {678A07B3-3A25-40E4-8A36-7A399056188A} = {8E55380B-7067-47FF-8B6B-6D656B8D8CC3} {C896D890-9132-4A2D-8BA8-0EB6888FEAC2} = {8E55380B-7067-47FF-8B6B-6D656B8D8CC3} {C29BBEE3-02D1-459A-B8BA-832A3439F12D} = {8E55380B-7067-47FF-8B6B-6D656B8D8CC3} diff --git a/tests/msvc10/twopart.vcxproj b/tests/msvc10/twopart.vcxproj index 7d299984..72cc0640 100644 --- a/tests/msvc10/twopart.vcxproj +++ b/tests/msvc10/twopart.vcxproj @@ -80,6 +80,16 @@ <OptimizeReferences>true</OptimizeReferences> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> + <ClCompile> + <DisableWarnings>deprecated-writable-strings</DisableWarnings> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> + <ClCompile> + <DisableWarnings>deprecated-writable-strings</DisableWarnings> + </ClCompile> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="..\twopart_main.cpp" /> <ClCompile Include="..\twopart_side.cpp" /> diff --git a/tests/termios/test_tcgetattr.c b/tests/termios/test_tcgetattr.c new file mode 100644 index 00000000..2b3780ee --- /dev/null +++ b/tests/termios/test_tcgetattr.c @@ -0,0 +1,61 @@ +#include <assert.h> +#include <errno.h> +#include <fcntl.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <termios.h> +#include <unistd.h> + +static void create_file(const char *path, const char *buffer, int mode) { + int fd = open(path, O_WRONLY | O_CREAT | O_EXCL, mode); + assert(fd >= 0); + + int err = write(fd, buffer, sizeof(char) * strlen(buffer)); + assert(err == (sizeof(char) * strlen(buffer))); + + close(fd); +} + +void setup() { + create_file("test.txt", "abcdefg", 0666); +} + +void cleanup() { + unlink("test.txt"); +} + +void test() { + struct termios tc; + int ret; + int fd; + + fd = open("test.txt", O_RDONLY); + + ret = tcgetattr(fd, &tc); + assert(ret == -1); + assert(errno = ENOTTY); + + ret = tcgetattr(STDIN_FILENO, &tc); + assert(!ret); + + ret = tcsetattr(fd, 0, &tc); + assert(ret == -1); + assert(errno = ENOTTY); + + ret = tcsetattr(STDIN_FILENO, 0, &tc); + assert(!ret); + + close(fd); + + puts("success"); +} + +int main() { + atexit(cleanup); + signal(SIGABRT, cleanup); + setup(); + test(); + return EXIT_SUCCESS; +} diff --git a/tests/test_browser.py b/tests/test_browser.py index 32b29966..a0c4dceb 100644 --- a/tests/test_browser.py +++ b/tests/test_browser.py @@ -794,6 +794,9 @@ If manually bisecting: def test_glut_touchevents(self): self.btest('glut_touchevents.c', '1') + def test_emscripten_get_now(self): + self.btest('emscripten_get_now.cpp', '1') + def test_file_db(self): secret = str(time.time()) open('moar.txt', 'w').write(secret) diff --git a/tests/test_core.py b/tests/test_core.py index 7b37682c..bd6d9a03 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -3734,6 +3734,11 @@ def process(filename): Settings.EXPORT_ALL = 1 self.do_run(src, 'hello world!\n*100*\n*fivesix*\nmann\n', post_build=check) + def test_emscripten_get_now(self): + if self.run_name == 'o2': + self.emcc_args += ['--closure', '1'] # Use closure here for some additional coverage + self.do_run(open(path_from_root('tests', 'emscripten_get_now.cpp')).read(), 'Timer resolution is good.') + def test_inlinejs(self): if Settings.ASM_JS: return self.skip('asm does not support random code, TODO: something that works in asm') src = r''' @@ -4670,6 +4675,10 @@ The current type of b is: 9 expected = open(path_from_root('tests', 'pthread', 'specific.c.txt'), 'r').read() self.do_run(src, expected, force_c=True) + def test_tcgetattr(self): + src = open(path_from_root('tests', 'termios', 'test_tcgetattr.c'), 'r').read() + self.do_run(src, 'success', force_c=True) + def test_time(self): # XXX Not sure what the right output is here. Looks like the test started failing with daylight savings changes. Modified it to pass again. src = open(path_from_root('tests', 'time', 'src.c'), 'r').read() diff --git a/tests/test_other.py b/tests/test_other.py index a6813b07..eaa5b0d8 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -929,20 +929,11 @@ f.close() self.assertContained('libf1\nlibf2\n', run_js(os.path.join(self.get_dir(), 'a.out.js'))) def test_stdin(self): - open('main.cpp', 'w').write(r''' -#include <stdio.h> -int main(int argc, char const *argv[]) -{ - char str[10] = {0}; - scanf("%10s", str); - printf("%s\n", str); - return 0; -} -''') - Building.emcc('main.cpp', output_filename='a.out.js') - open('in.txt', 'w').write('abc') - # node's stdin support is broken - self.assertContained('abc', Popen(listify(SPIDERMONKEY_ENGINE) + ['a.out.js'], stdin=open('in.txt'), stdout=PIPE, stderr=PIPE).communicate()[0]) + Building.emcc(path_from_root('tests', 'module', 'test_stdin.c'), output_filename='a.out.js') + open('in.txt', 'w').write('abcdef\nghijkl') + + for engine in JS_ENGINES: + self.assertContained('abcdef\nghijkl\neof', run_js(os.path.join(self.get_dir(), 'a.out.js'), engine=engine, stdin=open('in.txt'))) def test_ungetc_fscanf(self): open('main.cpp', 'w').write(r''' diff --git a/tools/file_packager.py b/tools/file_packager.py index 8a1f1ba5..8f0f8be8 100644 --- a/tools/file_packager.py +++ b/tools/file_packager.py @@ -360,7 +360,7 @@ if has_preloaded: }, finish: function(byteArray) { var that = this; - Module['FS_createPreloadedFile'](PATH.dirname(this.name), PATH.basename(this.name), byteArray, true, true, function() { + Module['FS_createPreloadedFile'](this.name, null, byteArray, true, true, function() { Module['removeRunDependency']('fp ' + that.name); }, function() { if (that.audio) { diff --git a/tools/jsrun.py b/tools/jsrun.py index 571e9cee..91038f6e 100644 --- a/tools/jsrun.py +++ b/tools/jsrun.py @@ -12,13 +12,14 @@ def timeout_run(proc, timeout, note='unnamed process', full_output=False): out = proc.communicate() return '\n'.join(out) if full_output else out[0] -def run_js(filename, engine=None, args=[], check_timeout=False, stdout=PIPE, stderr=None, cwd=None, full_output=False): +def run_js(filename, engine=None, args=[], check_timeout=False, stdin=None, stdout=PIPE, stderr=None, cwd=None, full_output=False): if type(engine) is not list: engine = [engine] command = engine + [filename] + (['--'] if 'd8' in engine[0] or 'jsc' in engine[0] else []) + args return timeout_run( Popen( command, + stdin=stdin, stdout=stdout, stderr=stderr, cwd=cwd), |