Hey all, Recently, I committed some changes to the RoyaleUnit Ant task to make it more robust and powerful. This is in response to my recent discovery that the RoyaleUnit testing in our royale-asjs build seems to have become less reliable over time since I originally set things up.
In particular, I found that Chrome was failing on certain tests because of security restrictions with file:/// URLs (I guess that Chrome was either not as strict in the past, or we have added newer tests that are accessing restricted APIs that we weren't using in the past). Additionally, I was seeing the occasional intermittent communication failure in Firefox, for no obvious reason. To remedy this situation, I've integrated Playwright into the RoyaleUnit Ant task. https://playwright.dev If you're not aware, Playwright is a library that enables automated testing in Chromium, Firefox, and Webkit. Playwright works on macOS, Linux, and Windows, and it has a powerful programmatic API (available for a number of languages... we're using the Java version). By using Playwright, we get some interesting enhancements to our JS testing: - Headless - No browser windows popping up during long builds - Doesn't use your installed browsers - Won't litter your default browser with a bunch of tabs that don't auto-close - No risk of being affected by customized extensions/add-ons - It automatically sets up the correct security sandbox - No arcane combinations of command line arguments or about:config tweaks to get file:/// URLs working as we need - The browser debugging console (trace/console.log) messages appear in the terminal output of the build - Easier to see what went wrong if an exception is thrown during tests The "player" attribute of the <royaleunit/> task may now be set to "chromium", "firefox", or "webkit" to use a specific browser. RoyaleUnit will keep supporting the "html" value for backwards compatibility, and it's now an alias for "chromium". You can also use "html" when you want to use a custom browser executable instead of Playwright. Example of <royaleunit/> in an Ant script that runs JS tests in WebKit/Safari: <royaleunit player="webkit" swf="${basedir}/target/bin/js-release/index.html"/> > Aside: Yes, the attribute name for the file/URL is still "swf". That's a legacy from FlexUnit. We could add an alias, but it hasn't been a priority. I have updated the royale-asjs build to use Playwright, instead of trying to detect which browsers are installed locally. That's not the only change to the RoyaleUnit Ant task that I've made recently, though. First, I should specify it's still possible to specify a custom royaleunit.browser property in your env.properties file for the royale-asjs Ant build. If you have that set up already, you don't need to change anything. It should keep working the same as before, and your build won't use Playwright when royaleunit.browser is defined. However, if you would like to switch to Playwright for local builds, you can just comment out or remove the royaleunit.browser property customization from your env.properties file (or from the -Droyaleunit.browser command line arguments, or any other place you might have set it). If you'd like to keep using a custom browser, you may be interested to know that the RoyaleUnit Ant task now supports custom arguments when you specify an executable command. Example below: <royaleunit player="html" swf="${basedir}/target/bin/js-release/index.html" command="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" commandArgs="--no-sandbox --user-data-dir=custom_chrome_profile --no-first-run"/> > Aside: The commandArgs above should work well to get tests to pass in Chrome with file:/// URLs, even without Playwright. Other browsers may require different commandArgs. I updated the royale-asjs build to optionally support both the royaleunit.browser property along with a new royaleunit.browser.args property, which you can specify in env.properties, if you prefer not to rely on Playwright. Example below (on macOS): # in env.properties royaleunit.browser=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome royaleunit.browser.args=--no-sandbox --user-data-dir=/Users/joshtynjala/Development/apache/royaleunit_chrome_profile --no-first-run Please let me know if anything seems broken. I've confirmed that Playwright tests are working on CI builds. It's also working on both my local macOS and Windows machines. -- Josh Tynjala Bowler Hat LLC <https://bowlerhat.dev>