@@ -153,17 +153,18 @@ @"\nRuntime error: Unhandled exception:\n%@\n", e]; OFString *backtrace = [OFString stringWithFormat: @"\nBacktrace:\n %@\n\n", [[e backtrace] componentsJoinedByString: @"\n "]]; - [delegate outputString: string - inColor: RED]; - [delegate outputString: backtrace - inColor: RED]; + of_stdout.foregroundColor = [OFColor red]; + [of_stdout writeString: string]; + [of_stdout writeString: backtrace]; + # if defined(OF_WII) - [delegate outputString: @"Press home button to exit!\n" - inColor: NO_COLOR]; + [of_stdout reset]; + [of_stdout writeString: @"Press home button to exit!"]; + for (;;) { WPAD_ScanPads(); if (WPAD_ButtonsDown(0) & WPAD_BUTTON_HOME) [OFApplication terminateWithStatus: 1]; @@ -171,21 +172,23 @@ VIDEO_WaitVSync(); } # elif defined(OF_PSP) sceKernelSleepThreadCB(); # elif defined(OF_NINTENDO_DS) - [delegate outputString: @"Press start button to exit!" - inColor: NO_COLOR]; + [of_stdout reset]; + [of_stdout writeString: @"Press start button to exit!"]; + for (;;) { swiWaitForVBlank(); scanKeys(); if (keysDown() & KEY_START) [OFApplication terminateWithStatus: 1]; } # elif defined(OF_NINTENDO_3DS) - [delegate outputString: @"Press start button to exit!" - inColor: NO_COLOR]; + [of_stdout reset]; + [of_stdout writeString: @"Press start button to exit!"]; + for (;;) { hidScanInput(); if (hidKeysDown() & KEY_START) [OFApplication terminateWithStatus: 1]; @@ -201,110 +204,47 @@ [[TestsAppDelegate alloc] init]); #endif } @implementation TestsAppDelegate -- (void)outputString: (OFString *)str - inColor: (int)color -{ -#if defined(OF_PSP) - char space = ' '; - int y = pspDebugScreenGetY(); - - pspDebugScreenSetXY(0, y); - for (uint8_t i = 0; i < 68; i++) - pspDebugScreenPrintData(&space, 1); - - switch (color) { - case NO_COLOR: - pspDebugScreenSetTextColor(0xFFFFFF); - break; - case RED: - pspDebugScreenSetTextColor(0x0000FF); - break; - case GREEN: - pspDebugScreenSetTextColor(0x00FF00); - break; - case YELLOW: - pspDebugScreenSetTextColor(0x00FFFF); - break; - } - - pspDebugScreenSetXY(0, y); - pspDebugScreenPrintData(str.UTF8String, str.UTF8StringLength); -#elif defined(STDOUT) - switch (color) { - case NO_COLOR: - [of_stdout writeString: @"\r\033[K"]; -# if defined(OF_WII) || defined(OF_NINTENDO_DS) - [of_stdout writeString: @"\033[37m"]; -# endif - break; - case RED: - [of_stdout writeString: @"\r\033[K\033[31;1m"]; - break; - case GREEN: - [of_stdout writeString: @"\r\033[K\033[32;1m"]; - break; - case YELLOW: - [of_stdout writeString: @"\r\033[K\033[33;1m"]; - break; - } - - [of_stdout writeString: str]; - [of_stdout writeString: @"\033[m"]; -#elif defined(STDOUT_SIMPLE) - [of_stdout writeString: str]; -#else -# error No output method! -#endif -} - - (void)outputTesting: (OFString *)test inModule: (OFString *)module { - void *pool = objc_autoreleasePoolPush(); #ifndef STDOUT_SIMPLE - [self outputString: [OFString stringWithFormat: @"[%@] %@: testing...", - module, test] - inColor: YELLOW]; + of_stdout.foregroundColor = [OFColor yellow]; + [of_stdout writeFormat: @"[%@] %@: testing...", module, test]; #else - [self outputString: [OFString stringWithFormat: @"[%@] %@: ", - module, test] - inColor: YELLOW]; + [of_stdout writeFormat: @"[%@] %@: ", module, test]; #endif - objc_autoreleasePoolPop(pool); } - (void)outputSuccess: (OFString *)test inModule: (OFString *)module { #ifndef STDOUT_SIMPLE - void *pool = objc_autoreleasePoolPush(); - [self outputString: [OFString stringWithFormat: @"[%@] %@: ok\n", - module, test] - inColor: GREEN]; - objc_autoreleasePoolPop(pool); + of_stdout.cursorColumn = 0; + of_stdout.foregroundColor = [OFColor lime]; + [of_stdout eraseLine]; + [of_stdout writeFormat: @"[%@] %@: ok\n", module, test]; #else - [self outputString: @"ok\n" - inColor: GREEN]; + [of_stdout writeLine: @"ok"]; #endif } - (void)outputFailure: (OFString *)test inModule: (OFString *)module { #ifndef STDOUT_SIMPLE - void *pool = objc_autoreleasePoolPush(); - [self outputString: [OFString stringWithFormat: @"[%@] %@: failed\n", - module, test] - inColor: RED]; - objc_autoreleasePoolPop(pool); + of_stdout.cursorColumn = 0; + of_stdout.foregroundColor = [OFColor red]; + [of_stdout eraseLine]; + [of_stdout writeFormat: @"[%@] %@: failed\n", module, test]; # ifdef OF_WII - [self outputString: @"Press A to continue!\n" - inColor: NO_COLOR]; + [of_stdout reset]; + [of_stdout writeLine: @"Press A to continue!"]; + for (;;) { WPAD_ScanPads(); if (WPAD_ButtonsDown(0) & WPAD_BUTTON_A) return; @@ -311,12 +251,13 @@ VIDEO_WaitVSync(); } # endif # ifdef OF_PSP - [self outputString: @"Press X to continue!\n" - inColor: NO_COLOR]; + [of_stdout reset]; + [of_stdout writeLine: @"Press X to continue!"]; + for (;;) { SceCtrlData pad; sceCtrlReadBufferPositive(&pad, 1); if (pad.Buttons & PSP_CTRL_CROSS) { @@ -327,34 +268,39 @@ } } } # endif # ifdef OF_NINTENDO_DS - [self outputString: @"Press A to continue!" - inColor: NO_COLOR]; + [of_stdout reset]; + [of_stdout writeString: @"Press A to continue!"]; + for (;;) { swiWaitForVBlank(); scanKeys(); if (keysDown() & KEY_A) break; } # endif # ifdef OF_NINTENDO_3DS - [self outputString: @"Press A to continue!" - inColor: NO_COLOR]; + [of_stdout reset]; + [of_stdout writeString: @"Press A to continue!"]; + for (;;) { hidScanInput(); if (hidKeysDown() & KEY_A) break; gspWaitForVBlank(); } # endif + + of_stdout.cursorColumn = 0; + [of_stdout reset]; + [of_stdout eraseLine]; #else - [self outputString: @"failed\n" - inColor: RED]; + [of_stdout writeLine: @"failed"]; #endif } - (void)applicationDidFinishLaunching { @@ -457,43 +403,42 @@ [self DNSResolverTests]; #endif [self systemInfoTests]; [self localeTests]; + [of_stdout reset]; + #if defined(OF_IOS) - [self outputString: [OFString stringWithFormat: @"%d tests failed!", - _fails] - inColor: NO_COLOR]; + [of_stdout writeFormat: @"%d tests failed!", _fails]; [OFApplication terminateWithStatus: _fails]; #elif defined(OF_WII) - [self outputString: @"Press home button to exit!\n" - inColor: NO_COLOR]; + [of_stdout writeString: @"Press home button to exit!"]; + for (;;) { WPAD_ScanPads(); if (WPAD_ButtonsDown(0) & WPAD_BUTTON_HOME) [OFApplication terminateWithStatus: _fails]; VIDEO_WaitVSync(); } #elif defined(OF_PSP) - [self outputString: [OFString stringWithFormat: @"%d tests failed!", - _fails] - inColor: NO_COLOR]; + [of_stdout writeFormat: @"%d tests failed!", _fails]; + sceKernelSleepThreadCB(); #elif defined(OF_NINTENDO_DS) - [self outputString: @"Press start button to exit!" - inColor: NO_COLOR]; + [of_stdout writeString: @"Press start button to exit!"]; + for (;;) { swiWaitForVBlank(); scanKeys(); if (keysDown() & KEY_START) [OFApplication terminateWithStatus: _fails]; } #elif defined(OF_NINTENDO_3DS) - [self outputString: @"Press start button to exit!" - inColor: NO_COLOR]; + [of_stdout writeString: @"Press start button to exit!"]; + for (;;) { hidScanInput(); if (hidKeysDown() & KEY_START) [OFApplication terminateWithStatus: _fails];