doctest-discover 0.1.0.3 → 0.1.0.4
raw patch · 4 files changed
+43/−28 lines, 4 files
Files
- doctest-discover.cabal +1/−4
- src/Config.hs +12/−4
- src/Main.hs +14/−4
- src/Runner.hs +16/−16
doctest-discover.cabal view
@@ -1,8 +1,5 @@--- Initial doctest-discover.cabal generated by cabal init. For further --- documentation, see http://haskell.org/cabal/users-guide/- name: doctest-discover-version: 0.1.0.3+version: 0.1.0.4 synopsis: Easy way to run doctests via cabal description: doctest-discover provides an easy way to run doctests via cabal license: PublicDomain
src/Config.hs view
@@ -7,24 +7,32 @@ import qualified Data.ByteString.Lazy.Char8 as B data Config = Config {- ignore :: Maybe [String]+ ignore :: Maybe [String],+ sourceFolders :: Maybe [String] } deriving (Show) instance FromJSON Config where parseJSON (Object v) = Config <$> - (v .: "ignore")+ (v .:? "ignore") <*>+ (v .:? "sourceFolders") -- | Parses config json as string to the Config type -- -- >>> config "{\"ignore\": [] }"--- Just (Config {ignore = Just []})+-- Just (Config {ignore = Just [], sourceFolders = Nothing}) -- -- >>> config "{\"ignore\": [\"Foo.hs\"] }"--- Just (Config {ignore = Just ["Foo.hs"]})+-- Just (Config {ignore = Just ["Foo.hs"], sourceFolders = Nothing}) -- -- >>> config "{\"ignore\": [1,2,3] }" -- Nothing+--+-- >>> config "{\"sourceFolders\": [1,2,3] }"+-- Nothing+--+-- >>> config "{\"sourceFolders\": [\"src\"] }"+-- Just (Config {ignore = Nothing, sourceFolders = Just ["src"]}) -- config :: String -> Maybe Config config json = decode (B.pack json) :: Maybe Config
src/Main.hs view
@@ -1,11 +1,13 @@ module Main where import System.Environment-import Control.Applicative+import Control.Applicative +import Control.Monad+import Data.Maybe (fromMaybe) import Runner import Config import System.Directory-+import System.FilePath main :: IO () main = do@@ -14,9 +16,17 @@ (configFile : _) -> readFile configFile _ -> return "" customConfiguration <- config <$> configFileContents- files <- getDirectoryContents "src" - let testDriverFileContents = driver files customConfiguration+ let sources = case customConfiguration of+ Just (Config _ (Just sourceFolders)) -> sourceFolders+ _ -> ["src"]+ files <- sequence $ map getAbsDirectoryContents sources+ let testDriverFileContents = driver (concat files) customConfiguration writeFile dst testDriverFileContents++getAbsDirectoryContents :: FilePath -> IO [FilePath]+getAbsDirectoryContents dir = getDirectoryContents dir >>= mapM (canonicalizePath . (dir </>))++
src/Runner.hs view
@@ -8,7 +8,7 @@ -- | Generates doctest driver ----- >>> let expected = unlines ["module Main where", "import Test.DocTest", "main :: IO ()", "main = doctest [\"-isrc\",\"foo\",\"bar\"]"]+-- >>> let expected = unlines ["module Main where", "import Test.DocTest", "main :: IO ()", "main = doctest [\"-i/src\",\"foo.hs\",\"bar.hs\"]"] -- >>> let actual = driver ["foo.hs", "bar.hs", "baz.qux"] Nothing -- >>> expected == actual -- True@@ -19,25 +19,25 @@ -- | Generates doctest configuration -- -- >>> generateConfig ["foo.hs", "bar.hs", "baz.qux"] Nothing--- ["-isrc","foo","bar"]+-- ["-i/src","foo.hs","bar.hs"] ----- >>> let config = Just (Config (Just ["bar.hs"]))+-- >>> let config = Just (Config (Just ["bar.hs"]) Nothing) -- >>> generateConfig ["foo.hs", "bar.hs", "baz.qux"] config--- ["-isrc","foo"]+-- ["-i/src","foo.hs"] --+-- >>> let config = Just (Config Nothing (Just ["qux"]))+-- >>> generateConfig ["foo.hs", "bar.hs", "baz.qux"] config+-- ["-i/qux","foo.hs","bar.hs"]+--+-- >>> let config = Just (Config (Just ["bar.hs"]) (Just ["qux"]))+-- >>> generateConfig ["foo.hs", "bar.hs", "baz.qux"] config+-- ["-i/qux","foo.hs"]+-- generateConfig :: [FilePath] -> Maybe Config -> [String]-generateConfig files config = case config of- Just (Config (Just (ignoreList))) -> ((:) "-isrc" . dropFileExtensions . filter (`notElem` ignoreList) . notCurrentAndParent . filterHaskellSources) files- _ -> ((:) "-isrc" . dropFileExtensions . notCurrentAndParent . filterHaskellSources) files----- | Drops file extensions--- --- >>> dropFileExtensions ["foo.bar", "bar.baz", "baz.qux"]--- ["foo","bar","baz"]--dropFileExtensions :: [FilePath] -> [String]-dropFileExtensions = map dropExtension+generateConfig files (Just (Config Nothing (Just sourceFolders))) = ((++) (map ("-i/"++) sourceFolders) . notCurrentAndParent . filterHaskellSources) files+generateConfig files (Just (Config (Just ignoreList) Nothing)) = ((:) "-i/src" . filter (`notElem` ignoreList) . notCurrentAndParent . filterHaskellSources) files+generateConfig files (Just (Config (Just ignoreList) (Just sourceFolders))) = ((++) (map ("-i/"++) sourceFolders) . filter (`notElem` ignoreList) . notCurrentAndParent . filterHaskellSources) files+generateConfig files _ = ((:) "-i/src" . notCurrentAndParent . filterHaskellSources) files -- | Filters out current and parent directories --