diff options
| author | Łukasz Hanuszczak <lukasz.hanuszczak@gmail.com> | 2015-08-18 18:47:11 +0200 | 
|---|---|---|
| committer | Łukasz Hanuszczak <lukasz.hanuszczak@gmail.com> | 2015-08-22 23:40:27 +0200 | 
| commit | e614916d940943a1f4f7cd77d9957246d164ab1d (patch) | |
| tree | 5b79cc96dd6ceb0f2a1bf91ecc29c526061fec0e /haddock-test/src/Test/Haddock/Config.hs | |
| parent | 163da5a4b6268de54594e18f69f06799df637305 (diff) | |
Make Haddock test package more generic.
Diffstat (limited to 'haddock-test/src/Test/Haddock/Config.hs')
| -rw-r--r-- | haddock-test/src/Test/Haddock/Config.hs | 50 | 
1 files changed, 34 insertions, 16 deletions
diff --git a/haddock-test/src/Test/Haddock/Config.hs b/haddock-test/src/Test/Haddock/Config.hs index 451cd809..15a53829 100644 --- a/haddock-test/src/Test/Haddock/Config.hs +++ b/haddock-test/src/Test/Haddock/Config.hs @@ -2,7 +2,7 @@  module Test.Haddock.Config -    ( CheckConfig(..), DirConfig(..), Config(..) +    ( TestPackage(..), CheckConfig(..), DirConfig(..), Config(..)      , defaultDirConfig      , cfgSrcDir, cfgRefDir, cfgOutDir, cfgResDir      , parseArgs, checkOpt, loadConfig @@ -35,6 +35,12 @@ import Test.Haddock.Process  import Test.Haddock.Utils +data TestPackage = TestPackage +    { tpkgName :: String +    , tpkgFiles :: [FilePath] +    } + +  data CheckConfig c = CheckConfig      { ccfgRead :: String -> String -> Maybe c      , ccfgDump :: c -> String @@ -63,7 +69,7 @@ defaultDirConfig baseDir = DirConfig  data Config c = Config      { cfgHaddockPath :: FilePath -    , cfgFiles :: [FilePath] +    , cfgPackages :: [TestPackage]      , cfgHaddockArgs :: [String]      , cfgHaddockStdOut :: FilePath      , cfgDiffTool :: Maybe FilePath @@ -164,7 +170,7 @@ loadConfig ccfg dcfg flags files = do      printVersions cfgEnv cfgHaddockPath -    cfgFiles <- processFileArgs dcfg files +    cfgPackages <- processFileArgs dcfg files      cfgHaddockArgs <- liftM concat . sequence $          [ pure ["--no-warnings"] @@ -230,24 +236,36 @@ defaultDiffTool =      isAvailable = liftM isJust . findProgramLocation silent -processFileArgs :: DirConfig -> [String] -> IO [FilePath] +processFileArgs :: DirConfig -> [String] -> IO [TestPackage]  processFileArgs dcfg [] = -    map toModulePath . filter isSourceFile <$> getDirectoryContents srcDir +    processFileArgs dcfg . filter isValidEntry =<< getDirectoryContents srcDir    where +    isValidEntry entry = entry /= "." && entry /= ".."      srcDir = dcfgSrcDir dcfg -    toModulePath = modulePath dcfg . takeBaseName -processFileArgs dcfg args = pure $ map (processFileArg dcfg) args +processFileArgs dcfg args = processFileArgs' dcfg args + + +processFileArgs' :: DirConfig -> [String] -> IO [TestPackage] +processFileArgs' dcfg args = do +    (mdls, dirs) <- partitionM doesDirectoryExist' args +    rootPkg <- pure $ TestPackage +        { tpkgName = "" +        , tpkgFiles = map (processFileArg dcfg) mdls +        } +    otherPkgs <- forM dirs $ \dir -> do +        files <- getDirectoryContents dir +        pure $ TestPackage +            { tpkgName = dir +            , tpkgFiles = map ((dcfgSrcDir dcfg </> dir) </>) files +            } +    pure $ rootPkg:otherPkgs +  where +    doesDirectoryExist' path = doesDirectoryExist (dcfgSrcDir dcfg </> path)  processFileArg :: DirConfig -> String -> FilePath  processFileArg dcfg arg      | isSourceFile arg = arg -    | otherwise = modulePath dcfg arg - - -isSourceFile :: FilePath -> Bool -isSourceFile path = takeExtension path `elem` [".hs", ".lhs"] - - -modulePath :: DirConfig -> String -> FilePath -modulePath dcfg mdl = dcfgSrcDir dcfg </> mdl <.> "hs" +    | otherwise = dcfgSrcDir dcfg </> arg </> ".hs" +  where +    isSourceFile path = takeExtension path `elem` [".hs", ".lhs"]  | 
