Tests in Cabal

Adrian Hey ahey at iee.org
Thu Jan 10 06:24:42 EST 2008


Duncan Coutts wrote:
> On Wed, 2008-01-09 at 10:27 +0000, Adrian Hey wrote:
> 
>> Is this really the way tests are supposed to be included?
>>
>> It doesn't seem workable to me. I wonder if it would be better to just
>> build the lib first (without tests) and then separately build one or
>> more test executables?
>>
>> What does everyone else do about this?
> 
> I've only seen one package that actually uses tests integrated into the
> Setup.hs. So it seems everyone just runs tests manually. This is a
> fairly large hole in the Cabal story at the moment imho.
> 
> Part of the problem is that we don't support custom Setup.hs stuff very
> well, we encourage people to use the simple build system. But for tests,
> even if it used the simple build system we'd end up making it use the
> custom flavour just to run some tests. It's not very satisfactory.
> 
> I wonder if we shouldn't move tests into their own file completely. The
> problem always with custom Setup.hs scripts is that they're the first
> point of entry, and if it does not compile then everything is stuffed
> and you don't get a good error message.

One thing I've been trying today is building the test program as a
separate executable and then having Setup.hs run this..

import Distribution.Simple
import Distribution.PackageDescription(PackageDescription)
import Distribution.Simple.LocalBuildInfo(LocalBuildInfo)
import System.Cmd(system)

main :: IO ()
main = defaultMainWithHooks (simpleUserHooks {runTests = myTests})

myTests:: Args -> Bool -> PackageDescription -> LocalBuildInfo -> IO ()
myTests_ _ _ _ = system "myTestProgram" >> return ()

But I don't still don't seem to be able to build myTestProgram.hs
because it depends on the lib package which has just been built
but not yet registered. But I guess there might be some cabal file
or ghc-options magic that would make this possible without ghc
trying (and failing) to recompile the entire library. Can anyone
explain how to do this?

Thanks
--
Adrian Hey



More information about the Libraries mailing list