On Thursday, 26 March 2015 at 10:50:06 UTC, Vladimir Panteleev wrote:
On Thursday, 26 March 2015 at 10:23:58 UTC, Stefan wrote:
..

That's a bug. You'll notice that if an exception is thrown in main() (or anything called from it), you'll get a MessageBox for GUI applications. That this doesn't also occur with unittest failures is a bug.

Do you have the bug/issue number for that?


For now, you can work around this by writing your own WinMain, which calls rt_runModuleUnitTests explicitly, inside a try/catch block which will then display a MessageBox.

Hmm, that is what i tried to do, but the code in Runtime.runModuleUnitTests() catches already all exceptions and writes that to the console. I have not found rt_runModuleUnitTests in the current D runtime (2.067.0).

However, I was successful in setting the moduleUnitTester property of Runtime. Inside my main module I do:

static this()  {
        Runtime.moduleUnitTester = &unitTestRunner;
}
bool unitTestRunner() {
                
        string line = "";
                
        void printErr(in char[] buf) {
        string message = to!string(buf);
        if ( message == "\n" ) {
                Logger.send( line );
                line = "";
        } else {
                line ~= message;
        }
        }

        size_t failed = 0;
        foreach( m; ModuleInfo ) {
                if( m ) {
                        auto fp = m.unitTest;

                        if( fp ) {
                                try {
                                        fp();
                                } catch( Throwable e ) {
                                        e.toString(&printErr); printErr("\n");
                                        failed++;
                                }
                        }
                }
        }
        return failed == 0;
}

where the Logger.send() delegates to OutputDebugStringA().

Reply via email to