@@ -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
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
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
@@ -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'
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])
179+ roundTrip :: ToJSON a => a -> Assertion
181+ let js = Only (toJSON a)
182+ js' <- query conn "SELECT ?::json" js
169testSavepoint :: TestEnv -> Test
185testSavepoint :: TestEnv -> Test
170testSavepoint TestEnv{..} = TestCase $ do
186testSavepoint TestEnv{..} = TestCase $ do
171 True <- expectError ST.isNoActiveTransactionError $
187 True <- expectError ST.isNoActiveTransactionError $