-
Notifications
You must be signed in to change notification settings - Fork 31
Run Emscripten tests in a browser #569
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -542,6 +542,77 @@ jobs: | |
fi | ||
|
||
emmake make -j ${{ env.ncpus }} check-cppinterop | ||
cd ./unittests/CppInterOp/ | ||
# Install browsers, and run Emscripten tests in them | ||
os="${{ matrix.os }}" | ||
if [[ "${os}" == "macos"* ]]; then | ||
# Install Firefox | ||
wget "https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US" -O Firefox-latest.dmg | ||
hdiutil attach Firefox-latest.dmg | ||
cp -r /Volumes/Firefox/Firefox.app $PWD | ||
hdiutil detach /Volumes/Firefox | ||
cd ./Firefox.app/Contents/MacOS/ | ||
export PATH="$PWD:$PATH" | ||
cd - | ||
|
||
# Install Google Chrome | ||
wget https://dl.google.com/chrome/mac/stable/accept_tos%3Dhttps%253A%252F%252Fwww.google.com%252Fintl%252Fen_ph%252Fchrome%252Fterms%252F%26_and_accept_tos%3Dhttps%253A%252F%252Fpolicies.google.com%252Fterms/googlechrome.pkg | ||
pkgutil --expand-full googlechrome.pkg google-chrome | ||
cd ./google-chrome/GoogleChrome.pkg/Payload/Google\ Chrome.app/Contents/MacOS/ | ||
export PATH="$PWD:$PATH" | ||
cd - | ||
|
||
# Run tests in browsers | ||
echo "Running CppInterOpTests in Firefox" | ||
emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. emrun allows us to run the created html file
|
||
echo "Running DynamicLibraryManagerTests in Firefox" | ||
emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html | ||
echo "Running CppInterOpTests in Google Chrome" | ||
emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. In the case of Chrome we have the extra |
||
echo "Running DynamicLibraryManagerTests in Google Chrome" | ||
emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html | ||
else | ||
export ARCHITECHURE=$(uname -m) | ||
if [[ "$ARCHITECHURE" != "aarch64" ]]; then | ||
# Install Google Chrome | ||
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb | ||
dpkg-deb -x google-chrome-stable_current_amd64.deb $PWD/chrome | ||
cd ./chrome/opt/google/chrome/ | ||
export PATH="$PWD:$PATH" | ||
cd - | ||
|
||
# Install Firefox | ||
wget https://ftp.mozilla.org/pub/firefox/releases/138.0.1/linux-x86_64/en-GB/firefox-138.0.1.tar.xz | ||
tar -xJf firefox-138.0.1.tar.xz | ||
cd ./firefox | ||
export PATH="$PWD:$PATH" | ||
cd - | ||
|
||
# Run tests in browsers | ||
echo "Running CppInterOpTests in Firefox" | ||
emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html | ||
echo "Running DynamicLibraryManagerTests in Firefox" | ||
emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html | ||
echo "Running CppInterOpTests in Google Chrome" | ||
emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html | ||
echo "Running DynamicLibraryManagerTests in Google Chrome" | ||
emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html | ||
else | ||
# Install Firefox | ||
wget https://ftp.mozilla.org/pub/firefox/releases/138.0.1/linux-aarch64/en-GB/firefox-138.0.1.tar.xz | ||
tar -xJf firefox-138.0.1.tar.xz | ||
cd ./firefox | ||
export PATH="$PWD:$PATH" | ||
cd - | ||
|
||
# Run tests in browsers | ||
echo "Running CppInterOpTests in Firefox" | ||
emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html | ||
echo "Running DynamicLibraryManagerTests in Firefox" | ||
emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html | ||
fi | ||
fi | ||
cd ../.. | ||
emmake make -j ${{ env.ncpus }} install | ||
cd .. | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -34,7 +34,11 @@ if(WIN32) | |
else() | ||
target_link_libraries(${name} PRIVATE ${ARG_LIBRARIES} ${gtest_libs} ${link_pthreads_lib}) | ||
endif() | ||
if(EMSCRIPTEN) | ||
add_test(NAME cppinterop-${name} COMMAND $ENV{EMSDK_NODE} ${name}.js) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Without this cmake will try and get node to run the html file. This guarantees that it runs the js file, and uses emsdks node. |
||
else() | ||
add_test(NAME cppinterop-${name} COMMAND ${name}) | ||
endif() | ||
set_tests_properties(cppinterop-${name} PROPERTIES | ||
TIMEOUT "${TIMEOUT_VALUE}" | ||
ENVIRONMENT "CPLUS_INCLUDE_PATH=${CMAKE_BINARY_DIR}/etc" | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
if (EMSCRIPTEN) | ||
set(CMAKE_EXECUTABLE_SUFFIX ".html") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So that we create a html file, as well as the javascript file. |
||
# Omitting CUDATest.cpp since Emscripten build currently has no GPU support | ||
# For Emscripten builds linking to gtest_main will not suffice for gtest to run | ||
# the tests and an explictly main.cpp is needed | ||
|
@@ -50,6 +51,7 @@ if(EMSCRIPTEN) | |
PUBLIC "SHELL: -s STACK_SIZE=32mb" | ||
PUBLIC "SHELL: -s INITIAL_MEMORY=128mb" | ||
PUBLIC "SHELL: --preload-file ${SYSROOT_PATH}/include@/include" | ||
PUBLIC "SHELL: --emrun" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
The above is taken from emruns documentation https://emscripten.org/docs/compiling/Running-html-files-with-emrun.html |
||
) | ||
endif() | ||
|
||
|
@@ -97,6 +99,7 @@ if(EMSCRIPTEN) | |
PUBLIC "SHELL: -s STACK_SIZE=32mb" | ||
PUBLIC "SHELL: -s INITIAL_MEMORY=128mb" | ||
PUBLIC "SHELL: --preload-file ${SYSROOT_PATH}/include@/include" | ||
PUBLIC "SHELL: --emrun" | ||
) | ||
endif() | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The reason we install a fresh install of Firefox and Chome is to follow what is done in the Emscripten repo (for example here with Firefox https://github.com/emscripten-core/emscripten/blob/38e16464cffc8f886364fe4919a712131a4c9456/.circleci/config.yml#L363 ). It has the added advantage by not using the users installed versions of these browsers (if they have them installed), that there are no add ons, etc that could be causing issues with the tests running. I have made the instructions, such that a developer without admin privileges on there machine can install them.