Skip to content

Commit 9d8f60e

Browse files
committed
Got tests to run w/emscripten! (3 failures)
CppTests: test cases: 499 | 496 passed | 3 failed assertions: 682799 | 682794 passed | 5 failed failed tests: >>> Query Functions >>> RealClockSource >>> Continuous Fast Push C4Tests: All tests passed (791941 assertions in 155 test cases)
1 parent 105e4cb commit 9d8f60e

File tree

16 files changed

+179
-88
lines changed

16 files changed

+179
-88
lines changed

C/tests/CMakeLists.txt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,25 @@ add_executable(
6060
c4CertificateTest.cc
6161

6262
${TOP}LiteCore/tests/main.cpp
63-
${TOP}Crypto/SecureRandomize.cc
6463
${TOP}LiteCore/Support/TestsCommon.cc
6564
${TOP}vendor/fleece/ObjC/slice+CoreFoundation.cc
6665
)
6766

67+
if (NOT EMSCRIPTEN)
68+
# These files contain internal functionality that isn't exported from the LiteCore shared lib.
69+
# But C4Tests use these, so we have to compile them into its binary.
70+
# This doesn't apply to Emscripten, bc WASM doesn't have shared libs; all linking is static.
71+
target_sources(
72+
C4Tests PRIVATE
73+
${TOP}Crypto/SecureRandomize.cc
74+
${TOP}LiteCore/Support/Error.cc
75+
${TOP}LiteCore/Support/FilePath.cc
76+
${TOP}LiteCore/Support/LogDecoder.cc
77+
${TOP}LiteCore/Support/Logging_Stub.cc
78+
${TOP}LiteCore/Support/StringUtil.cc
79+
)
80+
endif()
81+
6882
get_directory_property(this_targets DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} BUILDSYSTEM_TARGETS)
6983
set(LITECORE_TARGETS ${LITECORE_TARGETS} ${this_targets} PARENT_SCOPE)
7084
setup_build()

C/tests/c4PerfTest.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ class PerfTest : public C4Test {
175175
input += "_helium_macos";
176176
#elif defined(__linux__)
177177
input += "_helium_linux";
178+
#elif defined(__EMSCRIPTEN__)
179+
input += "_helium_emscripten";
178180
#else
179181
# error "Unknown platform"
180182
#endif

C/tests/cmake/platform_emscripten.cmake

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
function(setup_build)
22
target_sources(
33
C4Tests PRIVATE
4-
${TOP}Crypto/mbedUtils.cc
54
${TOP}LiteCore/Unix/strlcat.c
65
)
76

87
target_link_libraries(
98
C4Tests PRIVATE
10-
mbedcrypto
11-
mbedx509
9+
)
10+
11+
target_compile_options(
12+
C4Tests PRIVATE
13+
"-pthread"
14+
"-fwasm-exceptions"
1215
)
1316

1417
target_link_options(
@@ -19,7 +22,6 @@ function(setup_build)
1922
"SHELL:-s EXIT_RUNTIME=1"
2023
"SHELL:-s PTHREAD_POOL_SIZE=24"
2124
"SHELL:-s ALLOW_MEMORY_GROWTH=1"
22-
"SHELL:-s DEMANGLE_SUPPORT=1"
2325
"SHELL:-s WASM_BIGINT=1"
2426
"-lnodefs.js"
2527
"-lnoderawfs.js"

CMakeLists.txt

Lines changed: 59 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,14 @@ if(BUILD_ENTERPRISE)
127127
)
128128
endif()
129129

130-
if(MSVC)
130+
if(EMSCRIPTEN)
131+
# Emscripten does not actually support shared libraries and instead
132+
# just builds a static library for compatibility with existing
133+
# build setups. We just set this property to suppress a CMake warning.
134+
set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
135+
136+
include("${PROJECT_SOURCE_DIR}/cmake/platform_emscripten.cmake")
137+
elseif(MSVC)
131138
add_definitions(-DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0A00)
132139
if(WINDOWS_STORE)
133140
message(FATAL_ERROR "UWP no longer supported")
@@ -141,13 +148,6 @@ elseif(ANDROID)
141148
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
142149
option(LITECORE_DYNAMIC_ICU "If enabled, search for ICU at runtime so as not to depend on a specific version" OFF)
143150
include("${PROJECT_SOURCE_DIR}/cmake/platform_linux_desktop.cmake")
144-
elseif(EMSCRIPTEN)
145-
# Emscripten does not actually support shared libraries and instead
146-
# just builds a static library for compatibility with existing
147-
# build setups. We just set this property to suppress a CMake warning.
148-
set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
149-
150-
include("${PROJECT_SOURCE_DIR}/cmake/platform_emscripten.cmake")
151151
else()
152152
message(FATAL_ERROR "Unable to determine a supported platform from ${CMAKE_SYSTEM_NAME}")
153153
endif(MSVC)
@@ -340,60 +340,62 @@ install(FILES ${FLEECE_HEADERS} DESTINATION include/fleece)
340340

341341
### Support Libraries (Add functionality, but add nothing to official API)
342342

343-
add_subdirectory(REST EXCLUDE_FROM_ALL)
344-
345-
set(
346-
LC_WEBSOCKET_SRC
347-
Networking/HTTP/HTTPTypes.cc
348-
Networking/HTTP/HTTPLogic.cc
349-
Networking/NetworkInterfaces.cc
350-
Networking/Poller.cc
351-
Networking/TCPSocket.cc
352-
Networking/TLSContext.cc
353-
Networking/WebSockets/BuiltInWebSocket.cc
354-
vendor/sockpp/src/acceptor.cpp
355-
vendor/sockpp/src/connector.cpp
356-
vendor/sockpp/src/datagram_socket.cpp
357-
vendor/sockpp/src/exception.cpp
358-
vendor/sockpp/src/inet_address.cpp
359-
vendor/sockpp/src/inet6_address.cpp
360-
vendor/sockpp/src/mbedtls_context.cpp
361-
vendor/sockpp/src/socket.cpp
362-
vendor/sockpp/src/stream_socket.cpp
363-
)
343+
if (NOT EMSCRIPTEN)
344+
add_subdirectory(REST EXCLUDE_FROM_ALL)
364345

365-
add_library(LiteCoreWebSocket STATIC EXCLUDE_FROM_ALL ${LC_WEBSOCKET_SRC})
366-
target_include_directories(
367-
LiteCoreWebSocket PRIVATE
368-
C
369-
C/include
370-
C/Cpp_include
371-
Crypto
372-
LiteCore/Support
373-
Networking
374-
Networking/BLIP/
375-
Networking/HTTP
376-
Networking/WebSockets
377-
Replicator
378-
REST
379-
vendor/fleece/Fleece/Support
380-
vendor/fleece/API
381-
vendor/sockpp/include
382-
vendor/mbedtls/include
383-
vendor/mbedtls/crypto/include
384-
)
346+
set(
347+
LC_WEBSOCKET_SRC
348+
Networking/HTTP/HTTPTypes.cc
349+
Networking/HTTP/HTTPLogic.cc
350+
Networking/NetworkInterfaces.cc
351+
Networking/Poller.cc
352+
Networking/TCPSocket.cc
353+
Networking/TLSContext.cc
354+
Networking/WebSockets/BuiltInWebSocket.cc
355+
vendor/sockpp/src/acceptor.cpp
356+
vendor/sockpp/src/connector.cpp
357+
vendor/sockpp/src/datagram_socket.cpp
358+
vendor/sockpp/src/exception.cpp
359+
vendor/sockpp/src/inet_address.cpp
360+
vendor/sockpp/src/inet6_address.cpp
361+
vendor/sockpp/src/mbedtls_context.cpp
362+
vendor/sockpp/src/socket.cpp
363+
vendor/sockpp/src/stream_socket.cpp
364+
)
385365

386-
target_link_libraries(
387-
LiteCoreWebSocket PUBLIC
388-
LiteCoreObjects
389-
)
366+
add_library(LiteCoreWebSocket STATIC EXCLUDE_FROM_ALL ${LC_WEBSOCKET_SRC})
367+
target_include_directories(
368+
LiteCoreWebSocket PRIVATE
369+
C
370+
C/include
371+
C/Cpp_include
372+
Crypto
373+
LiteCore/Support
374+
Networking
375+
Networking/BLIP/
376+
Networking/HTTP
377+
Networking/WebSockets
378+
Replicator
379+
REST
380+
vendor/fleece/Fleece/Support
381+
vendor/fleece/API
382+
vendor/sockpp/include
383+
vendor/mbedtls/include
384+
vendor/mbedtls/crypto/include
385+
)
390386

391-
if(LITECORE_PERF_TESTING_MODE)
392-
target_compile_definitions(
387+
target_link_libraries(
393388
LiteCoreWebSocket PUBLIC
394-
LITECORE_PERF_TESTING_MODE
389+
LiteCoreObjects
395390
)
396-
endif()
391+
392+
if(LITECORE_PERF_TESTING_MODE)
393+
target_compile_definitions(
394+
LiteCoreWebSocket PUBLIC
395+
LITECORE_PERF_TESTING_MODE
396+
)
397+
endif()
398+
endif() # NOT EMSCRIPTEN
397399

398400
### TESTS:
399401

LiteCore/Storage/UnicodeCollator_JS.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ namespace litecore {
2323

2424
using namespace std;
2525
using namespace emscripten;
26+
using namespace fleece;
2627

2728
class JSCollationContext : public CollationContext {
2829
public:

LiteCore/Support/ThreadUtil.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,10 @@
3333
# ifndef HAVE_PTHREAD_THREADID_NP
3434
# include <sys/syscall.h>
3535
# endif
36-
# ifndef HAVE_PTHREAD_GETNAME_NP
37-
# include <sys/prctl.h>
38-
# endif
3936
# ifdef __EMSCRIPTEN__
4037
# include <emscripten/threading.h>
38+
# elif !defined(HAVE_PTHREAD_GETNAME_NP)
39+
# include <sys/prctl.h>
4140
# endif
4241

4342
namespace litecore {
@@ -55,10 +54,11 @@ namespace litecore {
5554
std::string GetThreadName() {
5655
std::string retVal;
5756
std::stringstream s;
58-
char name[256];
5957
# if defined(HAVE_PTHREAD_GETNAME_NP)
58+
char name[256];
6059
if ( pthread_getname_np(pthread_self(), name, 255) == 0 && name[0] != 0 ) { s << name << " "; }
6160
# elif defined(HAVE_PRCTL)
61+
char name[256];
6262
if ( prctl(PR_GET_NAME, name, 0, 0, 0) == 0 ) { s << name << " "; }
6363
# else
6464
s << "<unknown thread name> ";

LiteCore/tests/CMakeLists.txt

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,6 @@ add_executable(
7171
UpgraderTest.cc
7272
VectorQueryTest.cc
7373
VersionVectorTest.cc
74-
${TOP}REST/tests/RESTListenerTest.cc
75-
${TOP}REST/tests/RESTClientTest.cc
76-
${TOP}REST/tests/SyncListenerTest.cc
7774
${TOP}vendor/fleece/Tests/API_ValueTests.cc
7875
${TOP}vendor/fleece/Tests/DeltaTests.cc
7976
${TOP}vendor/fleece/Tests/EncoderTests.cc
@@ -89,13 +86,8 @@ add_executable(
8986
${TOP}Replicator/tests/DBAccessTestWrapper.cc
9087
${TOP}Replicator/tests/PropertyEncryptionTests.cc
9188
${TOP}Replicator/tests/ReplicatorLoopbackTest.cc
92-
${TOP}Replicator/tests/ReplicatorAPITest.cc
93-
${TOP}Replicator/tests/ReplicatorSGTest.cc
9489
${TOP}Replicator/tests/ReplicatorCollectionTest.cc
95-
${TOP}Replicator/tests/ReplicatorCollectionSGTest.cc
96-
${TOP}Replicator/tests/ReplicatorSG30Test.cc
9790
${TOP}Replicator/tests/ReplicatorVVUpgradeTest.cc
98-
${TOP}Replicator/tests/SG.cc
9991
${TOP}Replicator/tests/SGTestUser.cc
10092
${TOP}Replicator/tests/ReplParams.cc
10193
${TOP}C/tests/c4Test.cc
@@ -105,6 +97,20 @@ add_executable(
10597
main.cpp
10698
)
10799

100+
if (NOT EMSCRIPTEN)
101+
target_sources(
102+
CppTests PRIVATE
103+
${TOP}REST/tests/RESTListenerTest.cc
104+
${TOP}REST/tests/RESTClientTest.cc
105+
${TOP}REST/tests/SyncListenerTest.cc
106+
${TOP}Replicator/tests/ReplicatorAPITest.cc
107+
${TOP}Replicator/tests/ReplicatorSGTest.cc
108+
${TOP}Replicator/tests/ReplicatorCollectionSGTest.cc
109+
${TOP}Replicator/tests/ReplicatorSG30Test.cc
110+
${TOP}Replicator/tests/SG.cc
111+
)
112+
endif()
113+
108114
get_directory_property(this_targets DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} BUILDSYSTEM_TARGETS)
109115
set(LITECORE_TARGETS ${LITECORE_TARGETS} ${this_targets} PARENT_SCOPE)
110116
setup_build()
@@ -159,6 +165,12 @@ target_link_libraries(
159165
LiteCoreUnitTesting
160166
FleeceObjects
161167
BLIPObjects
162-
LiteCoreREST_Static
163-
LiteCoreWebSocket
164168
)
169+
170+
if (NOT EMSCRIPTEN)
171+
target_link_libraries(
172+
CppTests PRIVATE
173+
LiteCoreREST_Static
174+
LiteCoreWebSocket
175+
)
176+
endif()

LiteCore/tests/DataFileTest.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -649,11 +649,13 @@ N_WAY_TEST_CASE_METHOD(DataFileTestFixture, "DataFile Compact", "[DataFile]") {
649649

650650
TEST_CASE("CanonicalPath") {
651651
#ifdef __EMSCRIPTEN__
652+
// clang-format off
652653
auto isMacOs = (bool)EM_ASM_INT({
653-
if ( typeof require == = 'undefined' ) return false;
654+
if ( typeof require === 'undefined' ) return false;
654655
const process = require('process');
655-
return process.platform == = 'darwin';
656+
return process.platform === 'darwin';
656657
});
658+
// clang-format on
657659
#endif
658660

659661
#ifdef _MSC_VER

LiteCore/tests/LiteCoreTest.hh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ std::string stringWithFormat(const char* format, ...) __printflike(1, 2);
5151
*/
5252
template <size_t numDigits>
5353
static std::string randomDigitString() {
54-
static_assert(1 < numDigits <= 64);
54+
static_assert(1 < numDigits && numDigits <= 64);
5555
static_assert(numDigits % 2 == 0);
5656
auto appendEightDigits = [](std::stringstream& sstr) {
5757
auto now = std::chrono::high_resolution_clock::now();

LiteCore/tests/cmake/platform_emscripten.cmake

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ function(setup_build)
55
${TOP}LiteCore/Unix
66
)
77

8+
target_compile_options(
9+
CppTests PRIVATE
10+
"-pthread"
11+
"-fwasm-exceptions"
12+
)
13+
814
target_link_options(
915
CppTests PRIVATE
1016
"-pthread"
@@ -13,7 +19,6 @@ function(setup_build)
1319
"SHELL:-s EXIT_RUNTIME=1"
1420
"SHELL:-s PTHREAD_POOL_SIZE=24"
1521
"SHELL:-s ALLOW_MEMORY_GROWTH=1"
16-
"SHELL:-s DEMANGLE_SUPPORT=1"
1722
"SHELL:-s WASM_BIGINT=1"
1823
"-lnodefs.js"
1924
"-lnoderawfs.js"

0 commit comments

Comments
 (0)