digitalmars.D.learn - Unittest in a windows app
- Dan Nestor (50/50) Dec 19 2014 Hello everybody, this is my first post on this forum.
- Dan Nestor (25/25) Dec 20 2014 I managed to isolate the problem to the following. Program 1
- Dicebot (2/2) Dec 20 2014 Can it be because Windows main wrapper consumes exceptions or
- Rainer Schuetze (12/19) Dec 20 2014 Runtime.initialize() no longer calls the unittests since a few versions....
Hello everybody, this is my first post on this forum.
I have a question about unit testing a Windows application. I
have slightly modified Visual D's default Windows application
stub to the following:
<code>
module winmain;
import core.runtime;
import core.sys.windows.windows;
unittest {
assert(false);
}
extern (Windows)
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
lpCmdLine, int nCmdShow)
{
int result;
void exceptionHandler(Throwable e)
{
throw e;
}
try
{
Runtime.initialize();
result = myWinMain(hInstance, hPrevInstance, lpCmdLine,
nCmdShow);
Runtime.terminate();
}
catch (Throwable o) // catch any uncaught exceptions
{
MessageBoxA(null, cast(char *)o.toString(), "Error", MB_OK |
MB_ICONEXCLAMATION);
result = 0; // failed
}
return result;
}
int myWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
lpCmdLine, int nCmdShow)
{
/* ... insert user code here ... */
throw new Exception("not implemented");
return 0;
}
</code>
I compiled it with the `-unittest` option. Strangely, when
running the app, no error is displayed, and the application
proceeds as usual. I would expect the program to display the unit
test failure and stop (the behaviour I have observed for console
applications). What am I missing?
Thanks for helping!
Dan
Dec 19 2014
I managed to isolate the problem to the following. Program 1
below works (displays unit test failure when run), while program
2 does not.
***** Program 1 *****
import std.stdio;
unittest
{
assert(false);
}
void main()
{
writeln("Hello D-World!");
}
***** Program 2 *****
module winmain;
import core.sys.windows.windows;
unittest {
assert(false);
}
extern (Windows)
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
lpCmdLine, int nCmdShow)
{
return 0;
}
Dec 20 2014
Can it be because Windows main wrapper consumes exceptions or spawn a separate thread for that or something like that?
Dec 20 2014
On 19.12.2014 22:39, Dan Nestor wrote:Hello everybody, this is my first post on this forum. I have a question about unit testing a Windows application. I have slightly modified Visual D's default Windows application stub to the following:[...]try { Runtime.initialize();Runtime.initialize() no longer calls the unittests since a few versions. You have to call runModuleUnitTests() explicitely, e.g. try { Runtime.initialize(); if (runModuleUnittests()) result = myWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow); Runtime.terminate(); }...
Dec 20 2014









"Dicebot" <public dicebot.lv> 