git.iko.soy/typeable/postgresql-simple
on master help sign in
Regression test for #90
1c4d2f3Leon P Smith
postgresql-simple.cabal+1
@@ -105,6 +105,7 @@ test-suite test
105 , ScopedTypeVariables
105 , ScopedTypeVariables
106
106
107 build-depends: base
107 build-depends: base
108+ , aeson
108 , base16-bytestring
109 , base16-bytestring
109 , bytestring
110 , bytestring
110 , containers
111 , containers
test/Main.hs+16
@@ -12,11 +12,13 @@ import Data.ByteString (ByteString)
12import Data.IORef
12import Data.IORef
13import Data.Typeable
13import Data.Typeable
14import qualified Data.ByteString as B
14import qualified Data.ByteString as B
15+import Data.Map (Map)
15import qualified Data.Map as Map
16import qualified Data.Map as Map
16import Data.Text(Text)
17import Data.Text(Text)
17import System.Exit (exitFailure)
18import System.Exit (exitFailure)
18import System.IO
19import System.IO
19import qualified Data.Vector as V
20import qualified Data.Vector as V
21+import Data.Aeson
20
22
21import Notify
23import Notify
22import Serializable
24import Serializable
@@ -32,6 +34,7 @@ tests =
32 , TestLabel "Time" . testTime
34 , TestLabel "Time" . testTime
33 , TestLabel "Array" . testArray
35 , TestLabel "Array" . testArray
34 , TestLabel "HStore" . testHStore
36 , TestLabel "HStore" . testHStore
37+ , TestLabel "JSON" . testJSON
35 , TestLabel "Savepoint" . testSavepoint
38 , TestLabel "Savepoint" . testSavepoint
36 ]
39 ]
37
40
@@ -166,6 +169,19 @@ testHStore TestEnv{..} = TestCase $ do
166 m' <- query conn "SELECT ?::hstore" m
169 m' <- query conn "SELECT ?::hstore" m
167 [m] @?= m'
170 [m] @?= m'
168
171
172+testJSON :: TestEnv -> Test
173+testJSON TestEnv{..} = TestCase $ do
174+ roundTrip (Map.fromList [] :: Map ByteString ByteString)
175+ roundTrip (Map.fromList [("foo","bar"),("bar","baz"),("baz","hello")] :: Map ByteString ByteString )
176+ roundTrip (Map.fromList [("fo\"o","bar"),("b\\ar","baz"),("baz","\"value\\with\"escapes")] :: Map ByteString ByteString)
177+ roundTrip (V.fromList [1,2,3,4,5::Int])
178+ where
179+ roundTrip :: ToJSON a => a -> Assertion
180+ roundTrip a = do
181+ let js = Only (toJSON a)
182+ js' <- query conn "SELECT ?::json" js
183+ [js] @?= js'
184+
169testSavepoint :: TestEnv -> Test
185testSavepoint :: TestEnv -> Test
170testSavepoint TestEnv{..} = TestCase $ do
186testSavepoint TestEnv{..} = TestCase $ do
171 True <- expectError ST.isNoActiveTransactionError $
187 True <- expectError ST.isNoActiveTransactionError $