aeson-schemas-1.4.0.0: test/Tests/Quickstart.hs
{-# LANGUAGE OverloadedStrings #-}
module Tests.Quickstart (test) where
import Data.Maybe (fromMaybe)
import Data.Text (Text)
import qualified Data.Text as Text
import qualified Data.Text.IO as Text
import System.FilePath ((</>))
import System.IO.Temp (withSystemTempDirectory)
import System.Process (readProcess)
import Test.Tasty (TestTree)
import TestUtils (testGoldenIO)
test :: TestTree
test = testGoldenIO "README Quickstart works" "README_Quickstart.golden" $
withSystemTempDirectory "readme-quickstart" $ \tmpdir -> do
let testfile = tmpdir </> "readme_quickstart.hs"
readme <- Text.readFile "README.md"
Text.writeFile testfile (getQuickstartCode readme)
readProcess "runghc" [testfile] ""
getQuickstartCode :: Text -> Text
getQuickstartCode = Text.unlines . getQuickstartLines . Text.lines
where
getQuickstartLines readmeLines =
fromMaybe (error "Could not find Quickstart in README") $
between (== "## Quickstart") ("## " `Text.isPrefixOf`) readmeLines
>>= between (== "```haskell") (== "```")
between start end xs =
case dropWhile (not . start) xs of
[] -> Nothing
_ : afterStart -> Just $ takeWhile (not . end) afterStart