packages feed

hjsonpointer 0.3.0.1 → 0.3.0.2

raw patch · 5 files changed

+112/−108 lines, 5 filesdep +hspecdep −test-frameworkdep −test-framework-hunitdep −test-framework-quickcheck2dep ~QuickCheckdep ~aesondep ~basePVP ok

version bump matches the API change (PVP)

Dependencies added: hspec

Dependencies removed: test-framework, test-framework-hunit, test-framework-quickcheck2

Dependency ranges changed: QuickCheck, aeson, base

API changes (from Hackage documentation)

Files

Example.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE OverloadedStrings #-} -module Main where+module Example where  import           Control.Monad      (unless) import           Data.Aeson
changelog.md view
@@ -1,4 +1,12 @@-# 0.3+# 0.3.0.2+++ Switch to hspec for tests.++# 0.3.0.1+++ Enable GHC 8.++# 0.3.0.0  + Rewrite. 
hjsonpointer.cabal view
@@ -1,5 +1,5 @@ name:                   hjsonpointer-version:                0.3.0.1+version:                0.3.0.2 synopsis:               JSON Pointer library homepage:               https://github.com/seagreen/hjsonpointer license:                MIT@@ -22,37 +22,30 @@   ghc-options:          -Wall   build-depends:        aeson                >= 0.7  && < 0.12                       , base                 >= 4.6  && < 4.10-                      , QuickCheck           >= 2.8  && < 2.9+                      , QuickCheck           >= 2.8  && < 2.10                       , unordered-containers >= 0.2  && < 0.3                       , text                 >= 1.2  && < 1.3                       , vector               >= 0.10 && < 0.12  test-suite unit   type:                 exitcode-stdio-1.0-  hs-source-dirs:       tests+  hs-source-dirs:       test+                        ./   main-is:              Unit.hs+  other-modules:        Example   default-language:     Haskell2010   ghc-options:          -Wall   default-extensions:   OverloadedStrings   build-depends:        aeson                       , base                       , hjsonpointer+                      , QuickCheck                       , unordered-containers                       , text                       , vector-                      , http-types                 >= 0.8 && < 0.10-                      , HUnit                      >= 1.2 && < 1.4-                      , test-framework             >= 0.8 && < 0.9-                      , test-framework-hunit       >= 0.3 && < 0.4-                      , test-framework-quickcheck2 >= 0.3 && < 0.4--executable example-  main-is:              Example.hs-  default-language:     Haskell2010-  ghc-options:          -Wall-  build-depends:        aeson-                      , base-                      , hjsonpointer+                      , hspec                >= 2.2 && < 2.3+                      , http-types           >= 0.8 && < 0.10+                      , HUnit                >= 1.2 && < 1.4  source-repository head   type:               git
+ test/Unit.hs view
@@ -0,0 +1,93 @@++module Main where++import           Control.Arrow+import           Data.Aeson+import qualified Data.Aeson.Pointer                   as P+import           Data.Text                            (Text)+import qualified Data.Text                            as T+import           Data.Text.Encoding+import qualified Data.Vector                          as V+import           Network.HTTP.Types.URI               (urlDecode)++import           Test.Hspec+import           Test.QuickCheck                      (property)++import           Test.HUnit                           hiding (Test)++-- For GHCs before 7.10:+import           Control.Applicative+import           Data.Foldable+import           Data.Monoid++import qualified Example++main :: IO ()+main = hspec $ do+  describe "example" $ do+    it "compiles and runs without errors" Example.main+  describe "pointers" $ do+    it "can be stored as JSON without changing its value" (property roundtrip)+    it "can be represented in a JSON string value" jsonString+    it "can be represented in a URI fragment identifier" uriFragment++roundtrip :: P.Pointer -> Bool+roundtrip a = Just a == decode (encode a)++jsonString :: Assertion+jsonString = traverse_ resolvesTo+  [ (""      , specExample)+  , ("/foo"  , Array $ V.fromList ["bar", "baz"])+  , ("/foo/0", String "bar")+  , ("/"     , Number 0)+  , ("/a~1b" , Number 1)+  , ("/c%d"  , Number 2)+  , ("/e^f"  , Number 3)+  , ("/g|h"  , Number 4)+  , ("/i\\j" , Number 5)+  , ("/k\"l" , Number 6)+  , ("/ "    , Number 7)+  , ("/m~0n" , Number 8)+  ]++uriFragment :: Assertion+uriFragment = traverse_ resolvesTo . fmap (first decodeFragment) $+  [ ("#"      , specExample)+  , ("#/foo"  , Array $ V.fromList ["bar", "baz"])+  , ("#/foo/0", String "bar")+  , ("#/"     , Number 0)+  , ("#/a~1b" , Number 1)+  , ("#/c%25d", Number 2)+  , ("#/e%5Ef", Number 3)+  , ("#/g%7Ch", Number 4)+  , ("#/i%5Cj", Number 5)+  , ("#/k%22l", Number 6)+  , ("#/%20"  , Number 7)+  , ("#/m~0n" , Number 8)+  ]+  where+    decodeFragment :: Text -> Text+    decodeFragment = T.drop 1 . decodeUtf8 . urlDecode True . encodeUtf8++resolvesTo :: (Text, Value) -> Assertion+resolvesTo (t, expected) =+  case P.unescape t of+    Left e  -> assertFailure (show e <> " error for pointer: " <> show t)+    Right p -> assertEqual+                 ("Resolved value for pointer: " <> show t)+                 (Right expected)+                 (P.resolve p specExample)++specExample :: Value+specExample = object+  [ "foo"  .= (["bar", "baz"] :: [Text])+  , ""     .= (0 :: Int)+  , "a/b"  .= (1 :: Int)+  , "c%d"  .= (2 :: Int)+  , "e^f"  .= (3 :: Int)+  , "g|h"  .= (4 :: Int)+  , "i\\j" .= (5 :: Int)+  , "k\"l" .= (6 :: Int)+  , " "    .= (7 :: Int)+  , "m~n"  .= (8 :: Int)+  ]
− tests/Unit.hs
@@ -1,90 +0,0 @@--module Main where--import           Control.Arrow-import           Data.Aeson-import qualified Data.Aeson.Pointer                   as P-import           Data.Text                            (Text)-import qualified Data.Text                            as T-import           Data.Text.Encoding-import qualified Data.Vector                          as V-import           Network.HTTP.Types.URI               (urlDecode)-import           Test.Framework                       (defaultMain, testGroup)-import           Test.Framework.Providers.HUnit       (testCase)-import           Test.Framework.Providers.QuickCheck2 (testProperty)-import           Test.HUnit                           hiding (Test)---- For GHCs before 7.10:-import           Control.Applicative-import           Data.Foldable-import           Data.Monoid--main :: IO ()-main = defaultMain-  [ testGroup "unit"-    [ testProperty "Storing a Pointer as JSON doesn't change its value" roundtrip-    , testCase "Can be represented in a JSON string value" jsonString-    , testCase "Can be represented in a URI fragment identifier" uriFragment-    ]-  ]--roundtrip :: P.Pointer -> Bool-roundtrip a = Just a == decode (encode a)--jsonString :: Assertion-jsonString = traverse_ resolvesTo-  [ (""      , specExample)-  , ("/foo"  , Array $ V.fromList ["bar", "baz"])-  , ("/foo/0", String "bar")-  , ("/"     , Number 0)-  , ("/a~1b" , Number 1)-  , ("/c%d"  , Number 2)-  , ("/e^f"  , Number 3)-  , ("/g|h"  , Number 4)-  , ("/i\\j" , Number 5)-  , ("/k\"l" , Number 6)-  , ("/ "    , Number 7)-  , ("/m~0n" , Number 8)-  ]--uriFragment :: Assertion-uriFragment = traverse_ resolvesTo . fmap (first decodeFragment) $-  [ ("#"      , specExample)-  , ("#/foo"  , Array $ V.fromList ["bar", "baz"])-  , ("#/foo/0", String "bar")-  , ("#/"     , Number 0)-  , ("#/a~1b" , Number 1)-  , ("#/c%25d", Number 2)-  , ("#/e%5Ef", Number 3)-  , ("#/g%7Ch", Number 4)-  , ("#/i%5Cj", Number 5)-  , ("#/k%22l", Number 6)-  , ("#/%20"  , Number 7)-  , ("#/m~0n" , Number 8)-  ]-  where-    decodeFragment :: Text -> Text-    decodeFragment = T.drop 1 . decodeUtf8 . urlDecode True . encodeUtf8--resolvesTo :: (Text, Value) -> Assertion-resolvesTo (t, expected) =-  case P.unescape t of-    Left e  -> assertFailure (show e <> " error for pointer: " <> show t)-    Right p -> assertEqual-                 ("Resolved value for pointer: " <> show t)-                 (Right expected)-                 (P.resolve p specExample)--specExample :: Value-specExample = object-  [ "foo"  .= (["bar", "baz"] :: [Text])-  , ""     .= (0 :: Int)-  , "a/b"  .= (1 :: Int)-  , "c%d"  .= (2 :: Int)-  , "e^f"  .= (3 :: Int)-  , "g|h"  .= (4 :: Int)-  , "i\\j" .= (5 :: Int)-  , "k\"l" .= (6 :: Int)-  , " "    .= (7 :: Int)-  , "m~n"  .= (8 :: Int)-  ]