Thread overview
unittests, dub and libraries
Mar 28, 2018
Joe
Mar 28, 2018
Jonathan M Davis
Mar 28, 2018
Joe
Mar 28, 2018
Jesse Phillips
Mar 28, 2018
Jesse Phillips
Mar 28, 2018
Jonathan M Davis
March 28, 2018
I'm trying to build a very simple library. For now it just has a single class, constructor, destructor and one method.  I added a unit test right after the method, declared the targetType to be "library" and a buildType of "unittest" (with options "unittests", "debugMode", "debugInfo"). When I run

  dub run -b unittest

it builds the library, but then says:

  Target is a library. Skipping execution.

If I compile with ldc2 -unittest the linker throws the error:

  (.text+0x20): undefined reference to `main'

If I add an empty main function to the source file, ldc2/gcc manage to create an executable that can be invoked manually and it runs through the unit test.

Is this the best that can be done?
March 27, 2018
On Wednesday, March 28, 2018 02:16:59 Joe via Digitalmars-d-learn wrote:
> I'm trying to build a very simple library. For now it just has a single class, constructor, destructor and one method.  I added a unit test right after the method, declared the targetType to be "library" and a buildType of "unittest" (with options "unittests", "debugMode", "debugInfo"). When I run
>
>    dub run -b unittest
>
> it builds the library, but then says:
>
>    Target is a library. Skipping execution.
>
> If I compile with ldc2 -unittest the linker throws the error:
>
>    (.text+0x20): undefined reference to `main'
>
> If I add an empty main function to the source file, ldc2/gcc manage to create an executable that can be invoked manually and it runs through the unit test.
>
> Is this the best that can be done?

Run

    dub test

The problem is that an executable needs a main, and a library doesn't have one, whereas when you're testing a library, you need an executable. So, a main must be inserted - e.g. with the -main flag to dmd. Just building the unittest build doesn't insert one. However, dub test _does_ deal with that for you.

- Jonathan M Davis

March 28, 2018
On Wednesday, 28 March 2018 at 03:07:23 UTC, Jonathan M Davis wrote:
> Run
>
>     dub test
>
> The problem is that an executable needs a main, and a library doesn't have one, whereas when you're testing a library, you need an executable. So, a main must be inserted - e.g. with the -main flag to dmd. Just building the unittest build doesn't insert one. However, dub test _does_ deal with that for you.

Thanks.
March 28, 2018
On Wednesday, 28 March 2018 at 03:07:23 UTC, Jonathan M Davis wrote:
> Run
>
>     dub test
>
> The problem is that an executable needs a main, and a library doesn't have one, whereas when you're testing a library, you need an executable. So, a main must be inserted - e.g. with the -main flag to dmd. Just building the unittest build doesn't insert one. However, dub test _does_ deal with that for you.
>
> - Jonathan M Davis

And a note on the reverse, if you have an executable project $ dub test won't build in the app.d file since it contains main and dub test wants to avoid running your main function.
March 28, 2018
On Wednesday, 28 March 2018 at 21:29:22 UTC, Jesse Phillips wrote:
> And a note on the reverse, if you have an executable project $ dub test won't build in the app.d file since it contains main and dub test wants to avoid running your main function.

For reference:

https://github.com/dlang/dub/issues/1118
March 28, 2018
On Wednesday, March 28, 2018 21:29:22 Jesse Phillips via Digitalmars-d-learn wrote:
> On Wednesday, 28 March 2018 at 03:07:23 UTC, Jonathan M Davis
>
> wrote:
> > Run
> >
> >     dub test
> >
> > The problem is that an executable needs a main, and a library doesn't have one, whereas when you're testing a library, you need an executable. So, a main must be inserted - e.g. with the -main flag to dmd. Just building the unittest build doesn't insert one. However, dub test _does_ deal with that for you.
> >
> > - Jonathan M Davis
>
> And a note on the reverse, if you have an executable project $ dub test won't build in the app.d file since it contains main and dub test wants to avoid running your main function.

Yeah. That's really annoying behavior. I keep forgetting that it does that until I realize that I have tests that should be failing that aren't.

- Jonathan M Davis