packages feed

hjsonschema-0.10.0.0: test/Local.hs

module Main where

import           Control.Applicative
import           Control.Monad          (unless)
import           Data.Aeson
import           Data.List              (isSuffixOf)
import           Data.Monoid
import           System.Directory       (getDirectoryContents)
import           Test.Tasty             (TestTree, defaultMain, testGroup)
import qualified Test.Tasty.HUnit       as HU
import           Test.Tasty.QuickCheck  (testProperty)

-- Examples
import qualified CustomSchema
import qualified Full
import qualified PrettyShowFailure
import qualified Simple

import           Data.JsonSchema.Draft4
import           Local.Failure          (correctPaths)
import           Local.Filesystem       (fetchFromFilesystem)
import           Local.Reference        (referenceTests)
import           Shared                 (isLocal, readSchemaTests, toTest)

dir :: String
dir = "JSON-Schema-Test-Suite/tests/draft4"

main :: IO ()
main = do
  filenames <- filter isLocal . filter (".json" `isSuffixOf`) <$> getDirectoryContents dir
  ts <- readSchemaTests dir filenames
  defaultMain . testGroup "Tests not requiring an HTTP server" $
      testGroup "Check that examples compile and don't throw errors" exampleTests
    : testGroup "QuickCheck tests" quickCheckTests
    : testGroup "Report the path to invalid data correctly" correctPaths
    : testGroup "Test the referencesViaFilesystem function" fetchFromFilesystem
    : testGroup "Test the Reference module" referenceTests
    : fmap toTest ts

quickCheckTests :: [TestTree]
quickCheckTests =
  [testProperty "Invert schemas through JSON without change" invertSchema]
  where
    invertSchema :: Schema -> Bool
    invertSchema a = Just a == decode (encode a)

exampleTests :: [TestTree]
exampleTests =
  [ HU.testCase "CustomSchema example" CustomSchema.example
  , HU.testCase "Full example" Full.example
  , HU.testCase "PrettyShowFailure example" PrettyShowFailure.example
  , HU.testCase "Simple example" Simple.example
  ]