packages feed

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