packages feed

getopt-generics-0.11: test/ExamplesSpec.hs

module ExamplesSpec where

import           Prelude ()
import           Prelude.Compat

import           Control.Monad
import           System.FilePath
import           Test.Hspec

import           ShellProtocol

import qualified CustomOption
import qualified CustomOptionRecord
import qualified RecordType
import qualified Simple
import qualified SimpleRecord
import qualified Test01
import qualified Test02
import qualified Test03
import qualified Test04

examples :: [(IO (), String)]
examples =
  (Test01.main, "Test01") :
  (Test02.main, "Test02") :
  (Test03.main, "Test03") :
  (Test04.main, "Test04") :

  (Simple.main, "Simple") :
  (SimpleRecord.main, "SimpleRecord") :
  (RecordType.main, "RecordType") :
  (SimpleRecord.main, "SimpleRecord") :
  (CustomOption.main, "CustomOption") :
  (CustomOptionRecord.main, "CustomOptionRecord") :
  []

main :: IO ()
main = hspec spec

spec :: Spec
spec = do
  describe "shell protocols" $ do
    forM_ examples $ \ (program, name) ->
      it name $ do
        test program name

test :: IO () -> String -> IO ()
test program name = do
  protocol <- readFile ("docs" </> name <.> "shell-protocol")
  testShellProtocol program protocol