diff options
| author | David Waern <david.waern@gmail.com> | 2011-05-22 15:41:52 +0000 | 
|---|---|---|
| committer | David Waern <david.waern@gmail.com> | 2011-05-22 15:41:52 +0000 | 
| commit | aee6d6b5b733aa9bcfa278f8ed8e7c93472c4671 (patch) | |
| tree | 39bf61c2e923fe9ec0416f83a3c4dd2f394634e6 | |
| parent | 2c838a70e3a5906d2168d9b064960af021b534bc (diff) | |
Use cabal's test suite support to run the test suite
This gives up proper dependency tracking of the test script.
| -rw-r--r-- | haddock.cabal | 8 | ||||
| -rw-r--r-- | tests/html-tests/README | 16 | ||||
| -rw-r--r-- | tests/html-tests/runtests.hs | 30 | 
3 files changed, 30 insertions, 24 deletions
| diff --git a/haddock.cabal b/haddock.cabal index 2f361873..60826ea1 100644 --- a/haddock.cabal +++ b/haddock.cabal @@ -198,3 +198,11 @@ library    if flag(in-ghc-tree)      buildable: False + +test-suite html-tests +  type:             exitcode-stdio-1.0 +  default-language: Haskell2010 +  main-is:          runtests.hs +  hs-source-dirs:   tests/html-tests +  build-depends:    base, directory, process, filepath, Cabal, regex-compat + diff --git a/tests/html-tests/README b/tests/html-tests/README index fd906b2b..644d0a71 100644 --- a/tests/html-tests/README +++ b/tests/html-tests/README @@ -1,4 +1,3 @@ -  This is a testsuite for Haddock that uses the concept of "golden files". That  is, it compares output files against a set of reference files. @@ -6,7 +5,7 @@ To add a new test:   1) Create a module in the "tests" directory. - 2) Run runtests.hs. You should now have output/<modulename>.html. The test + 2) Run "cabal test". You should now have output/<modulename>.html. The test      passes since there is no reference file to compare with.   3) To make a reference file from the output file, do @@ -14,15 +13,12 @@ To add a new test:  Tips and tricks: -You can +To copy all output files into reference files, run    runhaskell copy.hs -to copy all output files into reference files. - -You can -  runhaskell runtests.hs all - -to continue despite a failing test. +You can run all tests despite failing tests, like so +  cabal test --test-option=all  You can pass extra options to haddock like so -  runhaskell runtests.hs --title="All Tests" all +  cabal test --test-options='all --title="All Tests"' + diff --git a/tests/html-tests/runtests.hs b/tests/html-tests/runtests.hs index d2486fde..2f7ed2e2 100644 --- a/tests/html-tests/runtests.hs +++ b/tests/html-tests/runtests.hs @@ -14,8 +14,11 @@ import Distribution.Verbosity  import Data.Maybe -haddockBase = ".." </> ".." -haddockPath = haddockBase </> "dist" </> "build" </> "haddock" </> "haddock" +packageRoot   = "." +haddockPath   = packageRoot </> "dist" </> "build" </> "haddock" </> "haddock" +testSuiteRoot = packageRoot </> "tests" </> "html-tests" +testDir       = testSuiteRoot </> "tests" +outDir        = testSuiteRoot </> "output"  main = do @@ -27,7 +30,7 @@ test = do    x <- doesFileExist haddockPath    when (not x) $ die "you need to run 'cabal build' successfully first" -  contents <- getDirectoryContents "tests" +  contents <- getDirectoryContents testDir    args <- getArgs    let (opts, spec) = span ("-" `isPrefixOf`) args    let mods = @@ -35,17 +38,16 @@ test = do            x:_ | x /= "all" -> [x ++ ".hs"]            _ -> filter ((==) ".hs" . takeExtension) contents -  let outdir = "output" -  let mods' = map ("tests" </>) mods +  let mods' = map (testDir </>) mods    putStrLn ""    putStrLn "Haddock version: "    h1 <- runProcess haddockPath ["--version"] Nothing -                   (Just [("haddock_datadir", haddockBase)]) Nothing Nothing Nothing +                   (Just [("haddock_datadir", packageRoot)]) Nothing Nothing Nothing    waitForProcess h1    putStrLn ""    putStrLn "GHC version: "    h2 <- runProcess haddockPath ["--ghc-version"] Nothing -                   (Just [("haddock_datadir", haddockBase)]) Nothing Nothing Nothing +                   (Just [("haddock_datadir", packageRoot)]) Nothing Nothing Nothing    waitForProcess h2    putStrLn "" @@ -63,9 +65,9 @@ test = do    putStrLn "Running tests..."    handle <- runProcess haddockPath -                       (["-w", "-o", outdir, "-h", "--pretty-html", "--optghc=-fglasgow-exts" +                       (["-w", "-o", outDir, "-h", "--pretty-html", "--optghc=-fglasgow-exts"                          , "--optghc=-w", base, process, ghcprim] ++ opts ++ mods') -                       Nothing (Just [("haddock_datadir", haddockBase)]) Nothing +                       Nothing (Just [("haddock_datadir", packageRoot)]) Nothing                         Nothing Nothing    code <- waitForProcess handle @@ -75,12 +77,12 @@ test = do  check modules strict = do    forM_ modules $ \mod -> do -    let outfile = "output" </> (dropExtension mod ++ ".html") -    let reffile = "tests" </> dropExtension mod ++ ".html.ref" +    let outfile = outDir  </> dropExtension mod ++ ".html" +    let reffile = testDir </> dropExtension mod ++ ".html.ref"      b <- doesFileExist reffile      if b        then do -        copyFile reffile ("output" </> takeFileName reffile) +        copyFile reffile (outDir </> takeFileName reffile)          out <- readFile outfile          ref <- readFile reffile          if not $ haddockEq out ref @@ -88,8 +90,8 @@ check modules strict = do              putStrLn $ "Output for " ++ mod ++ " has changed! Exiting with diff:"              let ref' = stripLinks ref                  out' = stripLinks out -            let reffile' = "output" </> takeFileName reffile ++ ".nolinks" -                outfile' = "output" </> takeFileName outfile ++ ".nolinks" +            let reffile' = outDir </> takeFileName reffile ++ ".nolinks" +                outfile' = outDir </> takeFileName outfile ++ ".nolinks"              writeFile reffile' ref'              writeFile outfile' out'              b <- programOnPath "colordiff" | 
