Browse Source

[tests] Restore flash tests (#10599)

* [tests] Update flash download urls

* [tests] Fix flash test downloads

- Ensure they run properly on Windows, Mac and Linux
- Clean up download code

* [CI] Run flash tests in github actions

- Install wget on windows for flash download
- Install xvfb for running flash debugger on linux ci

* [tests] Disable http windows flash test in gh actions

It fails in github actions, and was disabled on mac and linux anyway

* [tests] Update flash test after #10521

* [tests] Update readme

* [tests] Avoid warning in flash unit tests

* [tests] Fix flash test failure handling

Match it to other targets

* [tests] Remove quotes from source headers

* [tests] Compile all unit tests before eval tests

* [tests] Attempt to work around certificate error

* [tests] Revert to http for a flash download

* Cleanup

* [CI] Disable flash tests on windows 32

For some reason the debug log file does not seem to work

* [CI] Rebuild workflow
tobil4sk 3 years ago
parent
commit
0c9d011a3f

+ 16 - 2
.github/workflows/main.yml

@@ -397,7 +397,7 @@ jobs:
       fail-fast: false
       fail-fast: false
       matrix:
       matrix:
         # TODO enable lua after https://github.com/HaxeFoundation/haxe/issues/5024
         # TODO enable lua after https://github.com/HaxeFoundation/haxe/issues/5024
-        target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, neko]
+        target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, flash9, neko]
     steps:
     steps:
       - uses: actions/checkout@main
       - uses: actions/checkout@main
         with:
         with:
@@ -456,6 +456,13 @@ jobs:
           hererocks lua53 -l5.3 -rlatest
           hererocks lua53 -l5.3 -rlatest
           call lua53/bin/activate
           call lua53/bin/activate
 
 
+      - name: Install wget
+        if: matrix.target == 'flash9'
+        shell: cmd
+        run: |
+          choco install wget
+          wget --version
+
       - name: Setup haxelib
       - name: Setup haxelib
         shell: pwsh
         shell: pwsh
         run: |
         run: |
@@ -541,6 +548,13 @@ jobs:
           hererocks lua53 -l5.3 -rlatest
           hererocks lua53 -l5.3 -rlatest
           call lua53/bin/activate
           call lua53/bin/activate
 
 
+      - name: Install wget
+        if: matrix.target == 'flash9'
+        shell: cmd
+        run: |
+          choco install wget
+          wget --version
+
       - name: Setup haxelib
       - name: Setup haxelib
         shell: pwsh
         shell: pwsh
         run: |
         run: |
@@ -563,7 +577,7 @@ jobs:
     strategy:
     strategy:
       fail-fast: false
       fail-fast: false
       matrix:
       matrix:
-        target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, lua, neko] #flash9
+        target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, lua, flash9, neko]
         include:
         include:
           - target: hl
           - target: hl
             BREW_PACKAGES: ninja
             BREW_PACKAGES: ninja

+ 15 - 1
Earthfile

@@ -32,7 +32,7 @@ devcontainer:
         # Clean up
         # Clean up
         && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* /tmp/library-scripts/
         && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* /tmp/library-scripts/
 
 
-    # Setting the ENTRYPOINT to docker-init.sh will configure non-root access 
+    # Setting the ENTRYPOINT to docker-init.sh will configure non-root access
     # to the Docker socket. The script will also execute CMD as needed.
     # to the Docker socket. The script will also execute CMD as needed.
     ENTRYPOINT [ "/usr/local/share/docker-init.sh" ]
     ENTRYPOINT [ "/usr/local/share/docker-init.sh" ]
     CMD [ "sleep", "infinity" ]
     CMD [ "sleep", "infinity" ]
@@ -279,6 +279,13 @@ test-environment-cpp:
 
 
     SAVE IMAGE --cache-hint
     SAVE IMAGE --cache-hint
 
 
+test-environment-flash:
+    # apache flex requires java
+    FROM +test-environment-java
+    # requirements for running flash player
+    DO +INSTALL_PACKAGES --PACKAGES="libglib2.0-0 libfreetype6 xvfb libxcursor1 libnss3 libgtk2.0-0"
+    SAVE IMAGE --cache-hint
+
 RUN_CI:
 RUN_CI:
     COMMAND
     COMMAND
     COPY tests tests
     COPY tests tests
@@ -354,6 +361,12 @@ test-lua:
     ENV GITHUB_ACTIONS=$GITHUB_ACTIONS
     ENV GITHUB_ACTIONS=$GITHUB_ACTIONS
     DO +RUN_CI --TEST=lua
     DO +RUN_CI --TEST=lua
 
 
+test-flash:
+    FROM +test-environment-flash
+    ARG GITHUB_ACTIONS
+    ENV GITHUB_ACTIONS=$GITHUB_ACTIONS
+    DO +RUN_CI --TEST=flash9
+
 test-all:
 test-all:
     ARG TARGETPLATFORM
     ARG TARGETPLATFORM
 
 
@@ -367,6 +380,7 @@ test-all:
     BUILD +test-cpp
     BUILD +test-cpp
     BUILD +test-lua
     BUILD +test-lua
     BUILD +test-js
     BUILD +test-js
+    BUILD +test-flash
 
 
     IF [ "$TARGETPLATFORM" = "linux/amd64" ]
     IF [ "$TARGETPLATFORM" = "linux/amd64" ]
         BUILD +test-hl # FIXME: hl can't compile on arm64 (JIT issue?)
         BUILD +test-hl # FIXME: hl can't compile on arm64 (JIT issue?)

+ 7 - 0
extra/github-actions/test-windows.yml

@@ -36,6 +36,13 @@
     hererocks lua53 -l5.3 -rlatest
     hererocks lua53 -l5.3 -rlatest
     call lua53/bin/activate
     call lua53/bin/activate
 
 
+- name: Install wget
+  if: matrix.target == 'flash9'
+  shell: cmd
+  run: |
+    choco install wget
+    wget --version
+
 - name: Setup haxelib
 - name: Setup haxelib
   shell: pwsh
   shell: pwsh
   run: |
   run: |

+ 2 - 2
extra/github-actions/workflows/main.yml

@@ -172,7 +172,7 @@ jobs:
       fail-fast: false
       fail-fast: false
       matrix:
       matrix:
         # TODO enable lua after https://github.com/HaxeFoundation/haxe/issues/5024
         # TODO enable lua after https://github.com/HaxeFoundation/haxe/issues/5024
-        target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, neko]
+        target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, flash9, neko]
     steps:
     steps:
       - uses: actions/checkout@main
       - uses: actions/checkout@main
         with:
         with:
@@ -220,7 +220,7 @@ jobs:
     strategy:
     strategy:
       fail-fast: false
       fail-fast: false
       matrix:
       matrix:
-        target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, lua, neko] #flash9
+        target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, lua, flash9, neko]
         include:
         include:
           - target: hl
           - target: hl
             BREW_PACKAGES: ninja
             BREW_PACKAGES: ninja

+ 1 - 1
tests/README.md

@@ -9,7 +9,7 @@ We have a number of test suites, which are placed in their own folders in this d
 It is possible to run it in local machines too:
 It is possible to run it in local machines too:
 
 
  1. Change to this directory.
  1. Change to this directory.
- 2. Define the test target by `export TEST=$TARGET` (or `set "TEST=$TARGET"` on Windows), where `$TARGET` should be a comma-seperated list of targets, e.g. `neko,macro`. Possible targets are `macro`, `neko`, `js`, `lua`, `php`, `cpp`, `cppia`, `flash9`, `java`, `jvm`, `cs`, `python`, and `hl`.  However, `flash9` is not likely to work on local machines (TODO).
+ 2. Define the test target by `export TEST=$TARGET` (or `set "TEST=$TARGET"` on Windows), where `$TARGET` should be a comma-seperated list of targets, e.g. `neko,macro`. Possible targets are `macro`, `neko`, `js`, `lua`, `php`, `cpp`, `cppia`, `flash9`, `java`, `jvm`, `cs`, `python`, and `hl`.
  3. Run the script: `haxe RunCi.hxml`.
  3. Run the script: `haxe RunCi.hxml`.
 
 
 Note that the script will try to look for test dependencies and install them if they are not found. Look at the `getXXXDependencies` functions for the details.
 Note that the script will try to look for test dependencies and install them if they are not found. Look at the `getXXXDependencies` functions for the details.

+ 4 - 4
tests/echoServer/www/crossdomain.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <?xml version="1.0"?>
-<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
+<!DOCTYPE cross-domain-policy SYSTEM "https://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
 <cross-domain-policy>
 <cross-domain-policy>
-	<site-control permitted-cross-domain-policies="master-only" />
-	<allow-access-from domain="*" to-ports="*" secure="false"/>
+	<site-control permitted-cross-domain-policies="master-only"/>
+	<allow-access-from domain="*" to-ports="*"/>
 	<allow-http-request-headers-from domain="*" headers="*"/>
 	<allow-http-request-headers-from domain="*" headers="*"/>
-</cross-domain-policy>
+</cross-domain-policy>

+ 1 - 1
tests/runci/System.hx

@@ -9,7 +9,7 @@ using StringTools;
 class CommandFailure extends haxe.Exception {
 class CommandFailure extends haxe.Exception {
 	public final exitCode:Int;
 	public final exitCode:Int;
 	public function new(exitCode:Int = 1) {
 	public function new(exitCode:Int = 1) {
-		super("Command failed to run: " + Std.string(exitCode));
+		super("Command failed: " + Std.string(exitCode));
 		this.exitCode = exitCode;
 		this.exitCode = exitCode;
 	}
 	}
 }
 }

+ 192 - 101
tests/runci/targets/Flash.hx

@@ -11,138 +11,232 @@ import runci.System.*;
 import runci.System.CommandFailure;
 import runci.System.CommandFailure;
 import runci.Config.*;
 import runci.Config.*;
 
 
+using StringTools;
+
 class Flash {
 class Flash {
 	static final miscFlashDir = getMiscSubDir('flash');
 	static final miscFlashDir = getMiscSubDir('flash');
 
 
 	static function getLatestFPVersion():Array<Int> {
 	static function getLatestFPVersion():Array<Int> {
-		final appcast = Xml.parse(haxe.Http.requestUrl("http://fpdownload2.macromedia.com/get/flashplayer/update/current/xml/version_en_mac_pep.xml"));
+		final appcast = Xml.parse(haxe.Http.requestUrl("http://fpdownload.macromedia.com/get/flashplayer/update/current/xml/version_en_mac_pep.xml"));
 		final versionStr = new haxe.xml.Access(appcast).node.XML.node.update.att.version;
 		final versionStr = new haxe.xml.Access(appcast).node.XML.node.update.att.version;
 		return versionStr.split(",").map(Std.parseInt);
 		return versionStr.split(",").map(Std.parseInt);
 	}
 	}
 
 
-	static public function setupFlexSdk():Void {
+	static final defaultApacheMirror = "https://downloads.apache.org/";
+
+	static function getPreferredApacheMirror() {
+		return try {
+			Json.parse(Http.requestUrl("https://www.apache.org/dyn/closer.lua?as_json=1")).preferred;
+		} catch (e) {
+			failMsg('Unable to determine preferred Apache mirror. Defaulting to $defaultApacheMirror');
+			defaultApacheMirror;
+		}
+	}
+
+	static function downloadFlexSdk(version:String, sdkPath:String):Void {
+		final apacheMirror = getPreferredApacheMirror();
+		if (systemName == "Windows") {
+			final zipName = 'apache-flex-sdk-${version}-bin.zip';
+			runNetworkCommand("wget", ["-nv", '${apacheMirror}/flex/${version}/binaries/$zipName', "-O", getDownloadPath() + '/$zipName']);
+			runCommand("7z", ["x", getDownloadPath() + '/$zipName', "-o" + sdkPath, "-y"]);
+		} else {
+			final tarName = 'apache-flex-sdk-${version}-bin.tar.gz';
+			runNetworkCommand("wget", ["-nv", '${apacheMirror}/flex/${version}/binaries/$tarName', "-O", getDownloadPath() + '/$tarName']);
+			runCommand("tar", ["-xf", getDownloadPath() + '/$tarName', "-C", getInstallPath()]);
+		}
+	}
+
+	static function setupFlexSdk():Void {
 		if (commandSucceed("mxmlc", ["--version"])) {
 		if (commandSucceed("mxmlc", ["--version"])) {
 			infoMsg('mxmlc has already been installed.');
 			infoMsg('mxmlc has already been installed.');
+			return;
+		}
+		// download flex sdk
+		final flexVersion = "4.16.0";
+		final flexSdkPath = Path.normalize(getInstallPath() + '/apache-flex-sdk-${flexVersion}-bin');
+
+		if (FileSystem.exists(flexSdkPath)) {
+			infoMsg('Flex SDK found at $flexSdkPath');
+		} else {
+			downloadFlexSdk(flexVersion, flexSdkPath);
+		}
+		addToPATH(flexSdkPath + "/bin");
+
+		// download playerglobal.swc
+		final playerGlobalSwcFolder = flexSdkPath + "/player";
+		FileSystem.createDirectory(playerGlobalSwcFolder + "/11.1");
+		final flashVersion = getLatestFPVersion();
+
+		final playerGlobalSwcPath = playerGlobalSwcFolder + "/11.1/playerglobal.swc";
+
+		if (FileSystem.exists(playerGlobalSwcPath)) {
+			infoMsg('playerglobal.swc found at $playerGlobalSwcPath');
 		} else {
 		} else {
-			var apacheMirror = Json.parse(Http.requestUrl("http://www.apache.org/dyn/closer.lua?as_json=1")).preferred;
-			var flexVersion = "4.16.0";
-			runNetworkCommand("wget", ["-nv", '${apacheMirror}/flex/${flexVersion}/binaries/apache-flex-sdk-${flexVersion}-bin.tar.gz']);
-			runCommand("tar", ["-xf", 'apache-flex-sdk-${flexVersion}-bin.tar.gz', "-C", getDownloadPath()]);
-			var flexsdkPath = getDownloadPath() + '/apache-flex-sdk-${flexVersion}-bin';
-			addToPATH(flexsdkPath + "/bin");
-			var playerglobalswcFolder = flexsdkPath + "/player";
-			FileSystem.createDirectory(playerglobalswcFolder + "/11.1");
-			var flashVersion = runci.targets.Flash.getLatestFPVersion();
-			runNetworkCommand("wget", ["-nv", 'http://download.macromedia.com/get/flashplayer/updaters/${flashVersion[0]}/playerglobal${flashVersion[0]}_${flashVersion[1]}.swc', "-O", playerglobalswcFolder + "/11.1/playerglobal.swc"]);
-			File.saveContent(flexsdkPath + "/env.properties", 'env.PLAYERGLOBAL_HOME=$playerglobalswcFolder');
-			runCommand("mxmlc", ["--version"]);
+			runNetworkCommand("wget", [
+				"-nv",
+				'https://fpdownload.macromedia.com/get/flashplayer/updaters/${flashVersion[0]}/playerglobal${flashVersion[0]}_${flashVersion[1]}.swc',
+				"-O",
+				playerGlobalSwcPath
+			]);
+
 		}
 		}
+		// set playerglobal.swc
+		File.saveContent(flexSdkPath + "/env.properties", 'env.PLAYERGLOBAL_HOME=$playerGlobalSwcFolder');
+
+		// ensure flex sdk is working
+		runCommand("mxmlc", ["--version"]);
 	}
 	}
 
 
-	static public var playerCmd:String;
+	static var playerLocation:String;
+	static var flashlogPath:String;
 
 
-	static public function setupFlashPlayerDebugger():Void {
-		var mmcfgPath = switch (systemName) {
-			case "Linux":
-				Sys.getEnv("HOME") + "/mm.cfg";
-			case "Mac":
-				"/Library/Application Support/Macromedia/mm.cfg";
+	static function createConfigFile(location:String):Void {
+		final mmcfgPath = location + "/mm.cfg";
+		if (!FileSystem.exists(mmcfgPath))
+			File.saveContent(mmcfgPath, "ErrorReportingEnable=1\nTraceOutputFileEnable=1");
+	}
+
+	static function setupFlashDebuggerMac():Void {
+		playerLocation = getInstallPath() + "/Flash Player.app";
+		flashlogPath = Sys.getEnv("HOME") + "/Library/Preferences/Macromedia/Flash Player/Logs/flashlog.txt";
+
+		if (FileSystem.exists(playerLocation))
+			infoMsg('Flash player found at $playerLocation');
+		else {
+			final majorVersion = getLatestFPVersion()[0];
+			final packageName = "flashplayer_32_sa_debug.dmg";
+			runNetworkCommand("wget", [
+				"-nv",
+				'https://fpdownload.macromedia.com/pub/flashplayer/updaters/${majorVersion}/$packageName',
+				"-O",
+				getDownloadPath() + '/$packageName'
+			]);
+			runCommand("hdiutil", ["attach", getDownloadPath() + '/$packageName']);
+
+			runCommand("cp", ["-R", "/Volumes/Flash Player/Flash Player.app", getInstallPath()]);
+			runCommand("hdiutil", ["detach", "/Volumes/Flash Player"]);
+
+			// Disable the "application downloaded from Internet" warning
+			runCommand("xattr", ["-d", "-r", "com.apple.quarantine", playerLocation]);
+		}
+
+		final configLocation = "/Library/Application Support/Macromedia";
+		if (!FileSystem.exists(configLocation)) {
+			runCommand("sudo", ["mkdir", "-p", configLocation]);
+			runCommand("sudo", ["chmod", "a+w", configLocation]);
+		}
+		createConfigFile(configLocation);
+
+		runCommand("open", ["-a", playerLocation, "-v"]);
+	}
+
+	static function setupFlashDebuggerLinux():Void {
+		flashlogPath = Sys.getEnv("HOME") + "/.macromedia/Flash_Player/Logs/flashlog.txt";
+
+		final debuggerName = "flashplayerdebugger";
+		playerLocation = Path.join([getInstallPath(), debuggerName]);
+		if (Sys.command("type", [debuggerName]) == 0) {
+			playerLocation = debuggerName;
+			infoMsg('Using $debuggerName from PATH');
+		} else if(FileSystem.exists(playerLocation)) {
+			infoMsg('Flash player found at $playerLocation');
+		} else {
+			Linux.requireAptPackages(["libglib2.0-0", "libfreetype6"]);
+			final majorVersion = getLatestFPVersion()[0];
+			final tarFileName = 'flash_player_sa_linux_debug.x86_64.tar.gz';
+			runNetworkCommand("wget", [
+				"-nv",
+				'https://fpdownload.macromedia.com/pub/flashplayer/updaters/${majorVersion}/$tarFileName',
+				"-O",
+				getDownloadPath() + '/$tarFileName'
+			]);
+			runCommand("tar", ["-xf", getDownloadPath() + '/$tarFileName', "-C", getInstallPath()]);
+		}
+
+		createConfigFile(Sys.getEnv("HOME"));
+
+		// ensure the debugger works
+		switch (ci) {
+			case GithubActions:
+				runCommand("xvfb-run", ["-a", playerLocation, "-v"]);
 			case _:
 			case _:
-				throw "unsupported system";
+				runCommand(playerLocation, ["-v"]);
 		}
 		}
+	}
+
+	static function setupFlashDebuggerWindows():Void {
+		flashlogPath = Sys.getEnv("APPDATA") + "\\Macromedia\\Flash Player\\Logs\\flashlog.txt";
+		final exeName = "flashplayer_32_sa_debug.exe";
+		playerLocation = Path.join([getInstallPath(), exeName]);
 
 
+		final majorVersion = getLatestFPVersion()[0];
+		if (FileSystem.exists(playerLocation))
+			infoMsg('Flash player found at $playerLocation');
+		else
+			runNetworkCommand("wget", [
+				"-nv",
+				'https://fpdownload.macromedia.com/pub/flashplayer/updaters/${majorVersion}/$exeName',
+				"-O",
+				playerLocation
+			]);
+
+		createConfigFile(Sys.getEnv("HOMEDRIVE") + "\\" + Sys.getEnv("HOMEPATH"));
+	}
+
+	static function setupFlashPlayerDebugger():Void {
 		switch (systemName) {
 		switch (systemName) {
 			case "Linux":
 			case "Linux":
-				playerCmd = "flashplayerdebugger";
-				if(Sys.command("type", [playerCmd]) != 0) {
-					Linux.requireAptPackages([
-						"libglib2.0-0", "libfreetype6"
-					]);
-					var majorVersion = getLatestFPVersion()[0];
-					runNetworkCommand("wget", ["-nv", 'http://fpdownload.macromedia.com/pub/flashplayer/updaters/${majorVersion}/flash_player_sa_linux_debug.x86_64.tar.gz']);
-					runCommand("tar", ["-xf", "flash_player_sa_linux_debug.x86_64.tar.gz", "-C", getDownloadPath()]);
-					playerCmd = Path.join([getDownloadPath(), "flashplayerdebugger"]);
-				}
-				if (!FileSystem.exists(mmcfgPath)) {
-					File.saveContent(mmcfgPath, "ErrorReportingEnable=1\nTraceOutputFileEnable=1");
-				}
-				switch (ci) {
-					case GithubActions:
-						runCommand("xvfb-run", ["-a", playerCmd, "-v"]);
-					case _:
-						runCommand(playerCmd, ["-v"]);
-				}
+				setupFlashDebuggerLinux();
 			case "Mac":
 			case "Mac":
-				if (commandResult("brew", ["cask", "list", "flash-player-debugger"]).exitCode == 0) {
-					return;
-				}
-				attemptCommand("brew", ["uninstall", "[email protected]"]);
-				attemptCommand("brew", ["uninstall", "[email protected]"]);
-				attemptCommand("brew", ["untap", "local/openssl"]);
-				attemptCommand("brew", ["untap", "local/python2"]);
-				runCommand("brew", ["update"]);
-				runCommand("brew", ["install", "--cask", "flash-player-debugger"]);
-
-				// Disable the "application downloaded from Internet" warning
-				runCommand("xattr", ["-d", "-r", "com.apple.quarantine", "/Applications/Flash Player Debugger.app"]);
-
-				var dir = Path.directory(mmcfgPath);
-				if (!FileSystem.exists(dir)) {
-					runCommand("sudo", ["mkdir", "-p", dir]);
-					runCommand("sudo", ["chmod", "a+w", dir]);
-				}
-				if (!FileSystem.exists(mmcfgPath)) {
-					File.saveContent(mmcfgPath, "ErrorReportingEnable=1\nTraceOutputFileEnable=1");
-				}
+				setupFlashDebuggerMac();
+			case "Windows":
+				setupFlashDebuggerWindows();
+			case _:
+				throw "unsupported system";
 		}
 		}
 	}
 	}
 
 
 	/**
 	/**
 		Run a Flash swf file.
 		Run a Flash swf file.
-		Return whether the test is successful or not.
-		It detemines the test result by reading the flashlog.txt, looking for "SUCCESS: true".
+		Throws `CommandFailure` if unsuccessful.
+		It detemines the test result by reading the flashlog.txt, looking for "success: true".
 	*/
 	*/
-	static public function runFlash(swf:String):Bool {
+	static function runFlash(swf:String):Void {
 		swf = FileSystem.fullPath(swf);
 		swf = FileSystem.fullPath(swf);
-		Sys.println('going to run $swf');
-		switch (systemName) {
-			case "Linux":
-				switch (ci) {
-					case GithubActions:
-						new Process("xvfb-run", ["-a", playerCmd, swf]);
-					case _:
-						new Process(playerCmd, [swf]);
-				}
-			case "Mac":
-				Sys.command("open", ["-a", "/Applications/Flash Player Debugger.app", swf]);
-		}
+		infoMsg('Running .swf file: $swf');
 
 
-		//wait a little until flashlog.txt is created
-		var flashlogPath = switch (systemName) {
-			case "Linux":
-				Sys.getEnv("HOME") + "/.macromedia/Flash_Player/Logs/flashlog.txt";
+		final runProcess = switch (systemName) {
+			case "Linux" if (ci == GithubActions):
+				new Process("xvfb-run", ["-a", playerLocation, swf]);
 			case "Mac":
 			case "Mac":
-				Sys.getEnv("HOME") + "/Library/Preferences/Macromedia/Flash Player/Logs/flashlog.txt";
-			case _:
-				throw "unsupported system";
+				new Process("open", ["-a", playerLocation, swf]);
+			default:
+				new Process(playerLocation, [swf]);
 		}
 		}
 
 
-		for (t in 0...5) {
-			runCommand("sleep", ["2"]);
+		// wait a little until flashlog.txt is created
+		for (_ in 0...5) {
+			infoMsg("Waiting 2 seconds for flash log file...");
+			Sys.sleep(2);
 			if (FileSystem.exists(flashlogPath))
 			if (FileSystem.exists(flashlogPath))
 				break;
 				break;
 		}
 		}
 		if (!FileSystem.exists(flashlogPath)) {
 		if (!FileSystem.exists(flashlogPath)) {
 			failMsg('$flashlogPath not found.');
 			failMsg('$flashlogPath not found.');
-			return false;
+			throw new CommandFailure();
 		}
 		}
 
 
-		//read flashlog.txt continously
-		var traceProcess = new Process("tail", ["-f", flashlogPath]);
+		// read flashlog.txt continously
+		final traceProcess = switch (systemName) {
+			case "Windows":
+				new Process("powershell", ["-command", '& {Get-Content "$flashlogPath" -Wait -Tail 1}']);
+			default:
+				new Process("tail", ["-f", flashlogPath]);
+		}
 		var success = false;
 		var success = false;
 		while (true) {
 		while (true) {
 			try {
 			try {
-				var line = traceProcess.stdout.readLine();
+				final line = traceProcess.stdout.readLine();
 				if (line.indexOf("success: ") >= 0) {
 				if (line.indexOf("success: ") >= 0) {
 					success = line.indexOf("success: true") >= 0;
 					success = line.indexOf("success: true") >= 0;
 					break;
 					break;
@@ -151,30 +245,27 @@ class Flash {
 				break;
 				break;
 			}
 			}
 		}
 		}
+		runProcess.kill();
+		runProcess.close();
+
 		traceProcess.kill();
 		traceProcess.kill();
 		traceProcess.close();
 		traceProcess.close();
-		Sys.command("cat", [flashlogPath]);
-		return success;
+		final cmd = (systemName == "Windows") ? "type" : "cat";
+		Sys.command(cmd, [flashlogPath]);
+		if (!success)
+			throw new CommandFailure();
 	}
 	}
 
 
 	static public function run(args:Array<String>) {
 	static public function run(args:Array<String>) {
 		setupFlashPlayerDebugger();
 		setupFlashPlayerDebugger();
 		setupFlexSdk();
 		setupFlexSdk();
-		var success = true;
 		for (argsVariant in [[], ["--swf-version", "32"]]) {
 		for (argsVariant in [[], ["--swf-version", "32"]]) {
 			runCommand("haxe", ["compile-flash9.hxml", "-D", "fdb", "-D", "dump", "-D", "dump_ignore_var_ids"].concat(args).concat(argsVariant));
 			runCommand("haxe", ["compile-flash9.hxml", "-D", "fdb", "-D", "dump", "-D", "dump_ignore_var_ids"].concat(args).concat(argsVariant));
-			var runSuccess = runFlash("bin/unit9.swf");
-			if (!runSuccess) {
-				success = false;
-			}
+			runFlash("bin/unit9.swf");
 		}
 		}
 
 
 		changeDirectory(miscFlashDir);
 		changeDirectory(miscFlashDir);
 		runCommand("haxe", ["run.hxml"]);
 		runCommand("haxe", ["run.hxml"]);
-
-		if (!success)
-			throw new CommandFailure();
 	}
 	}
 
 
-
 }
 }

+ 1 - 1
tests/unit/compile-each.hxml

@@ -1,4 +1,4 @@
--D source-header=""
+-D source-header=
 --debug
 --debug
 -p src
 -p src
 # -cp "C:\Program Files\The Haxe Effect\src/dev/null"
 # -cp "C:\Program Files\The Haxe Effect\src/dev/null"

+ 1 - 1
tests/unit/compile.hxml

@@ -21,5 +21,5 @@ compile-java-runner.hxml
 --next compile-java.hxml
 --next compile-java.hxml
 --next compile-cs.hxml
 --next compile-cs.hxml
 --next compile-python.hxml
 --next compile-python.hxml
---next compile-macro.hxml
 --next compile-cs-unsafe.hxml
 --next compile-cs-unsafe.hxml
+--next compile-macro.hxml

+ 1 - 1
tests/unit/src/unit/TestHttp.hx

@@ -27,7 +27,7 @@ class TestHttp extends Test {
 			return;
 			return;
 		}
 		}
 		test();
 		test();
-		#elseif (github && (hl || java || (flash && (Linux || Mac)) || (cs && Windows)))
+		#elseif (github && (hl || java || (flash && (Linux || Mac || Windows)) || (cs && Windows)))
 		noAssert();
 		noAssert();
 		async.done();
 		async.done();
 		return;
 		return;

+ 0 - 11
tests/unit/src/unit/issues/Issue8218.hx

@@ -26,17 +26,6 @@ private class Child extends Lib2 {
 		test.eq(f(), "hello");
 		test.eq(f(), "hello");
 		test.eq(call(f), "hello");
 		test.eq(call(f), "hello");
 
 
-		// super. protected access
-		test.eq(super.x, 50);
-		super.x = 55;
-		test.eq(super.x, 55);
-
-		test.eq(super.i, 10);
-		super.i = 15;
-		test.eq(super.i, 15);
-
-		test.eq(super.f(), "hello");
-
 		// static protected access
 		// static protected access
 		test.eq(Lib.sx, 42);
 		test.eq(Lib.sx, 42);
 		Lib.sx = 50;
 		Lib.sx = 50;