Skip to content

Commit 86f979b

Browse files
committed
Continued refactoring tests
1 parent 95585fc commit 86f979b

File tree

5 files changed

+193
-196
lines changed

5 files changed

+193
-196
lines changed

json-rpc-server.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ executable demo
5555
test-suite tests
5656
hs-source-dirs: tests
5757
main-is: TestSuite.hs
58-
other-modules: TestTypes
58+
other-modules: TestParallelism, Internal
5959
type: exitcode-stdio-1.0
6060
build-depends: base >=4.5 && <4.7,
6161
json-rpc-server,

tests/Internal.hs

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
{-# LANGUAGE OverloadedStrings,
2+
ExistentialQuantification #-}
3+
4+
module Internal ( request
5+
, request2_0
6+
, idRequest
7+
, successRsp
8+
, idSuccessRsp
9+
, errRsp
10+
, rpcErr
11+
, idErrRsp
12+
, fromJson
13+
, array
14+
, defaultId
15+
, errKey
16+
, dataKey
17+
, msgKey
18+
, resultKey
19+
, idKey
20+
, versionKey) where
21+
22+
import qualified Data.Aeson as A
23+
import Data.Aeson ((.=))
24+
import Data.Maybe (catMaybes)
25+
import qualified Data.Vector as V
26+
import Data.Text (Text)
27+
import Control.Applicative ((<$>))
28+
29+
fromJson :: A.FromJSON a => A.Value -> Maybe a
30+
fromJson v = case A.fromJSON v of
31+
A.Success x -> Just x
32+
_ -> Nothing
33+
34+
array :: [A.Value] -> A.Value
35+
array = A.Array . V.fromList
36+
37+
idRequest :: Text -> Maybe A.Value -> A.Value
38+
idRequest = request2_0 (Just defaultId)
39+
40+
request2_0 :: Maybe A.Value -> Text -> Maybe A.Value -> A.Value
41+
request2_0 i = request (Just version) i . A.String
42+
43+
request :: Maybe Text -> Maybe A.Value -> A.Value -> Maybe A.Value -> A.Value
44+
request ver i method args = A.object $ catMaybes [ Just $ "method" .= method
45+
, ("params" .=) <$> args
46+
, (idKey .=) <$> i
47+
, (versionKey .=) <$> ver ]
48+
49+
idSuccessRsp :: A.Value -> A.Value
50+
idSuccessRsp = successRsp defaultId
51+
52+
successRsp :: A.Value -> A.Value -> A.Value
53+
successRsp i = response i "result"
54+
55+
idErrRsp :: Int -> A.Value
56+
idErrRsp = errRsp defaultId
57+
58+
errRsp :: A.Value -> Int -> A.Value
59+
errRsp i code = response i errKey $ rpcErr Nothing code ""
60+
61+
rpcErr :: Maybe A.Value -> Int -> Text -> A.Value
62+
rpcErr d code msg = A.object $ ["code" .= code, msgKey .= msg] ++ dataPair
63+
where dataPair = catMaybes [(dataKey .=) <$> d]
64+
65+
response :: A.Value -> Text -> A.Value -> A.Value
66+
response i key result = A.object [idKey .= i, key .= result, versionKey .= version]
67+
68+
defaultId :: A.Value
69+
defaultId = A.Number 3
70+
71+
versionKey :: Text
72+
versionKey = "jsonrpc"
73+
74+
idKey :: Text
75+
idKey = "id"
76+
77+
resultKey :: Text
78+
resultKey = "result"
79+
80+
errKey :: Text
81+
errKey = "error"
82+
83+
msgKey :: Text
84+
msgKey = "message"
85+
86+
dataKey :: Text
87+
dataKey = "data"
88+
89+
version :: Text
90+
version = "2.0"

tests/TestParallelism.hs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
module TestParallelism (testParallelizingTasks) where
44

55
import Network.JsonRpc.Server
6-
import TestTypes
6+
import Internal
77
import Data.List (sort)
88
import qualified Data.Aeson as A
9+
import Data.Aeson ((.=))
10+
import qualified Data.Aeson.Types as A
911
import Data.Maybe (fromJust)
1012
import qualified Data.HashMap.Strict as H
1113
import Control.Applicative ((<$>))
@@ -33,18 +35,17 @@ testParallelizingTasks = do
3335
, unlockRequest 'A']
3436
createMethods lock = toMethods [lockMethod lock, unlockMethod lock]
3537

36-
rspToIntId :: TestResponse -> Maybe Int
37-
rspToIntId = fromNumId . rspId
38+
rspToIntId :: A.Value -> Maybe Int
39+
rspToIntId (A.Object rsp) = fromJson =<< H.lookup idKey rsp
3840

39-
rspToCharResult :: TestResponse -> Maybe Char
40-
rspToCharResult rsp = let (Right r) = rspResult rsp
41-
in fromJust $ fromJson r
41+
rspToCharResult :: A.Value -> Maybe Char
42+
rspToCharResult (A.Object rsp) = fromJson =<< H.lookup resultKey rsp
4243

43-
lockRequest :: Int -> TestRequest
44-
lockRequest i = TestRequest "lock" (Nothing :: Maybe ()) (Just $ idNumber i)
44+
lockRequest :: Int -> A.Value
45+
lockRequest i = request2_0 (Just $ A.toJSON i) "lock" $ Just A.emptyObject
4546

46-
unlockRequest :: Char -> TestRequest
47-
unlockRequest ch = TestRequest "unlock" (Just $ H.fromList [("value" :: String, ch)]) Nothing
47+
unlockRequest :: Char -> A.Value
48+
unlockRequest ch = request2_0 Nothing "unlock" $ Just $ A.object ["value" .= ch]
4849

4950
lockMethod :: MVar Char -> Method IO
5051
lockMethod lock = toMethod "lock" f ()

0 commit comments

Comments
 (0)