diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_core.py | 3 | ||||
-rw-r--r-- | tests/utf32.cpp | 26 |
2 files changed, 29 insertions, 0 deletions
diff --git a/tests/test_core.py b/tests/test_core.py index 5d4f35e8..7ceeebd2 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -7525,6 +7525,9 @@ def process(filename): ''' self.do_run(src, '206 188 226 128 μ†ℱ ╋ℯ╳╋ 😇\nμ†ℱ ╋ℯ╳╋ 😇,206,188,226,128\n'); + def test_utf32(self): + self.do_run(open(path_from_root('tests', 'utf32.cpp')).read(), 'OK.') + def test_direct_string_constant_usage(self): if self.emcc_args is None: return self.skip('requires libcxx') diff --git a/tests/utf32.cpp b/tests/utf32.cpp new file mode 100644 index 00000000..a3e660ee --- /dev/null +++ b/tests/utf32.cpp @@ -0,0 +1,26 @@ +#include <stdio.h> +#include <string> +#include <emscripten.h> +#include <cassert> +#include <wchar.h> + +// This code tests that utf32-encoded std::wstrings can be marshalled between C++ and JS. +int main() { + std::wstring wstr = L"abc\u2603\u20AC123"; // U+2603 is snowman, U+20AC is the Euro sign. + const int len = (wstr.length()+1)*4; + char *memory = new char[len]; + + asm("var str = Module.utf32_to_jsstring(%0);" + "Module.print(str);" + "Module.jsstring_to_utf32(str, %1);" + : + : "r"(wstr.c_str()), "r"(memory)); + + // Compare memory to confirm that the string is intact after taking a route through JS side. + const char *srcPtr = reinterpret_cast<const char *>(wstr.c_str()); + for(int i = 0; i < len; ++i) { + assert(memory[i] == srcPtr[i]); + } + printf("OK.\n"); + delete[] memory; +} |