Hey Royale team, Over the last several days, I've been working on RoyaleUnit again, and I wanted to share a bit about what I've completed this week.
## New <royaleunit> Ant task Until now, we've been using the <flexunit> Ant task to run RoyaleUnit tests on our SWF output in the Ant builds. The RoyaleUnit library is similar to FlexUnit, but it's a completely new implementation that works on both SWF and JS. When I first created RoyaleUnit, I could only get SWF output successfully communicating with the <flexunit> Ant task. JS tests could be run manually, but they could not be automated in Ant yet, for technical reasons. On the SWF side, FlexUnit uses XMLSocket to communicate with the <flexunit> Ant task. That was easy enough to port over to RoyaleUnit. However, JS in the browser doesn't have a simple socket implementation that would allow it to speak the same protocol. The closest thing is WebSocket, but the <flexunit> Ant task doesn't know how to talk to WebSockets. So, I created a new <royaleunit> Ant task that can still speak XMLSocket with SWF, but also supports WebSocket for JS. Previously, you could specify "flash" or "air" for the player value in the Ant task: <royaleunit player="flash" /> <royaleunit player="air" /> I added a new one, "html", that tells the Ant task to use WebSockets. <royaleunit player="html" /> Then, you can use the swf property to specify the HTML file to launch: <royaleunit player="html" swf="bin/js-debug/index.html" /> (It was already called "swf" in <flexunit>, but maybe we should rename it or provide an alias) By default, it should use your default web browser. However, if you'd prefer a different browser, you can use the command property: <royaleunit player="html" swf="bin/js-debug/index.html" command="c:/Program Files/Mozilla Firefox/firefox.exe" /> ## Ant builds run JS tests After I got the <royaleunit> Ant task work, I updated our royale-asjs Ant builds to run both SWF and JS tests. This was interesting because it needs to launch a web browser, and there are some gotchas that I discovered. In particular, Internet Explorer always requires the user to manually click a button to allow JavaScript content to run in a local HTML file. Likewise, the first time a local file is launched in Safari, it asks to confirm if you want to open it or not. When you try to open the file again later, Safari opens it without asking, but that first time isn't ideal. With the two default browsers not really good candidates, I decided to try Chrome and Firefox. I found that both will run scripts without a prompt, but they aren't necessarily installed on everyone's systems. So, first it looks for Chrome (which is the most popular browser these days), and then it falls back to Firefox. If it can't find either one, the build fails with an error. In the case where a browser cannot be found automatically, there is the option to specify a royaleunit.browser property when running the Ant build script. You can either add it to your *env.properties* file in the root of royale-asjs, or you can specify it on the command line like this: ant -Droyaleunit.browser=path/to/browser.exe (On macOS, I think that you need to point to the native executable instead of the .app file, like /Applications/Firefox.app/Contents/MacOS/firefox) When <royaleunit> finishes running JS tests in the browser, it will automatically close the browser — except when that browser was already open before you started running the tests. In that case, it will simply open a new tab, which will remain open after the tests complete. So, it won't make you lose all of your existing tabs or anything. However, it may be annoying to have a bunch of extra tabs that you need to manually close every time that you run the build script. In that case, just like I explained above, you can use the royaleunit.browser property in env.properties or via the command line to tell the build to run JS tests in a different browser that you prefer. As I mentioned, if that browser isn't already open, the build script will exit the browser automatically after running tests. I confirmed that apacheroyaleci on Azure has Firefox installed, and at least one build has completed successfully on this server. Please let me know if this has disrupted anything. However, I think that I covered the edge cases pretty well. - Josh
