On Friday, 22 April 2016 at 18:18:39 UTC, Basile B. wrote:
I think a DMD option should be added to allow the tests to be compiled but never called, something like -runTests. Because the first solution is much more attractive.

Actually the first solution works with:

https://dlang.org/phobos/core_runtime.html#.Runtime.moduleUnitTester

---
#!runnable-flags: -unittest -main
module m;

import std.stdio;
import core.runtime;

enum USERTEST;

@USERTEST unittest // exeuted once
{
    writeln("bang");
}

unittest
{
    writeln("bing");
}

bool tester()
{
    import std.traits;
    foreach(t; __traits(getUnitTests, m))
    {
        static if (hasUDA!(t, USERTEST))
            t();
    }
    return true;
}

static this()
{
    Runtime.moduleUnitTester = &tester;
}
---

So there's really no problem with selecting the top-level UT. Maybe it even works with other traits such as "parent". Or with a template that collects only the tests in a set of module like in the previous attempt (based on this: http://stackoverflow.com/questions/35075253/is-it-possible-to-compile-unittest-without-running-them-and-explicitly-run-unitt/35086752#35086752).

Reply via email to