[Haskell-cafe] Running tests in Cabal

Magnus Therning magnus at therning.org
Sun Jul 18 17:42:08 EDT 2010

On 18/07/10 20:55, Rogan Creswick wrote:
> On Sun, Jul 18, 2010 at 12:23 PM, Magnus Therning <magnus at therning.org> wrote:
>> In my Cabal file I have defined a flag that controls whether tests are
>> built or not.  Now I'd like to hook it up a bit more so that './Setup.hs
>> test' actually runs the tests.
> This will allow you to issue 'cabal test' to run the test suite, but
> it may introduce other issues.  I suspect that this won't work well
> with dependencies or language extensions defined in the cabal file --
> I'm really not sure, as I haven't actually done this in "real" code.
> I just wanted to see if it would work a few months back.

Yeah, that's why I want to set it up.  However, I don't want the setup
you suggest.

In my Cabal file I have a flag which controls whether the test
executable gets built or not:

  Executable utest
      Main-Is        : Main.hs
      Hs-Source-Dirs : test_src src
      Ghc-Options    : -threaded
      if flag(Test)
          Build-Depends  : HUnit, network
          Buildable : True
          Ghc-Options    : -fhpc
          Buildable : False

The main reason for this is that the test executable depends on some
packages that would never be used in the main part of the package.  I
also do
not want my Setup.hs to depend on those packages.

In my Setup.hs I then define the following test hook:

  runTestsBuild a b pd lbi = let
          doWithExe e _ = let
                  _exe = "./dist/build/" ++ (exeName e) ++ "/" ++
(exeName e)
                  _runTest = do
                      putStrLn $ "** " ++ (exeName e) ++ ":"
                      ig $ system _exe
                  when (exeName e `elem` ["utest"]) _runTest
      in do
          (runTests simpleUserHooks) a b pd lbi
          withExeLBI pd lbi doWithExe

And this is where the issue I *asked* about comes in.  The building of the
test executable is controlled by the flag Test, but the flag doesn't seem to
be available in the test hook so instead I have to rely on the name of the


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 262 bytes
Desc: OpenPGP digital signature
Url : http://www.haskell.org/pipermail/haskell-cafe/attachments/20100718/14f18ca1/signature-0001.bin

More information about the Haskell-Cafe mailing list