97 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			97 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| 
								 | 
							
								package;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import utest.Runner;
							 | 
						||
| 
								 | 
							
								import utest.ui.Report;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if instrument
							 | 
						||
| 
								 | 
							
								import instrument.Instrumentation;
							 | 
						||
| 
								 | 
							
								#end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Main {
							 | 
						||
| 
								 | 
							
									static function main() {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										kha.System.start({title: "Aura Unit Tests", width: 1024, height: 768}, (window: kha.Window) -> {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											replaceConsoleFunctions();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											#if (AURA_ASSERT_LEVEL!="Debug")
							 | 
						||
| 
								 | 
							
												trace("Warning: Running tests below highest assertion level, some tests might erroneously succeed");
							 | 
						||
| 
								 | 
							
											#end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											kha.Assets.loadEverything(() -> {
							 | 
						||
| 
								 | 
							
												kha.audio2.Audio.samplesPerSecond = 44100;
							 | 
						||
| 
								 | 
							
												aura.Aura.init();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												var runner = new Runner();
							 | 
						||
| 
								 | 
							
												runner.addCases(auratests, true);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												// addCases() only allows one class per file (https://github.com/haxe-utest/utest/blob/f759c0aa257aa723b3dd607cf7cb53d16194d13f/src/utest/Runner.hx#L171),
							 | 
						||
| 
								 | 
							
												// so we manually add classes here where this is not the case
							 | 
						||
| 
								 | 
							
												runner.addCase(new auratests.dsp.TestSparseConvolver.TestSparseImpulseBuffer());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												runner.onComplete.add((_) -> {
							 | 
						||
| 
								 | 
							
													#if instrument
							 | 
						||
| 
								 | 
							
														Instrumentation.endInstrumentation(Coverage);
							 | 
						||
| 
								 | 
							
													#end
							 | 
						||
| 
								 | 
							
												});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												Report.create(runner);
							 | 
						||
| 
								 | 
							
												// new utest.ui.text.PrintReport(runner);
							 | 
						||
| 
								 | 
							
												runner.run();
							 | 
						||
| 
								 | 
							
											});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
										In Kha applications, `console.log()` calls called by `trace` are called
							 | 
						||
| 
								 | 
							
										from within the renderer process which prevents them from showing up in
							 | 
						||
| 
								 | 
							
										the console (instead they only show up in the devtools console).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										A possible workaround is to run electron with `--enable-logging`,
							 | 
						||
| 
								 | 
							
										but this will show the traces in a bunch of irrelevant and noisy debug
							 | 
						||
| 
								 | 
							
										information and on Windows a bunch of terminal windows are opened if
							 | 
						||
| 
								 | 
							
										electron is not directly called from the shell. So instead, we send
							 | 
						||
| 
								 | 
							
										traces to the main thread and then log them there.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										**See:**
							 | 
						||
| 
								 | 
							
										- Log in main process/renderer process:
							 | 
						||
| 
								 | 
							
											- https://stackoverflow.com/a/31759944/9985959
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										- Overriding console functions:
							 | 
						||
| 
								 | 
							
											- https://stackoverflow.com/a/30197398/9985959
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										- Electron opening multiple empty terminals on Windows:
							 | 
						||
| 
								 | 
							
											- https://github.com/electron/electron/issues/3846
							 | 
						||
| 
								 | 
							
											- https://github.com/electron/electron/issues/4582
							 | 
						||
| 
								 | 
							
											- https://github.com/electron-userland/spectron/issues/60#issuecomment-482070086
							 | 
						||
| 
								 | 
							
									**/
							 | 
						||
| 
								 | 
							
									static function replaceConsoleFunctions() {
							 | 
						||
| 
								 | 
							
										#if kha_debug_html5
							 | 
						||
| 
								 | 
							
											final oldConsole: Dynamic = js.Syntax.code("window.console");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											function log(text: Dynamic) {
							 | 
						||
| 
								 | 
							
												oldConsole.log(text);
							 | 
						||
| 
								 | 
							
												js.Syntax.code("window.electron.logToMainProcess('log', {0})", text);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											function info(text: Dynamic) {
							 | 
						||
| 
								 | 
							
												oldConsole.info(text);
							 | 
						||
| 
								 | 
							
												js.Syntax.code("window.electron.logToMainProcess('info', {0})", text);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											function warn(text: Dynamic) {
							 | 
						||
| 
								 | 
							
												oldConsole.warn(text);
							 | 
						||
| 
								 | 
							
												js.Syntax.code("window.electron.logToMainProcess('warn', {0})", text);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											function error(text: Dynamic) {
							 | 
						||
| 
								 | 
							
												oldConsole.error(text);
							 | 
						||
| 
								 | 
							
												js.Syntax.code("window.electron.logToMainProcess('error', {0})", text);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											js.Syntax.code("window.console = {log: {0}, info: {1}, warn: {2}, error: {3}}", log, info, warn, error);
							 | 
						||
| 
								 | 
							
										#end
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |