packages feed

hjsonschema 1.7.2 → 1.8.0

raw patch · 29 files changed

+165/−216 lines, 29 filesdep +http-client-tlsdep +safe-exceptionsdep ~QuickCheckdep ~aesondep ~asyncPVP ok

version bump matches the API change (PVP)

Dependencies added: http-client-tls, safe-exceptions

Dependency ranges changed: QuickCheck, aeson, async, base, bytestring, containers, directory, file-embed, filepath, hashable, hjsonpointer, hspec, http-client, http-types, pcre-heavy, profunctors, protolude, scientific, semigroups, text, unordered-containers, vector, wai-app-static, warp

API changes (from Hackage documentation)

Files

README.md view
@@ -1,50 +1,32 @@-![hjsonschema logo](./logo.jpg)+# Summary -A Haskell implementation of [JSON Schema](http://json-schema.org/) ([Draft 4](https://github.com/json-schema-org/json-schema-spec/wiki/Specification-Links#draft-4)).+A Haskell implementation of [JSON Schema](http://json-schema.org/) ([Draft 4](http://json-schema.org/specification-links.html)).  [Hackage](https://hackage.haskell.org/package/hjsonschema) / [GitHub](https://github.com/seagreen/hjsonschema) / [Travis CI](https://travis-ci.org/seagreen/hjsonschema) -# Notes--+ As of 2017 [json-schema-org](https://github.com/json-schema-org/json-schema-spec) has begun releasing new drafts of the standard. Once this work stabilizes `hjsonschema` will add coverage for the latest draft.--+ Requires [pcre](http://www.pcre.org/) (`pkgs.pcre` in Nixpkgs).--+ Schemas with circular references can cause infinite loops. hjsonschema does loop detection but it may not be solid yet -- please open an issue if you find a situation where it fails.- # Example  See [here](https://github.com/seagreen/hjsonschema/blob/master/examples/Simple.hs). -# Tests--Run all tests:--`stack test`--Run only local tests:--`stack test hjsonschema:local`--Run remote tests (makes GETs to json-schema.org, also temporarily starts an HTTP server on port 1234):+# Design -`stack test hjsonschema:remote`+`hjsonschema` was an attempt to build a very modular JSON Schema library. Validators have [a concrete type](src/JSONSchema/Validator/Types.hs) and can be mixed and matched into new [Specs](src/JSONSchema/Types.hs). -# Details+However this flexibility comes at the price of complicating the code. I'm no longer sure it was the right tradeoff, especially since situations where you'd want to change what validators make up a `Spec` at runtime seem rare. -## Goals+Also, there are edge cases of JSON Schema that `hjsonschema` doesn't implement properly (as you can see from the issue tracker). My motivation to fix them myself has ended. However, I'll still maintain the library, give feedback on issues, and merge PRs. I'd also be happy to advise any Haskellers who are interested in writing their own JSON Schema libraries. -+ Be a correct and fast implementation of the spec.+# System dependencies -+ Be a useful reference for implementers in other languages. Haskell's high level nature, expressive type system and referential transparency suit this purpose well.++ Requires [pcre](http://www.pcre.org/) (`pkgs.pcre` in Nixpkgs). -## Issues+# Tests -+ Doesn't pass all of the tests in the [language agnostic test suite](https://github.com/json-schema/JSON-Schema-Test-Suite). See the issue list for details.+Run all: `stack test` -+ Uses the [pcre-heavy](https://hackage.haskell.org/package/pcre-heavy) regular expression library for the "pattern" validator. It should use a library based on the ECMA 262 regex dialect, which the [spec](http://json-schema.org/latest/json-schema-validation.html#anchor33) requires.+Run only local tests: `stack test hjsonschema:local` -+ Currently doesn't support the optional `"format"` validators.+Run only remote tests (temporarily starts an HTTP server on port 1234 and makes GETs to json-schema.org): `stack test hjsonschema:remote`  ## Vendoring @@ -53,11 +35,3 @@ + `src/draft4.json` is from commit # c1b12bf699f29a04b4286711c6e3bbfba66f21e5 [here](https://github.com/json-schema/json-schema). The [root ref in remote ref](./JSON-Schema-Test-Suite/tests/draft4/refRemote.json) test has been modified to fix [#175](https://github.com/json-schema-org/JSON-Schema-Test-Suite/issues/175).  + `.travis.yml` was created with `make_travis_yml_2.hs` commit # ea6c7d177a97bfbfb2fdc4deba943d60d2aff199.--## Credits--[TJ Weigel](http://tjweigel.com/) created the logo.--[Tim Baumann](https://github.com/timjb) wrote [aeson-schema](https://hackage.haskell.org/package/aeson-schema), on which hjsonschema's test code and its implementation of `SchemaGraph` were based.--[Julian Berman](https://github.com/Julian) maintains the fantastic [language agnostic test suite](https://github.com/json-schema/JSON-Schema-Test-Suite).
changelog.md view
@@ -1,3 +1,8 @@+# 1.8.0+++ Allow HTTPS references (thanks @creichert!).++ Use `safe-exceptions` to eliminate the risk of catching asynchronous exceptions.+ # 1.7.2  + Remove upper bounds.
examples/AlternateSchema.hs view
@@ -5,28 +5,23 @@ -- to copy this module instead of the 'JSONSchema.Draft4'. While it's -- less convenient to write schemas in Haskell without a record type, you -- can get the implementation finished with far fewer lines of code.- module AlternateSchema where  import           Protolude -import           Data.Aeson                     (FromJSON(..), Value(..),-                                                 decodeStrict)-import qualified Data.Aeson                     as AE-import qualified Data.HashMap.Strict            as HM-import           Data.Maybe                     (fromMaybe)-import           Data.Profunctor                (Profunctor (..))+import           Data.Aeson (FromJSON(..), Value(..), decodeStrict)+import qualified Data.Aeson as AE+import qualified Data.HashMap.Strict as HM+import           Data.Maybe (fromMaybe)+import           Data.Profunctor (Profunctor(..)) -import           JSONSchema.Draft4              (ValidatorFailure(..),-                                                 metaSchemaBytes)-import           JSONSchema.Fetch               (SchemaWithURI(..),-                                                 URISchemaMap(..))-import qualified JSONSchema.Fetch               as FE-import           JSONSchema.Types               (Schema(..), Spec(..))-import qualified JSONSchema.Types               as JT-import qualified JSONSchema.Validator.Draft4    as D4-import           JSONSchema.Validator.Reference (BaseURI(..),-                                                 Scope(..),+import           JSONSchema.Draft4 (ValidatorFailure(..), metaSchemaBytes)+import           JSONSchema.Fetch (SchemaWithURI(..), URISchemaMap(..))+import qualified JSONSchema.Fetch as FE+import           JSONSchema.Types (Schema(..), Spec(..))+import qualified JSONSchema.Types as JT+import qualified JSONSchema.Validator.Draft4 as D4+import           JSONSchema.Validator.Reference (BaseURI(..), Scope(..),                                                  updateResolutionScope)  --------------------------------------------------
examples/Simple.hs view
@@ -1,14 +1,13 @@- module Simple where  import           Protolude -import           Data.Aeson         (Value(..), decodeStrict, toJSON)-import qualified Data.ByteString    as BS+import           Data.Aeson (Value(..), decodeStrict, toJSON)+import qualified Data.ByteString as BS import qualified Data.List.NonEmpty as NE-import           Data.Maybe         (fromMaybe)+import           Data.Maybe (fromMaybe) -import qualified JSONSchema.Draft4  as D4+import qualified JSONSchema.Draft4 as D4  badData :: Value badData = toJSON [True, True]
examples/TwoStep.hs view
@@ -10,15 +10,14 @@ -- 'fetchHTTPAndValidate' which fetched references over HTTP (though it -- didn't matter because the last schema didn't actually have any). -- This time we need to get them from the filesystem.- module TwoStep where  import           Protolude -import           Data.Aeson                  (Value (..), toJSON)-import qualified Data.List.NonEmpty          as NE+import           Data.Aeson (Value(..), toJSON)+import qualified Data.List.NonEmpty as NE -import qualified JSONSchema.Draft4           as D4+import qualified JSONSchema.Draft4 as D4 import qualified JSONSchema.Validator.Draft4 as VAL  schema :: D4.Schema
hjsonschema.cabal view
@@ -1,5 +1,5 @@ name:               hjsonschema-version:            1.7.2+version:            1.8.0 synopsis:           JSON Schema library homepage:           https://github.com/seagreen/hjsonschema license:            MIT@@ -34,7 +34,6 @@     NoImplicitPrelude     OverloadedStrings     ScopedTypeVariables-    TupleSections   if impl(ghc >= 8)     default-extensions: StrictData   ghc-options:@@ -70,11 +69,13 @@     , hjsonpointer         >= 1.1     -- 0.4.30 is for parseUrlThrow:     , http-client          >= 0.4.30+    , http-client-tls      >= 0.3     , http-types           >= 0.8     , pcre-heavy           >= 1.0     , profunctors          >= 5.0     , protolude            >= 0.1.10     , QuickCheck           >= 2.8+    , safe-exceptions      >= 0.1.6     , scientific           >= 0.3     , semigroups           >= 0.18     , unordered-containers >= 0.2
src/Import.hs view
@@ -1,16 +1,16 @@  module Import (module Export, fromJSONEither) where -import           Protolude           as Export+import           Protolude as Export -import           Data.Aeson          as Export+import           Data.Aeson as Export import           Data.HashMap.Strict as Export (HashMap)-import           Data.List.NonEmpty  as Export (NonEmpty)-import           Data.Vector         as Export (Vector)-import           Test.QuickCheck     as Export hiding ((.&.), Failure,-                                                       Result, Success)+import           Data.List.NonEmpty as Export (NonEmpty)+import           Data.Vector as Export (Vector)+import           Test.QuickCheck as Export hiding (Failure, Result, Success,+                                            (.&.)) -import qualified Data.Text           as T+import qualified Data.Text as T  fromJSONEither :: FromJSON a => Value -> Either Text a fromJSONEither a =
src/JSONSchema/Draft4.hs view
@@ -37,22 +37,19 @@  import           Import -import qualified Data.ByteString           as BS-import           Data.FileEmbed            (embedFile,-                                            makeRelativeToProject)-import qualified Data.HashMap.Strict       as HM-import qualified Data.List.NonEmpty        as NE-import           Data.Maybe                (fromMaybe)+import qualified Data.ByteString as BS+import           Data.FileEmbed (embedFile, makeRelativeToProject)+import qualified Data.HashMap.Strict as HM+import qualified Data.List.NonEmpty as NE+import           Data.Maybe (fromMaybe) -import           JSONSchema.Draft4.Failure (Invalid(..),-                                            SchemaInvalid(..),+import           JSONSchema.Draft4.Failure (Invalid(..), SchemaInvalid(..),                                             ValidatorFailure(..))-import           JSONSchema.Draft4.Schema  (Schema)-import qualified JSONSchema.Draft4.Schema  as SC-import qualified JSONSchema.Draft4.Spec    as Spec-import           JSONSchema.Fetch          (SchemaWithURI(..),-                                            URISchemaMap(..))-import qualified JSONSchema.Fetch          as FE+import           JSONSchema.Draft4.Schema (Schema)+import qualified JSONSchema.Draft4.Schema as SC+import qualified JSONSchema.Draft4.Spec as Spec+import           JSONSchema.Fetch (SchemaWithURI(..), URISchemaMap(..))+import qualified JSONSchema.Fetch as FE  data HTTPValidationFailure     = HVRequest FE.HTTPFailure
src/JSONSchema/Draft4/Failure.hs view
@@ -1,9 +1,8 @@- module JSONSchema.Draft4.Failure where  import           Import -import           JSONSchema.Draft4.Schema    (Schema)+import           JSONSchema.Draft4.Schema (Schema) import qualified JSONSchema.Validator.Draft4 as VAL  -- | Used to report an entire instance being invalidated, as opposed
src/JSONSchema/Draft4/Schema.hs view
@@ -1,14 +1,13 @@- module JSONSchema.Draft4.Schema where -import           Import                      hiding (mapMaybe)+import           Import hiding (mapMaybe) -import qualified Data.HashMap.Strict         as HM-import           Data.List.NonEmpty          (NonEmpty)-import           Data.Maybe                  (fromJust, isJust)+import qualified Data.HashMap.Strict as HM+import           Data.List.NonEmpty (NonEmpty)+import           Data.Maybe (fromJust, isJust) import           Data.Scientific-import qualified Data.Set                    as Set-import qualified Data.Text                   as T+import qualified Data.Set as Set+import qualified Data.Text as T  import qualified JSONSchema.Validator.Draft4 as D4 import           JSONSchema.Validator.Utils
src/JSONSchema/Draft4/Spec.hs view
@@ -1,22 +1,18 @@- module JSONSchema.Draft4.Spec where  import           Import -import           Data.Maybe                     (fromMaybe)-import           Data.Profunctor                (Profunctor(..))+import           Data.Maybe (fromMaybe)+import           Data.Profunctor (Profunctor(..))  import           JSONSchema.Draft4.Failure-import           JSONSchema.Draft4.Schema       (Schema(..),-                                                 emptySchema)-import           JSONSchema.Fetch               (SchemaWithURI(..),-                                                 URISchemaMap(..))-import qualified JSONSchema.Fetch               as FE-import           JSONSchema.Types               (Spec(..))-import qualified JSONSchema.Types               as JT+import           JSONSchema.Draft4.Schema (Schema(..), emptySchema)+import           JSONSchema.Fetch (SchemaWithURI(..), URISchemaMap(..))+import qualified JSONSchema.Fetch as FE+import           JSONSchema.Types (Spec(..))+import qualified JSONSchema.Types as JT import           JSONSchema.Validator.Draft4-import           JSONSchema.Validator.Reference (BaseURI(..),-                                                 Scope(..),+import           JSONSchema.Validator.Reference (BaseURI(..), Scope(..),                                                  updateResolutionScope)  -- | An implementation of 'JT.embedded'.@@ -43,7 +39,7 @@                                                     (_schemaId (_swSchema sw))         } -validateSubschema +validateSubschema     :: URISchemaMap Schema     -> VisitedSchemas     -> Scope Schema
src/JSONSchema/Fetch.hs view
@@ -1,18 +1,17 @@- module JSONSchema.Fetch where  import           Import -import           Control.Exception              (IOException, catch)-import           Control.Monad                  (foldM)-import qualified Data.ByteString                as BS-import qualified Data.ByteString.Lazy           as LBS-import qualified Data.HashMap.Strict            as HM-import qualified Data.Text                      as T-import qualified Network.HTTP.Client            as NC+import qualified Control.Exception.Safe as Safe+import           Control.Monad (foldM)+import qualified Data.ByteString as BS+import qualified Data.ByteString.Lazy as LBS+import qualified Data.HashMap.Strict as HM+import qualified Data.Text as T+import qualified Network.HTTP.Client as NC+import qualified Network.HTTP.Client.TLS as NCTLS -import           JSONSchema.Validator.Reference (BaseURI(..),-                                                 resolveReference,+import           JSONSchema.Validator.Reference (BaseURI(..), resolveReference,                                                  updateResolutionScope)  --------------------------------------------------@@ -61,9 +60,9 @@     -> SchemaWithURI schema     -> IO (Either HTTPFailure (URISchemaMap schema)) referencesViaHTTP' info sw = do-    manager <- NC.newManager NC.defaultManagerSettings+    manager <- NC.newManager NCTLS.tlsManagerSettings     let f = referencesMethodAgnostic (getURL manager) info sw-    catch (first HTTPParseFailure <$> f) handler+    Safe.catch (first HTTPParseFailure <$> f) handler   where     getURL :: NC.Manager -> Text -> IO BS.ByteString     getURL man url = do@@ -89,7 +88,8 @@     => FetchInfo schema     -> SchemaWithURI schema     -> IO (Either FilesystemFailure (URISchemaMap schema))-referencesViaFilesystem' info sw = catch (first FSParseFailure <$> f) handler+referencesViaFilesystem' info sw =+  Safe.catch (first FSParseFailure <$> f) handler   where     f :: IO (Either Text (URISchemaMap schema))     f = referencesMethodAgnostic (BS.readFile . T.unpack) info sw
src/JSONSchema/Types.hs view
@@ -1,4 +1,3 @@- module JSONSchema.Types where  import           Import
src/JSONSchema/Validator/Draft4.hs view
@@ -2,7 +2,6 @@ -- -- This is frankly a lot of busywork. It can perhaps be moved into the -- validator modules themselves once we're sure this is the right design.- module JSONSchema.Validator.Draft4     ( module JSONSchema.Validator.Draft4     , module Export@@ -10,16 +9,16 @@  import           Import -import qualified Data.HashMap.Strict                as HM-import qualified Data.List.NonEmpty                 as NE+import qualified Data.HashMap.Strict as HM+import qualified Data.List.NonEmpty as NE -import           JSONSchema.Validator.Draft4.Any    as Export-import           JSONSchema.Validator.Draft4.Array  as Export+import           JSONSchema.Validator.Draft4.Any as Export+import           JSONSchema.Validator.Draft4.Array as Export import           JSONSchema.Validator.Draft4.Number as Export import           JSONSchema.Validator.Draft4.Object as Export import           JSONSchema.Validator.Draft4.String as Export-import           JSONSchema.Validator.Reference     (BaseURI(..), Scope(..))-import           JSONSchema.Validator.Types         (Validator(..))+import           JSONSchema.Validator.Reference (BaseURI(..), Scope(..))+import           JSONSchema.Validator.Types (Validator(..))  -- | For internal use. --@@ -148,7 +147,7 @@                <> HM.elems (fromMaybe mempty (_propPattern a))                <> case _propAdditional a of                       Just (AdditionalPropertiesObject b) -> [b]-                      _ -> mempty+                      _                                   -> mempty                ))         (\a b -> case fromJSONEither b of                      Left _  -> mempty
src/JSONSchema/Validator/Draft4/Any.hs view
@@ -1,25 +1,23 @@- module JSONSchema.Validator.Draft4.Any where -import           Import                         hiding ((<>))+import           Import hiding ((<>)) -import           Data.Aeson.TH                  (constructorTagModifier)-import           Data.Char                      (toLower)-import           Data.List.NonEmpty             (NonEmpty((:|)))-import qualified Data.List.NonEmpty             as NE-import qualified Data.Scientific                as SCI+import           Data.Aeson.TH (constructorTagModifier)+import           Data.Char (toLower)+import           Data.List.NonEmpty (NonEmpty((:|)))+import qualified Data.List.NonEmpty as NE+import qualified Data.Scientific as SCI import           Data.Semigroup-import           Data.Set                       (Set)-import qualified Data.Set                       as Set-import           Data.Text.Encoding.Error       (UnicodeException)-import qualified JSONPointer                    as JP-import           Network.HTTP.Types.URI         (urlDecode)+import           Data.Set (Set)+import qualified Data.Set as Set+import           Data.Text.Encoding.Error (UnicodeException)+import qualified JSONPointer as JP+import           Network.HTTP.Types.URI (urlDecode) -import qualified JSONSchema.Validator.Utils     as UT-import           JSONSchema.Validator.Reference (BaseURI(..),-                                                 Scope(..),+import           JSONSchema.Validator.Reference (BaseURI(..), Scope(..),                                                  URIAndFragment,                                                  resolveReference)+import qualified JSONSchema.Validator.Utils as UT  -------------------------------------------------- -- * $ref
src/JSONSchema/Validator/Draft4/Array.hs view
@@ -1,11 +1,10 @@- module JSONSchema.Validator.Draft4.Array where  import           Import -import qualified Data.List.NonEmpty         as NE-import qualified Data.Vector                as V-import qualified JSONPointer                as JP+import qualified Data.List.NonEmpty as NE+import qualified Data.Vector as V+import qualified JSONPointer as JP  import           JSONSchema.Validator.Utils (allUniqueValues) @@ -174,7 +173,8 @@         :: schema         -> (JP.Index, Value)         -> Maybe (JP.Index, NonEmpty err)-    validateElem schema (index,x) = (index,) <$> NE.nonEmpty (f schema x)+    validateElem schema (index,x) =+        (\v -> (index, v)) <$> NE.nonEmpty (f schema x)  -------------------------------------------------- -- * additionalItems@@ -219,6 +219,7 @@     AdditionalItemsBoolInvalid <$> NE.nonEmpty xs additionalItemsVal f (AdditionalObject subSchema) xs =     let res = mapMaybe-                  (\(index,x) -> (index,) <$> NE.nonEmpty (f subSchema x))+                  (\(index,x) -> (\v -> (index, v))+                             <$> NE.nonEmpty (f subSchema x))                   xs     in AdditionalItemsObjectInvalid <$> NE.nonEmpty res
src/JSONSchema/Validator/Draft4/Number.hs view
@@ -1,9 +1,8 @@- module JSONSchema.Validator.Draft4.Number where  import           Import -import           Data.Fixed      (mod')+import           Data.Fixed (mod') import           Data.Scientific (Scientific)  --------------------------------------------------
src/JSONSchema/Validator/Draft4/Object.hs view
@@ -1,4 +1,3 @@- module JSONSchema.Validator.Draft4.Object   ( module JSONSchema.Validator.Draft4.Object   , module JSONSchema.Validator.Draft4.Object.Properties@@ -6,11 +5,11 @@  import           Import -import qualified Data.HashMap.Strict                           as HM-import qualified Data.List.NonEmpty                            as NE-import           Data.Set                                      (Set)-import qualified Data.Set                                      as Set-import qualified Data.Text                                     as T+import qualified Data.HashMap.Strict as HM+import qualified Data.List.NonEmpty as NE+import           Data.Set (Set)+import qualified Data.Set as Set+import qualified Data.Text as T  import           JSONSchema.Validator.Draft4.Object.Properties import           JSONSchema.Validator.Utils
src/JSONSchema/Validator/Draft4/Object/Properties.hs view
@@ -1,13 +1,12 @@- module JSONSchema.Validator.Draft4.Object.Properties where  import           Import -import qualified Data.Hashable         as HA-import qualified Data.HashMap.Strict   as HM-import qualified Data.List.NonEmpty    as NE-import           Data.Text.Encoding    (encodeUtf8)-import qualified JSONPointer           as JP+import qualified Data.Hashable as HA+import qualified Data.HashMap.Strict as HM+import qualified Data.List.NonEmpty as NE+import           Data.Text.Encoding (encodeUtf8)+import qualified JSONPointer as JP import qualified Text.Regex.PCRE.Heavy as RE  data PropertiesRelated schema = PropertiesRelated
src/JSONSchema/Validator/Draft4/String.hs view
@@ -1,10 +1,9 @@- module JSONSchema.Validator.Draft4.String where  import           Import -import qualified Data.Text             as T-import           Data.Text.Encoding    (encodeUtf8)+import qualified Data.Text as T+import           Data.Text.Encoding (encodeUtf8) import qualified Text.Regex.PCRE.Heavy as RE  --------------------------------------------------
src/JSONSchema/Validator/Reference.hs view
@@ -3,15 +3,14 @@ -- -- And is extended for JSON Schema here: -- <http://json-schema.org/latest/json-schema-core.html#anchor26>- module JSONSchema.Validator.Reference where  import           Import -import qualified Data.Text       as T-import           System.FilePath ((</>), dropFileName)+import qualified Data.Text as T+import           System.FilePath (dropFileName, (</>)) -data Scope schema = Scope +data Scope schema = Scope     { _topLevelDocument :: schema     , _documentURI      :: Maybe Text     , _currentBaseURI   :: BaseURI@@ -25,9 +24,10 @@ type URIAndFragment = (Maybe Text, Maybe Text)  updateResolutionScope :: BaseURI -> Maybe Text -> BaseURI-updateResolutionScope base idKeyword-    | Just t <- idKeyword = BaseURI . fst . baseAndFragment $ resolveScopeAgainst base t-    | otherwise           = base+updateResolutionScope base idKeyword =+    case idKeyword of+        Just t  -> BaseURI . fst . baseAndFragment $ resolveScopeAgainst base t+        Nothing -> base  resolveReference :: BaseURI -> Text -> URIAndFragment resolveReference base t = baseAndFragment (resolveScopeAgainst base t)
src/JSONSchema/Validator/Types.hs view
@@ -1,4 +1,3 @@- module JSONSchema.Validator.Types where  import           Import
src/JSONSchema/Validator/Utils.hs view
@@ -1,16 +1,15 @@- module JSONSchema.Validator.Utils where  import           Import -import           Control.Monad       (fail)+import           Control.Monad (fail) import qualified Data.HashMap.Strict as HM-import qualified Data.List.NonEmpty  as NE-import           Data.Scientific     (Scientific, fromFloatDigits)-import           Data.Set            (Set)-import qualified Data.Set            as S-import qualified Data.Text           as T-import qualified Data.Vector         as V+import qualified Data.List.NonEmpty as NE+import           Data.Scientific (Scientific, fromFloatDigits)+import           Data.Set (Set)+import qualified Data.Set as S+import qualified Data.Text as T+import qualified Data.Vector as V  -------------------------------------------------- -- * QuickCheck
test/Local.hs view
@@ -1,19 +1,18 @@- module Main where  import           Protolude  import           Data.Aeson import qualified Data.List.NonEmpty as NE-import qualified System.Timeout     as TO+import qualified System.Timeout as TO import           Test.Hspec-import           Test.QuickCheck    (property)+import           Test.QuickCheck (property) -import qualified JSONSchema.Draft4  as D4-import qualified JSONSchema.Types   as JT+import qualified JSONSchema.Draft4 as D4+import qualified JSONSchema.Types as JT import qualified Local.Failure-import qualified Local.Validation import qualified Local.Reference+import qualified Local.Validation import           Shared  -- Examples
test/Local/Failure.hs view
@@ -1,15 +1,14 @@- module Local.Failure where  import           Protolude  import           Data.Aeson+import qualified Data.Vector as V+import qualified JSONPointer as JP import           Test.Hspec-import qualified Data.Vector                 as V-import qualified JSONPointer                 as JP  import           JSONSchema.Draft4-import qualified JSONSchema.Draft4.Spec      as Spec+import qualified JSONSchema.Draft4.Spec as Spec import qualified JSONSchema.Validator.Draft4 as VAL  spec :: Spec
test/Local/Reference.hs view
@@ -1,4 +1,3 @@- module Local.Reference where  import           Protolude
test/Local/Validation.hs view
@@ -1,17 +1,16 @@- module Local.Validation where  import           Protolude  import           Data.Aeson-import qualified Data.Aeson          as AE+import qualified Data.Aeson as AE import qualified Data.HashMap.Strict as HM-import           Data.String         (String)+import           Data.String (String) import           Test.Hspec +import qualified AlternateSchema as AS import           JSONSchema.Draft4-import qualified JSONSchema.Types    as JT-import qualified AlternateSchema     as AS+import qualified JSONSchema.Types as JT  spec :: Spec spec = do
test/Remote.hs view
@@ -1,17 +1,16 @@- module Main where  import           Protolude -import           Control.Concurrent.Async       (withAsync)-import qualified Data.List.NonEmpty             as NE+import           Control.Concurrent.Async (withAsync)+import qualified Data.List.NonEmpty as NE import           Network.Wai.Application.Static (defaultFileServerSettings,                                                  staticApp)-import           Network.Wai.Handler.Warp       (run)+import qualified Network.Wai.Handler.Warp as Warp import           Test.Hspec -import qualified JSONSchema.Draft4              as D4-import qualified JSONSchema.Types               as JT+import qualified JSONSchema.Draft4 as D4+import qualified JSONSchema.Types as JT import           Shared  -- Examples@@ -52,7 +51,7 @@                 assertResult sc failures  serve :: IO ()-serve = run 1234+serve = Warp.run 1234       . staticApp       . defaultFileServerSettings       $ "JSON-Schema-Test-Suite/remotes"
test/Shared.hs view
@@ -1,17 +1,16 @@- module Shared where  import           Protolude -import           Control.Monad    (fail)+import           Control.Monad (fail) import           Data.Aeson-import           Data.Aeson.TH    (fieldLabelModifier)-import qualified Data.ByteString  as BS-import           Data.Char        (toLower)-import           Data.List        (stripPrefix, unlines)-import qualified Data.Text        as T+import           Data.Aeson.TH (fieldLabelModifier)+import qualified Data.ByteString as BS+import           Data.Char (toLower)+import           Data.List (stripPrefix, unlines)+import qualified Data.Text as T import qualified System.Directory as SD-import           System.FilePath  ((</>))+import           System.FilePath ((</>)) import           Test.Hspec  skipTest :: FilePath -> Bool