digitalmars.D.learn - Why do failed contracts don't dump stack backtrace in unittests?
- =?UTF-8?Q?Ali_=c3=87ehreli?= (12/12) Sep 04 2022 The program output is different whether an Error is thrown from main or
- Paul Backus (7/9) Sep 04 2022 Because the default test runner catches the Error, and doesn't
- =?UTF-8?Q?Ali_=c3=87ehreli?= (5/7) Sep 04 2022 Thank you but I mean... :) I can understand removing a backtrace from
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
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
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