www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Why do failed contracts don't dump stack backtrace in unittests?

reply =?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> writes:
The program output is different whether an Error is thrown from main or 
from the unittest block:

void foo(string s)
in (s != "hello") {
}

unittest {
   foo("hello");  // No stack backtrace
}

void main() {
   foo("hello");  // Yes stack backtrace
}

Ali
Sep 04 2022
parent reply Paul Backus <snarwin gmail.com> writes:
On Sunday, 4 September 2022 at 14:14:55 UTC, Ali Çehreli wrote:
 The program output is different whether an Error is thrown from 
 main or from the unittest block:
Because the default test runner catches the Error, and doesn't print the stack trace: https://github.com/dlang/dmd/blob/25799d3841ea87246c56532f6f91d9a1e34d8d8f/druntime/src/core/runtime.d#L599-L620 There's even a comment about it: // TODO: omit stack trace only if assert was thrown // directly by the unittest.
Sep 04 2022
parent =?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> writes:
On 9/4/22 09:35, Paul Backus wrote:

      // TODO: omit stack trace only if assert was thrown
      // directly by the unittest.
Thank you but I mean... :) I can understand removing a backtrace from the eyes of an end user but the consumer of a unittest output is a developer, no? Ali
Sep 04 2022