packages feed

doctest-discover 0.1.0.3 → 0.1.0.4

raw patch · 4 files changed

+43/−28 lines, 4 files

Files

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  --