Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Haskell stack not building test executable

Background

I'm building a logfile parser in Haskell. I'm using stack to build it. Running the stack build command works happily and my project compiles. Running stack test, however, produces the following error:

parser-test: executable not found

I see the the following warning above the error message but I don't know how to avoid the redirect to which it refers.

Warning: output was redirected with -o, but no output will be generated because there is no Main module.

Relevant files

I haven't written any tests yet so the test file is as it was created by stack new. My cabal file looks like this:

...
category:            Executable
build-type:          Simple
-- extra-source-files:
cabal-version:       >=1.10

library
hs-source-dirs:      src
exposed-modules:     LogParser
build-depends:       base >= 4.7 && < 5
                    , attoparsec
                    , bytestring
                    , old-locale
                    , time
default-language:    Haskell2010

executable parser-exe
hs-source-dirs:      app
main-is:             Main.hs
ghc-options:         -threaded -rtsopts -with-rtsopts=-N
build-depends:       base
                    , attoparsec
                    , bytestring
                    , old-locale
                    , time
                    , parser
default-language:    Haskell2010

test-suite parser-test
type:                exitcode-stdio-1.0
hs-source-dirs:      test
main-is:             Spec.hs
build-depends:       base
                    , attoparsec
                    , bytestring
                    , hspec
                    , hspec-attoparsec
                    , old-locale
                    , time
                    , parser
ghc-options:         -threaded -rtsopts -with-rtsopts=-N
default-language:    Haskell2010

source-repository head
type:     git
...

I presume I'm missing something but I can't find where what I'm missing is documented.

Desired behaviour

I should see the Test suite not yet implemented message outlined in the stack documentation.

like image 805
Garry Cairns Avatar asked Sep 08 '15 19:09

Garry Cairns


1 Answers

The content of the test/Spec.hs file from the template is:

main :: IO ()
main = putStrLn "Test suite not yet implemented"

You can see this content at commercialhaskell/stack-templates in new-template.hsfiles.

I'm not sure where the module ParserSpec where line comes from (as brought up in the Github issue), but it's not part of the template. On my system, stack new bar && cd bar && stack test succeeds.

As to the reason behind the Main module requirement: it comes from the Cabal library, and as I understand it was added due to limitations in other compilers Cabal supports. In other words, GHC could technically allow this code to compile, but Cabal does not pass in those arguments to remain compatible with other compilers.

like image 77
Michael Snoyman Avatar answered Nov 10 '22 14:11

Michael Snoyman