www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - unittests, dub and libraries

reply Joe <jma freedomcircle.com> writes:
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?
Mar 27 2018
parent reply Jonathan M Davis <newsgroup.d jmdavisprog.com> writes:
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
Mar 27 2018
next sibling parent Joe <jma freedomcircle.com> writes:
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.
Mar 27 2018
prev sibling parent reply Jesse Phillips <Jesse.K.Phillips+D gmail.com> writes:
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.
Mar 28 2018
next sibling parent Jesse Phillips <Jesse.K.Phillips+D gmail.com> writes:
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
Mar 28 2018
prev sibling parent Jonathan M Davis <newsgroup.d jmdavisprog.com> writes:
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
Mar 28 2018