diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-08-30 11:21:48 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-08-30 11:21:48 -0700 |
commit | b5b49215d4a40566380a769f47a9c1cce74a28b0 (patch) | |
tree | 68308b6059798a81f24f6a8a1ac28a0091c5d066 /tests | |
parent | 1cc28b8e9e94267041bc71afebfbbe3059db4a3f (diff) | |
parent | b895cdc7df2085d324003c9df582a3dcc1927697 (diff) |
Merge branch 'incoming'
Diffstat (limited to 'tests')
29 files changed, 447 insertions, 57 deletions
diff --git a/tests/cases/callwithstructural64_ta2.ll b/tests/cases/callwithstructural64_ta2.ll new file mode 100644 index 00000000..d16b0e87 --- /dev/null +++ b/tests/cases/callwithstructural64_ta2.ll @@ -0,0 +1,29 @@ +; ModuleID = 'foo.bc' +target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:32" +target triple = "le32-unknown-nacl" + +%ac = type { i8*, i64 } + +@0 = constant [9 x i8] c"func %s\0A\00" +@1 = constant [4 x i8] c"foo\00" + +declare void @llvm.trap() noreturn nounwind + +define void @direct(%ac) { +entry: + %str = alloca %ac + store %ac %0, %ac* %str + %1 = getelementptr inbounds %ac* %str, i32 0, i32 0 + %2 = load i8** %1 + call void (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8]* @0, i32 0, i32 0), i8* %2) + ret void +} + +declare void @printf(i8*, ...) + +define i32 @main() { +entry: + call void @direct(%ac { i8* getelementptr inbounds ([4 x i8]* @1, i32 0, i32 0), i64 3 }) + ret i32 0 +} + diff --git a/tests/cases/callwithstructural64_ta2.txt b/tests/cases/callwithstructural64_ta2.txt new file mode 100644 index 00000000..51a6ac7c --- /dev/null +++ b/tests/cases/callwithstructural64_ta2.txt @@ -0,0 +1 @@ +func foo diff --git a/tests/cases/callwithstructural_ta2.ll b/tests/cases/callwithstructural_ta2.ll new file mode 100644 index 00000000..bc6f852a --- /dev/null +++ b/tests/cases/callwithstructural_ta2.ll @@ -0,0 +1,29 @@ +; ModuleID = 'foo.bc' +target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:32" +target triple = "le32-unknown-nacl" + +%ac = type { i8*, i32 } + +@0 = constant [9 x i8] c"func %s\0A\00" +@1 = constant [4 x i8] c"foo\00" + +declare void @llvm.trap() noreturn nounwind + +define void @direct(%ac) { +entry: + %str = alloca %ac + store %ac %0, %ac* %str + %1 = getelementptr inbounds %ac* %str, i32 0, i32 0 + %2 = load i8** %1 + call void (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8]* @0, i32 0, i32 0), i8* %2) + ret void +} + +declare void @printf(i8*, ...) + +define i32 @main() { +entry: + call void @direct(%ac { i8* getelementptr inbounds ([4 x i8]* @1, i32 0, i32 0), i32 3 }) + ret i32 0 +} + diff --git a/tests/cases/callwithstructural_ta2.txt b/tests/cases/callwithstructural_ta2.txt new file mode 100644 index 00000000..51a6ac7c --- /dev/null +++ b/tests/cases/callwithstructural_ta2.txt @@ -0,0 +1 @@ +func foo diff --git a/tests/cases/structinparam.ll b/tests/cases/structinparam.ll new file mode 100644 index 00000000..d81f5e67 --- /dev/null +++ b/tests/cases/structinparam.ll @@ -0,0 +1,36 @@ +; ModuleID = 'min.bc' +target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:32" +target triple = "le32-unknown-nacl" + +%ac = type { i8*, i32 } + +@0 = constant [9 x i8] c"func %s\0A\00" +@1 = constant [4 x i8] c"foo\00" +@2 = constant [9 x i8] c"main %s\0A\00" + +declare void @llvm.trap() noreturn nounwind + +define void @direct(%ac) { +entry: + %str = alloca %ac + store %ac %0, %ac* %str + %1 = getelementptr inbounds %ac* %str, i32 0, i32 0 + %2 = load i8** %1 + call void (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8]* @0, i32 0, i32 0), i8* %2) + ret void +} + +declare void @printf(i8*, ...) + +define i32 @main() { +entry: + %str = alloca %ac + store %ac { i8* getelementptr inbounds ([4 x i8]* @1, i32 0, i32 0), i32 3 }, %ac* %str + %0 = getelementptr inbounds %ac* %str, i32 0, i32 0 + %1 = load i8** %0 + call void (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8]* @2, i32 0, i32 0), i8* %1) + %2 = load %ac* %str + call void @direct(%ac %2) + ret i32 0 +} + diff --git a/tests/cases/structinparam.txt b/tests/cases/structinparam.txt new file mode 100644 index 00000000..785191e7 --- /dev/null +++ b/tests/cases/structinparam.txt @@ -0,0 +1,2 @@ +main foo +func foo 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/file_db.cpp b/tests/file_db.cpp new file mode 100644 index 00000000..ebb3bb30 --- /dev/null +++ b/tests/file_db.cpp @@ -0,0 +1,47 @@ +#include <stdio.h> +#include <emscripten.h> + +void later(void *) {} + +int main() { +#if FIRST + FILE *f = fopen("waka.txt", "w"); + fputc('a', f); + fputc('z', f); + fclose(f); + + EM_ASM( + FS.saveFilesToDB(['waka.txt', 'moar.txt'], function() { + Module.print('save ok'); + var xhr = new XMLHttpRequest(); + xhr.open('GET', 'http://localhost:8888/report_result?1'); + xhr.send(); + setTimeout(function() { window.close() }, 1000); + }, function(e) { + abort('saving should succeed ' + e); + }); + ); +#else + EM_ASM( + FS.loadFilesFromDB(['waka.txt', 'moar.txt'], function() { + function stringy(arr) { + return Array.prototype.map.call(arr, function(x) { return String.fromCharCode(x) }).join(''); + } + assert(stringy(FS.analyzePath('waka.txt').object.contents) == 'az'); + var secret = stringy(FS.analyzePath('moar.txt').object.contents); + Module.print('load: ' + secret); + var xhr = new XMLHttpRequest(); + xhr.open('GET', 'http://localhost:8888/report_result?' + secret); + xhr.send(); + setTimeout(function() { window.close() }, 1000); + }, function() { + abort('loading should succeed'); + }); + ); +#endif + + emscripten_async_call(later, NULL, 100); // keep runtime alive + + return 0; +} + diff --git a/tests/filesystem/src.js b/tests/filesystem/src.js index ceea348d..dbdd4bed 100644 --- a/tests/filesystem/src.js +++ b/tests/filesystem/src.js @@ -1,10 +1,13 @@ +var dummy_device = FS.makedev(64, 0); +FS.registerDevice(dummy_device, {}); + FS.createFolder('/', 'forbidden', false, false); FS.createFolder('/forbidden', 'test', true, true); FS.createPath('/', 'abc/123', true, true); FS.createPath('/', 'abc/456', true, true); FS.createPath('/', 'def/789', true, true); -FS.createDevice('/abc', 'deviceA', function() {}, function() {}); -FS.createDevice('/def', 'deviceB', function() {}, function() {}); +FS.mkdev('/abc/deviceA', 0666, dummy_device); +FS.mkdev('/def/deviceB', 0666, dummy_device); FS.createLink('/abc', 'localLink', '123', true, true); FS.createLink('/abc', 'rootLink', '/', true, true); FS.createLink('/abc', 'relativeLink', '../def', true, true); 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/glbook_10_MultiTexture.vcxproj b/tests/msvc10/glbook_10_MultiTexture.vcxproj index b59fda0a..a831f351 100644 --- a/tests/msvc10/glbook_10_MultiTexture.vcxproj +++ b/tests/msvc10/glbook_10_MultiTexture.vcxproj @@ -82,12 +82,12 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_11_Multisample.vcxproj b/tests/msvc10/glbook_11_Multisample.vcxproj index ae5170be..47d5fb4a 100644 --- a/tests/msvc10/glbook_11_Multisample.vcxproj +++ b/tests/msvc10/glbook_11_Multisample.vcxproj @@ -82,12 +82,12 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_11_Stencil_Test.vcxproj b/tests/msvc10/glbook_11_Stencil_Test.vcxproj index d72d7fa6..3a541128 100644 --- a/tests/msvc10/glbook_11_Stencil_Test.vcxproj +++ b/tests/msvc10/glbook_11_Stencil_Test.vcxproj @@ -82,12 +82,12 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_13_ParticleSystem.vcxproj b/tests/msvc10/glbook_13_ParticleSystem.vcxproj index 458d76fa..c18e17ff 100644 --- a/tests/msvc10/glbook_13_ParticleSystem.vcxproj +++ b/tests/msvc10/glbook_13_ParticleSystem.vcxproj @@ -82,12 +82,12 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </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..489628f5 100644 --- a/tests/msvc10/glbook_15_Hello_Triangle_KD.vcxproj +++ b/tests/msvc10/glbook_15_Hello_Triangle_KD.vcxproj @@ -82,12 +82,12 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_2_Hello_Triangle.vcxproj b/tests/msvc10/glbook_2_Hello_Triangle.vcxproj index b992294d..34de0780 100644 --- a/tests/msvc10/glbook_2_Hello_Triangle.vcxproj +++ b/tests/msvc10/glbook_2_Hello_Triangle.vcxproj @@ -92,12 +92,12 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </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..19442df9 100644 --- a/tests/msvc10/glbook_8_Simple_VertexShader.vcxproj +++ b/tests/msvc10/glbook_8_Simple_VertexShader.vcxproj @@ -82,12 +82,12 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_9_MipMap2D.vcxproj b/tests/msvc10/glbook_9_MipMap2D.vcxproj index 1d747d1d..af0e072b 100644 --- a/tests/msvc10/glbook_9_MipMap2D.vcxproj +++ b/tests/msvc10/glbook_9_MipMap2D.vcxproj @@ -82,12 +82,12 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_9_Simple_Texture2D.vcxproj b/tests/msvc10/glbook_9_Simple_Texture2D.vcxproj index d9232e5d..09ff3e1e 100644 --- a/tests/msvc10/glbook_9_Simple_Texture2D.vcxproj +++ b/tests/msvc10/glbook_9_Simple_Texture2D.vcxproj @@ -82,12 +82,12 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_9_Simple_TextureCubemap.vcxproj b/tests/msvc10/glbook_9_Simple_TextureCubemap.vcxproj index c5c6ee1b..d89da1c7 100644 --- a/tests/msvc10/glbook_9_Simple_TextureCubemap.vcxproj +++ b/tests/msvc10/glbook_9_Simple_TextureCubemap.vcxproj @@ -82,12 +82,12 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemGroup> diff --git a/tests/msvc10/glbook_9_TextureWrap.vcxproj b/tests/msvc10/glbook_9_TextureWrap.vcxproj index 6cfbb0c8..54f51e26 100644 --- a/tests/msvc10/glbook_9_TextureWrap.vcxproj +++ b/tests/msvc10/glbook_9_TextureWrap.vcxproj @@ -82,12 +82,12 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Emscripten'"> <ClCompile> - <AdditionalIncludeDirectories>$(SolutionDir)../glbook/Common</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../glbook/Common</AdditionalIncludeDirectories> </ClCompile> </ItemDefinitionGroup> <ItemGroup> 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 1c9cbfad..a0c4dceb 100644 --- a/tests/test_browser.py +++ b/tests/test_browser.py @@ -794,6 +794,20 @@ 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) + self.btest('file_db.cpp', '1', args=['--preload-file', 'moar.txt', '-DFIRST']) + shutil.copyfile('test.html', 'first.html') + self.btest('file_db.cpp', secret) + shutil.copyfile('test.html', 'second.html') + open('moar.txt', 'w').write('aliantha') + self.btest('file_db.cpp', secret, args=['--preload-file', 'moar.txt']) # even with a file there, we load over it + shutil.move('test.html', 'third.html') + def test_sdl_pumpevents(self): # key events should be detected using SDL_PumpEvents open(os.path.join(self.get_dir(), 'pre.js'), 'w').write(''' diff --git a/tests/test_core.py b/tests/test_core.py index 7c5b651f..6d15da1e 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -3734,6 +3734,13 @@ 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 Settings.USE_TYPED_ARRAYS != 2: return self.skip('requires ta2') + + 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 +4677,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() @@ -6977,8 +6988,11 @@ def process(filename): src = open(filename, 'r').read().replace( '// {{PRE_RUN_ADDITIONS}}', \'\'\' + var dummy_device = FS.makedev(64, 0); + FS.registerDevice(dummy_device, {}); + FS.createDataFile('/', 'file', 'abcdef', true, true); - FS.createDevice('/', 'device', function() {}, function() {}); + FS.mkdev('/device', 0666, dummy_device); \'\'\' ) open(filename, 'w').write(src) @@ -8594,7 +8608,7 @@ def process(filename): do_test() # some test coverage for EMCC_DEBUG 1 and 2 - if self.emcc_args and '-O2' in self.emcc_args and 'EMCC_DEBUG' not in os.environ: + if self.emcc_args and '-O2' in self.emcc_args and 'EMCC_DEBUG' not in os.environ and '-g' in self.emcc_args: shutil.copyfile('src.c.o.js', 'release.js') try: os.environ['EMCC_DEBUG'] = '1' @@ -8609,7 +8623,8 @@ def process(filename): del os.environ['EMCC_DEBUG'] for debug in [1,2]: def clean(text): - return text.replace('\n\n', '\n').replace('\n\n', '\n').replace('\n\n', '\n').replace('\n\n', '\n').replace('\n\n', '\n').replace('{\n}', '{}') + text = text.replace('\n\n', '\n').replace('\n\n', '\n').replace('\n\n', '\n').replace('\n\n', '\n').replace('\n\n', '\n').replace('{\n}', '{}') + return '\n'.join(sorted(text.split('\n'))) self.assertIdentical(clean(open('release.js').read()), clean(open('debug%d.js' % debug).read())) # EMCC_DEBUG=1 mode must not generate different code! print >> sys.stderr, 'debug check %d passed too' % debug @@ -9681,7 +9696,8 @@ def process(filename): # optimizer can deal with both types. out_file = re.sub(' *//@.*$', '', out_file, flags=re.MULTILINE) def clean(code): - return code.replace('{\n}', '{}') + code = code.replace('{\n}', '{}') + return '\n'.join(sorted(code.split('\n'))) self.assertIdentical(clean(no_maps_file), clean(out_file)) map_filename = out_filename + '.map' |