doctest-discover 0.1.0.2 → 0.1.0.3
raw patch · 4 files changed
+65/−18 lines, 4 filesdep +aesondep +bytestringdep +doctest-discover
Dependencies added: aeson, bytestring, doctest-discover
Files
- doctest-discover.cabal +5/−5
- src/Config.hs +30/−0
- src/Main.hs +8/−9
- src/Runner.hs +22/−4
doctest-discover.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: doctest-discover-version: 0.1.0.2+version: 0.1.0.3 synopsis: Easy way to run doctests via cabal description: doctest-discover provides an easy way to run doctests via cabal license: PublicDomain@@ -16,14 +16,14 @@ library default-language: Haskell2010- build-depends: base >=4.6 && <4.7, doctest, directory, filepath, temporary+ build-depends: base >=4.6 && <4.7, doctest, directory, filepath, temporary, aeson, bytestring HS-Source-Dirs: src executable doctest-discover default-language: Haskell2010- build-depends: base >=4.6 && <4.7, doctest, directory, filepath, temporary+ build-depends: base >=4.6 && <4.7, doctest, directory, filepath, temporary, aeson, bytestring main-is: Main.hs - other-modules: Runner+ other-modules: Runner, Config HS-Source-Dirs: src test-suite doctests@@ -31,5 +31,5 @@ type: exitcode-stdio-1.0 ghc-options: -threaded main-is: Doctest-Main.hs- build-depends: base >4 && <5, doctest+ build-depends: base >4 && <5, doctest-discover, doctest HS-Source-Dirs: test
+ src/Config.hs view
@@ -0,0 +1,30 @@+{-# LANGUAGE OverloadedStrings #-}++module Config where++import Data.Aeson ((.:), (.:?), decode, FromJSON(..), Value(..))+import Control.Applicative+import qualified Data.ByteString.Lazy.Char8 as B++data Config = Config {+ ignore :: Maybe [String]+} deriving (Show)++instance FromJSON Config where+ parseJSON (Object v) = + Config <$> + (v .: "ignore")++-- | Parses config json as string to the Config type+--+-- >>> config "{\"ignore\": [] }"+-- Just (Config {ignore = Just []})+--+-- >>> config "{\"ignore\": [\"Foo.hs\"] }"+-- Just (Config {ignore = Just ["Foo.hs"]})+--+-- >>> config "{\"ignore\": [1,2,3] }"+-- Nothing+--+config :: String -> Maybe Config+config json = decode (B.pack json) :: Maybe Config
src/Main.hs view
@@ -1,24 +1,23 @@ module Main where import System.Environment+import Control.Applicative import Runner+import Config import System.Directory main :: IO () main = do (src : _ : dst : args) <- getArgs+ let configFileContents = case args of+ (configFile : _) -> readFile configFile+ _ -> return ""+ customConfiguration <- config <$> configFileContents files <- getDirectoryContents "src" - let config = generateConfig files - writeFile dst (makeFileContents config)+ let testDriverFileContents = driver files customConfiguration+ writeFile dst testDriverFileContents -makeFileContents :: [String] -> String-makeFileContents config = unlines [- "module Main where",- "import Test.DocTest",- "main :: IO ()",- "main = doctest " ++ show config- ]
src/Runner.hs view
@@ -1,17 +1,35 @@ module Runner (- generateConfig+ driver ) where import Data.List+import Config import System.FilePath.Posix +-- | Generates doctest driver+--+-- >>> let expected = unlines ["module Main where", "import Test.DocTest", "main :: IO ()", "main = doctest [\"-isrc\",\"foo\",\"bar\"]"]+-- >>> let actual = driver ["foo.hs", "bar.hs", "baz.qux"] Nothing+-- >>> expected == actual+-- True+--+driver :: [FilePath] -> Maybe Config -> String+driver files config = unlines $ ["module Main where", "import Test.DocTest", "main :: IO ()", "main = doctest " ++ (show $ generateConfig files config)]+ -- | Generates doctest configuration ----- >>> generateConfig ["foo.hs", "bar.hs", "baz.qux"]+-- >>> generateConfig ["foo.hs", "bar.hs", "baz.qux"] Nothing -- ["-isrc","foo","bar"] ---generateConfig :: [FilePath] -> [String]-generateConfig = ((:) "-isrc" . dropFileExtensions . notCurrentAndParent . filterHaskellSources) +-- >>> let config = Just (Config (Just ["bar.hs"]))+-- >>> generateConfig ["foo.hs", "bar.hs", "baz.qux"] config+-- ["-isrc","foo"]+--+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 --