summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/cases/atomicrmw_unaligned.emcc1
-rw-r--r--tests/cases/atomicrmw_unaligned.ll21
-rw-r--r--tests/cases/atomicrmw_unaligned.txt1
-rw-r--r--tests/cases/switch64_ta2.ll55
-rw-r--r--tests/cmake/target_js/CMakeLists.txt26
-rw-r--r--tests/cmake/target_js/jslibrary.js7
-rw-r--r--tests/cmake/target_js/jslibrary2.js7
-rw-r--r--tests/cmake/target_js/main.cpp10
-rw-r--r--tests/cmake/target_js/out.txt4
-rw-r--r--tests/cmake/target_js/postjs.js1
-rw-r--r--tests/cmake/target_js/prejs.js1
-rw-r--r--tests/emscripten_api_browser2.cpp53
-rw-r--r--tests/enet/unix.c4
-rw-r--r--tests/python/readme.md59
-rw-r--r--tests/python/readme.txt46
-rw-r--r--tests/sockets/test_gethostbyname.c9
-rw-r--r--tests/test_browser.py15
-rw-r--r--tests/test_core.py54
-rw-r--r--tests/test_other.py12
-rw-r--r--tests/test_sanity.py2
-rw-r--r--tests/unistd/io.c6
-rw-r--r--tests/unistd/io.out4
-rw-r--r--tests/unistd/login.out2
-rw-r--r--tests/unistd/misc.out8
24 files changed, 338 insertions, 70 deletions
diff --git a/tests/cases/atomicrmw_unaligned.emcc b/tests/cases/atomicrmw_unaligned.emcc
new file mode 100644
index 00000000..9faeda24
--- /dev/null
+++ b/tests/cases/atomicrmw_unaligned.emcc
@@ -0,0 +1 @@
+["-s", "UNALIGNED_MEMORY=1"]
diff --git a/tests/cases/atomicrmw_unaligned.ll b/tests/cases/atomicrmw_unaligned.ll
new file mode 100644
index 00000000..fe479dce
--- /dev/null
+++ b/tests/cases/atomicrmw_unaligned.ll
@@ -0,0 +1,21 @@
+; ModuleID = 'tests/hello_world.bc'
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S128"
+target triple = "i386-pc-linux-gnu"
+
+@.str = private unnamed_addr constant [15 x i8] c"hello, %d,%d!\0A\00", align 1 ; [#uses=1 type=[15 x i8]*]
+
+; [#uses=0]
+define i32 @main() {
+entry:
+ %t = alloca i32, align 4 ; [#uses=2 type=i32**]
+ store i32 50, i32* %t, align 4
+ %0 = load i32* %t
+ %1 = atomicrmw add i32* %t, i32 3 seq_cst, ; [#uses=0 type=i32] [debug line = 21:12]
+ %2 = load i32* %t
+ %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0), i32 %0, i32 %2) ; [#uses=0 type=i32]
+ %3 = atomicrmw volatile add i32* %t, i32 3 seq_cst, ; [#uses=0 type=i32] [debug line = 21:12]
+ ret i32 1
+}
+
+; [#uses=1]
+declare i32 @printf(i8*, ...)
diff --git a/tests/cases/atomicrmw_unaligned.txt b/tests/cases/atomicrmw_unaligned.txt
new file mode 100644
index 00000000..45d16fb1
--- /dev/null
+++ b/tests/cases/atomicrmw_unaligned.txt
@@ -0,0 +1 @@
+hello, 50,53!
diff --git a/tests/cases/switch64_ta2.ll b/tests/cases/switch64_ta2.ll
new file mode 100644
index 00000000..e56ccfba
--- /dev/null
+++ b/tests/cases/switch64_ta2.ll
@@ -0,0 +1,55 @@
+@.str = private constant [15 x i8] c"hello, world!\0A\00", align 1 ; [#uses=1]
+
+define linkonce_odr i32 @main() align 2 {
+ %333 = call i32 @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0)) ; [#uses=0]
+ %444 = zext i32 %333 to i64
+ %199 = trunc i8 1 to i1 ; [#uses=1]
+ switch i64 %444, label %label999 [
+ i64 1000, label %label9950
+ i64 1001, label %label9951
+ i64 1002, label %label9952
+ i64 1003, label %label9953
+ i64 1004, label %label9954
+ i64 1005, label %label9955
+ i64 1006, label %label9956
+ i64 1007, label %label9957
+ i64 1008, label %label9958
+ i64 1009, label %label9959
+ ] ; switch should ignore all code after it in the block
+ ; No predecessors!
+ %a472 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
+ cleanup
+ %a473 = extractvalue { i8*, i32 } %a472, 0
+ %a474 = extractvalue { i8*, i32 } %a472, 1
+ br label %label999
+
+label9950:
+ %333b = call i32 @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0)) ; [#uses=0]
+ br label %label999
+
+label9951:
+ br label %label999
+label9952:
+ br label %label999
+label9953:
+ br label %label999
+label9954:
+ br label %label999
+label9955:
+ br label %label999
+label9956:
+ br label %label999
+label9957:
+ br label %label999
+label9958:
+ br label %label999
+label9959:
+ br label %label999
+
+label999: ; preds = %555
+ ret i32 0
+}
+
+declare i32 @printf(i8*)
+declare i32 @__gxx_personality_v0(...)
+
diff --git a/tests/cmake/target_js/CMakeLists.txt b/tests/cmake/target_js/CMakeLists.txt
index cee5fc42..244cc70a 100644
--- a/tests/cmake/target_js/CMakeLists.txt
+++ b/tests/cmake/target_js/CMakeLists.txt
@@ -1,11 +1,15 @@
cmake_minimum_required(VERSION 2.8)
-project(hello_world)
+project(test_cmake)
-file(GLOB sourceFiles ../../hello_world.cpp)
+file(GLOB sourceFiles main.cpp)
+
+file(GLOB preJsFiles pre*.js)
+file(GLOB postJsFiles post*.js)
+file(GLOB libraryJsFiles jslibrary*.js)
if (CMAKE_BUILD_TYPE STREQUAL Debug)
- SET(linkFlags "")
+ SET(linkFlags "-g4")
else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimizations enabled.
SET(linkFlags "-O2")
endif()
@@ -28,5 +32,17 @@ if (NOT CMAKE_C_SIZEOF_DATA_PTR)
message(FATAL_ERROR "CMAKE_C_SIZEOF_DATA_PTR was not defined!")
endif()
-add_executable(hello_world ${sourceFiles})
-set_target_properties(hello_world PROPERTIES LINK_FLAGS "${linkFlags}")
+add_executable(test_cmake ${sourceFiles})
+
+# GOTCHA: If your project has custom link flags, these must be set *before* calling any of the em_link_xxx functions!
+set_target_properties(test_cmake PROPERTIES LINK_FLAGS "${linkFlags}")
+
+message(STATUS "js libs '${libraryJsFiles}'")
+# To link .js files using the --js-library flag, use the following helper function.
+em_link_js_library(test_cmake ${libraryJsFiles})
+
+# To link .js files using the --pre-js flag, use the following helper function.
+em_link_pre_js(test_cmake ${preJsFiles})
+
+# To link .js files using the --post-js flag, use the following helper function.
+em_link_post_js(test_cmake ${postJsFiles})
diff --git a/tests/cmake/target_js/jslibrary.js b/tests/cmake/target_js/jslibrary.js
new file mode 100644
index 00000000..63375d8f
--- /dev/null
+++ b/tests/cmake/target_js/jslibrary.js
@@ -0,0 +1,7 @@
+var mylib = {};
+
+mylib.lib_function = function() {
+ console.log('lib_function');
+}
+
+mergeInto(LibraryManager.library, mylib);
diff --git a/tests/cmake/target_js/jslibrary2.js b/tests/cmake/target_js/jslibrary2.js
new file mode 100644
index 00000000..5d322e2d
--- /dev/null
+++ b/tests/cmake/target_js/jslibrary2.js
@@ -0,0 +1,7 @@
+var mylib = {};
+
+mylib.lib_function2 = function() {
+ console.log('lib_function2');
+}
+
+mergeInto(LibraryManager.library, mylib);
diff --git a/tests/cmake/target_js/main.cpp b/tests/cmake/target_js/main.cpp
new file mode 100644
index 00000000..4b61dbf7
--- /dev/null
+++ b/tests/cmake/target_js/main.cpp
@@ -0,0 +1,10 @@
+extern "C" {
+ void lib_function();
+ void lib_function2();
+}
+
+int main()
+{
+ lib_function();
+ lib_function2();
+}
diff --git a/tests/cmake/target_js/out.txt b/tests/cmake/target_js/out.txt
new file mode 100644
index 00000000..76135df7
--- /dev/null
+++ b/tests/cmake/target_js/out.txt
@@ -0,0 +1,4 @@
+prejs executed
+lib_function
+lib_function2
+postjs executed \ No newline at end of file
diff --git a/tests/cmake/target_js/postjs.js b/tests/cmake/target_js/postjs.js
new file mode 100644
index 00000000..5a1b44ce
--- /dev/null
+++ b/tests/cmake/target_js/postjs.js
@@ -0,0 +1 @@
+console.log('postjs executed');
diff --git a/tests/cmake/target_js/prejs.js b/tests/cmake/target_js/prejs.js
new file mode 100644
index 00000000..87beb770
--- /dev/null
+++ b/tests/cmake/target_js/prejs.js
@@ -0,0 +1 @@
+console.log('prejs executed');
diff --git a/tests/emscripten_api_browser2.cpp b/tests/emscripten_api_browser2.cpp
new file mode 100644
index 00000000..569ed710
--- /dev/null
+++ b/tests/emscripten_api_browser2.cpp
@@ -0,0 +1,53 @@
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#include<emscripten.h>
+
+int value = 0;
+
+extern "C" {
+ void set(int x) {
+ printf("set! %d\n", x);
+ value = x;
+ }
+}
+
+void load2() {
+ printf("load2\n");
+
+ char buffer[10];
+ memset(buffer, 0, 10);
+ FILE *f = fopen("file1.txt", "r");
+ fread(buffer, 1, 5, f);
+ fclose(f);
+ assert(strcmp(buffer, "first") == 0);
+
+ memset(buffer, 0, 10);
+ f = fopen("file2.txt", "r");
+ fread(buffer, 1, 6, f);
+ fclose(f);
+ assert(strcmp(buffer, "second") == 0);
+
+ int result = 1;
+ REPORT_RESULT();
+}
+void error2() {
+ printf("fail2\n");
+}
+
+void load1() {
+ printf("load1\n");
+ assert(value == 456);
+ emscripten_async_load_script("script2.js", load2, error2);
+}
+void error1() {
+ printf("fail1\n");
+}
+
+int main() {
+ emscripten_async_load_script("script1.js", load1, error1);
+
+ return 1;
+}
+
diff --git a/tests/enet/unix.c b/tests/enet/unix.c
index a225b57d..292eb29b 100644
--- a/tests/enet/unix.c
+++ b/tests/enet/unix.c
@@ -80,7 +80,7 @@ enet_address_set_host (ENetAddress * address, const char * name)
char buffer [2048];
int errnum;
-#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__EMSCRIPTEN__)
gethostbyname_r (name, & hostData, buffer, sizeof (buffer), & hostEntry, & errnum);
#else
hostEntry = gethostbyname_r (name, & hostData, buffer, sizeof (buffer), & errnum);
@@ -133,7 +133,7 @@ enet_address_get_host (const ENetAddress * address, char * name, size_t nameLeng
in.s_addr = address -> host;
-#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__EMSCRIPTEN__)
gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & hostEntry, & errnum);
#else
hostEntry = gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & errnum);
diff --git a/tests/python/readme.md b/tests/python/readme.md
new file mode 100644
index 00000000..e728dce3
--- /dev/null
+++ b/tests/python/readme.md
@@ -0,0 +1,59 @@
+Building Python with Emscripten
+===============================
+
+These directions should work for Python 2.7.x (last tested with 2.7.5).
+
+First, uncompress Python into two separate directories, one for native
+and one for JavaScript.
+
+In the JavaScript directory, do:
+
+````
+ EMCONFIGURE_JS=1 emconfigure ./configure --without-threads --without-pymalloc --enable-shared --disable-ipv6
+````
+
+If you are on Mac OS X, you will also want ``disable-toolbox-glue``.
+If you are on an older version of Python (such as 2.7.2), you may
+not need the ``--disable-ipv6`` option.
+
+If you are on Python 2.7.4 or later, you will need to edit the
+``Makefile`` generated and remove the ``MULTIARCH=`` line(s).
+You will also need to edit ``pyconfig.h`` and remove defines
+for ``DOUBLE_IS_BIG_ENDIAN_IEEE754``, ``DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754``,
+and ``HAVE_GCC_ASM_FOR_X87``.
+
+On Python 2.7.2, you will need to edit ``pyconfig.h`` and remove
+``HAVE_GCC_ASM_FOR_X87``, ``HAVE_SIG*`` except for ``SIGNAL_H``
+and *add* ``#define PY_NO_SHORT_FLOAT_REPR``.
+
+Now, you can run ``make``. It will fail trying to run ``pgen``.
+
+At this point, go to your native directory and run:
+
+````
+./configure --without-threads --without-pymalloc --enable-shared --disable-ipv6
+````
+
+Now, run ``make`` in the native directory and then copy the generated ``Parser/pgen``
+to your JavaScript directory. Back in your JavaScript directory, be sure to flag
+the ``pgen`` executable as executable:
+
+````
+chmod +x Parser/pgen
+````
+
+Now, run ``make`` again.
+
+You will get an error about trying to run ``python`` or ``python.exe``. This
+can be ignored.
+
+Now, you can link the bitcode file that you need:
+
+````
+llvm-link libpython2.7.so Modules/python.o -o python.bc
+````
+
+If you are on Mac OS X, you will want to look for ``libpython2.7.dylib``
+instead of ``libpython2.7.so``.
+
+Thanks to rasjidw and everyone else who has helped with this!
diff --git a/tests/python/readme.txt b/tests/python/readme.txt
deleted file mode 100644
index 31b0ff45..00000000
--- a/tests/python/readme.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-Updates to Python 2.7.4 and emscripten of Arp 29 2013 with le32
-
-Go to js dir, run EMCONFIGURE_JS=1 ~/Dev/emscripten/emconfigure ./configure --without-threads --without-pymalloc --enable-shared --disable-ipv6
-clean out MULTIARCH= in Makefile
-make, until error on pgen
-Go to native, run ./configure --without-threads --without-pymalloc --enable-shared --disable-ipv6
-cp Parser/pgen ../JS_DIR/Parser
-return to JS
-chmod +x Parser/pgen
-remove #defines of DOUBLE_IS_BIG_ENDIAN_IEEE754 and DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 and HAVE_GCC_ASM_FOR_X87 in pyconfig.h
-make
-link libpython2.7.so with Modules/python.o to get the bitcode file you want
-
-=========================
-
-
-This is Python 2.7.2, compiled to .bc as follows:
-
-Uncompress Python into two separate directories, one for native and one for JS.
-
-In the JS one, do
- emconfigure ./configure --without-threads --without-pymalloc --enable-shared
- EDIT pyconfig.h, remove
- HAVE_GCC_ASM_FOR_X87
- HAVE_SIG* except SIGNAL_H
- and *add*
- #define PY_NO_SHORT_FLOAT_REPR
- make
-It will fail on lack of permissions to run Parser/pgen.
-
-Go to the native one, do
- ./configure --without-threads --without-pymalloc
- make
- (Note: you don't need to let it complete, just enough for Parse/pgen is sufficient.)
- cp Parser/pgen ../YOUR_JS_DIR/Parser/
-
-Return to the JS one, do
- chmod +x Parser/pgen
- make
-You will get an error on lack of permissions to run ./python. Ignore that, and do
- llvm-link libpython2.7.so python -o python.bc
-
-That's it!
-
-Thanks to rasjidw for helping with this!
-
diff --git a/tests/sockets/test_gethostbyname.c b/tests/sockets/test_gethostbyname.c
index de7da706..459c6b98 100644
--- a/tests/sockets/test_gethostbyname.c
+++ b/tests/sockets/test_gethostbyname.c
@@ -13,12 +13,17 @@
int main() {
char str[INET_ADDRSTRLEN];
+ struct hostent *host = NULL;
+ struct hostent hostData;
struct in_addr addr;
const char *res;
+ char buffer[2048];
int err;
- // resolve the hostname ot an actual address
- struct hostent *host = gethostbyname("slashdot.org");
+ // gethostbyname_r calls the same stuff as gethostbyname, so we'll test the
+ // more complicated one.
+ // resolve the hostname to an actual address
+ gethostbyname_r("slashdot.org", &hostData, buffer, sizeof(buffer), &host, &err);
assert(host->h_addrtype == AF_INET);
assert(host->h_length == sizeof(uint32_t));
diff --git a/tests/test_browser.py b/tests/test_browser.py
index e6fd6544..a3b9a1c3 100644
--- a/tests/test_browser.py
+++ b/tests/test_browser.py
@@ -1230,6 +1230,17 @@ keydown(100);keyup(100); // trigger the end
def test_emscripten_api(self):
self.btest('emscripten_api_browser.cpp', '1', args=['-s', '''EXPORTED_FUNCTIONS=['_main', '_third']'''])
+ def test_emscripten_api2(self):
+ open('script1.js', 'w').write('''
+ Module._set(456);
+ ''')
+
+ open('file1.txt', 'w').write('first');
+ open('file2.txt', 'w').write('second');
+ Popen([PYTHON, FILE_PACKAGER, 'test.data', '--preload', 'file1.txt', 'file2.txt'], stdout=open('script2.js', 'w')).communicate()
+
+ self.btest('emscripten_api_browser2.cpp', '1', args=['-s', '''EXPORTED_FUNCTIONS=['_main', '_set']'''])
+
def test_emscripten_api_infloop(self):
self.btest('emscripten_api_browser_infloop.cpp', '7')
@@ -1466,7 +1477,9 @@ keydown(100);keyup(100); // trigger the end
}, 2000);
};
''')
- self.btest('pre_run_deps.cpp', expected='10', args=['--pre-js', 'pre.js'])
+
+ for mem in [0, 1]:
+ self.btest('pre_run_deps.cpp', expected='10', args=['--pre-js', 'pre.js', '--memory-init-file', str(mem)])
def test_worker_api(self):
Popen([PYTHON, EMCC, path_from_root('tests', 'worker_api_worker.cpp'), '-o', 'worker.js', '-s', 'BUILD_AS_WORKER=1', '-s', 'EXPORTED_FUNCTIONS=["_one"]']).communicate()
diff --git a/tests/test_core.py b/tests/test_core.py
index d02e6778..991f43a9 100644
--- a/tests/test_core.py
+++ b/tests/test_core.py
@@ -1431,6 +1431,7 @@ Succeeded!
self.do_run(src, 'BUG?\nDisplay: Vu=465.100000 Vv=465.200000 Wu=160.300000 Wv=111.400000')
def test_math(self):
+ if Settings.USE_TYPED_ARRAYS != 2: return self.skip('requires ta2')
src = '''
#include <stdio.h>
#include <stdlib.h>
@@ -5045,7 +5046,7 @@ The current type of b is: 9
src = r'''
int main () {
*(volatile char *)0 = 0;
- return 0;
+ return *(volatile char *)0;
}
'''
self.do_run(src, 'fault on write to 0' if not Settings.ASM_JS else 'abort()')
@@ -6907,6 +6908,29 @@ at function.:blag
printf("%i\n", a);
}
+ char buf1[100], buf2[100], buf3[100], buf4[100];
+
+ int numItems = sscanf("level=4:ref=3", "%255[^:=]=%255[^:]:%255[^=]=%255c", buf1, buf2, buf3, buf4);
+ printf("%d, %s, %s, %s, %s\n", numItems, buf1, buf2, buf3, buf4);
+
+ numItems = sscanf("def|456", "%[a-z]|%[0-9]", buf1, buf2);
+ printf("%d, %s, %s\n", numItems, buf1, buf2);
+
+ numItems = sscanf("3-4,-ab", "%[-0-9],%[ab-z-]", buf1, buf2);
+ printf("%d, %s, %s\n", numItems, buf1, buf2);
+
+ numItems = sscanf("Hello,World", "%[A-Za-z],%[^0-9]", buf1, buf2);
+ printf("%d, %s, %s\n", numItems, buf1, buf2);
+
+ numItems = sscanf("Hello4711", "%[^0-9],%[^0-9]", buf1, buf2);
+ printf("%d, %s\n", numItems, buf1);
+
+ numItems = sscanf("JavaScript", "%4[A-Za-z]", buf1);
+ printf("%d, %s\n", numItems, buf1);
+
+ numItems = sscanf("[]", "%1[[]%1[]]", buf1, buf2);
+ printf("%d, %s, %s\n", numItems, buf1, buf2);
+
return 0;
}
'''
@@ -6914,7 +6938,14 @@ at function.:blag
'1\n1499\n' +
'5\n87,0.481565,0.059481,0,1\n' +
'3\n-123,4294966531,-34\n' +
- '1\n')
+ '1\n' +
+ '4, level, 4, ref, 3\n' +
+ '2, def, 456\n' +
+ '2, 3-4, -ab\n' +
+ '2, Hello, World\n' +
+ '1, Hello\n' +
+ '1, Java\n' +
+ '2, [, ]')
def test_sscanf_2(self):
# doubles
@@ -7170,6 +7201,18 @@ date: 18.07.2013w; day 18, month 7, year 2013, extra: 201, 3
'''
self.do_run(src, '10 1.1 1.1 1.1');
+ def test_sscanf_hex(self):
+ src = r'''
+ #include "stdio.h"
+
+ int main(){
+ unsigned int a, b;
+ sscanf("0x12AB 12AB", "%x %x", &a, &b);
+ printf("%d %d\n", a, b);
+ }
+ '''
+ self.do_run(src, '4779 4779')
+
def test_langinfo(self):
src = open(path_from_root('tests', 'langinfo', 'test.c'), 'r').read()
expected = open(path_from_root('tests', 'langinfo', 'output.txt'), 'r').read()
@@ -8894,6 +8937,8 @@ def process(filename):
def test_cases(self):
if Building.LLVM_OPTS: return self.skip("Our code is not exactly 'normal' llvm assembly")
+ emcc_args = self.emcc_args
+
try:
os.environ['EMCC_LEAVE_INPUTS_RAW'] = '1'
Settings.CHECK_OVERFLOWS = 0
@@ -8907,6 +8952,10 @@ def process(filename):
if '_noasm' in shortname and Settings.ASM_JS:
print self.skip('case "%s" not relevant for asm.js' % shortname)
continue
+ self.emcc_args = emcc_args
+ if os.path.exists(shortname + '.emcc'):
+ if not self.emcc_args: continue
+ self.emcc_args = self.emcc_args + json.loads(open(shortname + '.emcc').read())
print >> sys.stderr, "Testing case '%s'..." % shortname
output_file = path_from_root('tests', 'cases', shortname + '.txt')
if Settings.QUANTUM_SIZE == 1:
@@ -8927,6 +8976,7 @@ def process(filename):
finally:
del os.environ['EMCC_LEAVE_INPUTS_RAW']
+ self.emcc_args = emcc_args
def test_fuzz(self):
if Settings.USE_TYPED_ARRAYS != 2: return self.skip('needs ta2')
diff --git a/tests/test_other.py b/tests/test_other.py
index 64be60fa..9f331439 100644
--- a/tests/test_other.py
+++ b/tests/test_other.py
@@ -295,7 +295,7 @@ f.close()
make = make_commands[generator]
cmake_cases = ['target_js', 'target_html']
- cmake_outputs = ['hello_world.js', 'hello_world_gles.html']
+ cmake_outputs = ['test_cmake.js', 'hello_world_gles.html']
for i in range(0, 2):
for configuration in ['Debug', 'Release']:
# CMake can be invoked in two ways, using 'emconfigure cmake', or by directly running 'cmake'.
@@ -342,7 +342,7 @@ f.close()
# Run through node, if CMake produced a .js file.
if cmake_outputs[i].endswith('.js'):
ret = Popen(listify(NODE_JS) + [tempdirname + '/' + cmake_outputs[i]], stdout=PIPE).communicate()[0]
- assert 'hello, world!' in ret, 'Running cmake-based .js application failed!'
+ self.assertTextDataIdentical(open(cmakelistsdir + '/out.txt', 'r').read().strip(), ret.strip())
finally:
os.chdir(path_from_root('tests')) # Move away from the directory we are about to remove.
shutil.rmtree(tempdirname)
@@ -1665,10 +1665,10 @@ f.close()
if multiprocessing.cpu_count() < 2: return self.skip('need multiple cores')
try:
os.environ['EMCC_DEBUG'] = '1'
- os.environ['EMCC_CORES'] = '2'
+ os.environ['EMCC_CORES'] = '2' # standardize over machines
for asm, linkable, chunks, js_chunks in [
- (0, 0, 3, 2), (0, 1, 3, 4),
- (1, 0, 3, 2), (1, 1, 3, 4)
+ (0, 0, 2, 2), (0, 1, 2, 4),
+ (1, 0, 2, 2), (1, 1, 2, 4)
]:
print asm, linkable, chunks, js_chunks
output, err = Popen([PYTHON, EMCC, path_from_root('tests', 'hello_libcxx.cpp'), '-O1', '-s', 'LINKABLE=%d' % linkable, '-s', 'ASM_JS=%d' % asm] + (['-O2'] if asm else []), stdout=PIPE, stderr=PIPE).communicate()
@@ -1755,7 +1755,7 @@ $
other=ay file...
seeked= file.
''', output[0])
- self.assertIdentical('texte\n', output[1])
+ self.assertContained('texte\n', output[1])
def test_emconfig(self):
output = Popen([PYTHON, EMCONFIG, 'LLVM_ROOT'], stdout=PIPE, stderr=PIPE).communicate()[0].strip()
diff --git a/tests/test_sanity.py b/tests/test_sanity.py
index 4188afff..6fdf5ddd 100644
--- a/tests/test_sanity.py
+++ b/tests/test_sanity.py
@@ -478,7 +478,7 @@ fi
(['--jcache'], 'hello_malloc.cpp', False, True, False, True, False, True, []),
([], 'hello_malloc.cpp', False, False, False, False, False, False, []),
# new, huge file
- ([], 'hello_libcxx.cpp', False, False, False, False, False, False, ('3 chunks',)),
+ ([], 'hello_libcxx.cpp', False, False, False, False, False, False, ('4 chunks',)),
(['--jcache'], 'hello_libcxx.cpp', True, False, True, False, True, False, []),
(['--jcache'], 'hello_libcxx.cpp', False, True, False, True, False, True, []),
([], 'hello_libcxx.cpp', False, False, False, False, False, False, []),
diff --git a/tests/unistd/io.c b/tests/unistd/io.c
index 0ff5f4fb..6bf22593 100644
--- a/tests/unistd/io.c
+++ b/tests/unistd/io.c
@@ -104,6 +104,12 @@ int main() {
printf("errno: %d\n\n", errno);
errno = 0;
+ printf("pread past end of file: %d\n", pread(f, readBuffer, sizeof readBuffer, 99999999999));
+ printf("data: %s\n", readBuffer);
+ memset(readBuffer, 0, sizeof readBuffer);
+ printf("errno: %d\n\n", errno);
+ errno = 0;
+
printf("seek: %d\n", lseek(f, 3, SEEK_SET));
printf("errno: %d\n\n", errno);
printf("partial read from file: %d\n", read(f, readBuffer, 3));
diff --git a/tests/unistd/io.out b/tests/unistd/io.out
index 037d0c34..c979557e 100644
--- a/tests/unistd/io.out
+++ b/tests/unistd/io.out
@@ -31,6 +31,10 @@ read from file: 10
data: 1234567890
errno: 0
+pread past end of file: 0
+data:
+errno: 0
+
seek: 3
errno: 0
diff --git a/tests/unistd/login.out b/tests/unistd/login.out
index 50e850ae..c1919c3c 100644
--- a/tests/unistd/login.out
+++ b/tests/unistd/login.out
@@ -3,7 +3,7 @@ errno: 0
gethostname/2 ret: -1
gethostname/2: em------------------------
-errno: 91
+errno: 36
gethostname/256 ret: 0
gethostname/256: emscripten
diff --git a/tests/unistd/misc.out b/tests/unistd/misc.out
index 8f03f688..ae641d57 100644
--- a/tests/unistd/misc.out
+++ b/tests/unistd/misc.out
@@ -11,8 +11,8 @@ lockf(good): 0, errno: 0
lockf(bad): -1, errno: 9
nice: 0, errno: 1
pause: -1, errno: 4
-pipe(good): -1, errno: 88
-pipe(bad): -1, errno: 88
+pipe(good): -1, errno: 38
+pipe(bad): -1, errno: 38
execl: -1, errno: 8
execle: -1, errno: 8
execlp: -1, errno: 8
@@ -29,8 +29,8 @@ alarm: 0, errno: 0
ualarm: 0, errno: 0
fork: -1, errno: 11
vfork: -1, errno: 11
-crypt: (null), errno: 88
-encrypt, errno: 88
+crypt: (null), errno: 38
+encrypt, errno: 38
getgid: 0, errno: 0
getegid: 0, errno: 0
getuid: 0, errno: 0