@@ -8,7 +8,7 @@ import qualified TestParallelism as P
8
8
import Data.Maybe
9
9
import Data.List (sortBy )
10
10
import Data.Function (on )
11
- import Data.Aeson
11
+ import Data.Aeson as A
12
12
import Data.Aeson.Types
13
13
import Data.Text (Text )
14
14
import qualified Data.ByteString.Lazy.Char8 as B
@@ -20,11 +20,16 @@ import Control.Monad.Identity
20
20
import Test.HUnit hiding (State )
21
21
import Test.Framework
22
22
import Test.Framework.Providers.HUnit
23
+ import Prelude hiding (subtract )
23
24
24
25
main :: IO ()
25
- main = defaultMain [ testCase " encode RPC error" testEncodeRpcError
26
+ main = defaultMain [ testCase " encode RPC error" $
27
+ fromByteString (encode $ rpcError (- 1 ) " error" ) @?= Just (TestRpcError (- 1 ) " error" Nothing )
26
28
27
- , testCase " encode error with data" testEncodeErrorWithData
29
+ , let err = rpcErrorWithData 1 " my message" errData
30
+ testError = TestRpcError 1 " my message" $ Just $ toJSON errData
31
+ errData = (' \x03BB ' , [True ], () )
32
+ in testCase " encode error with data" $ fromByteString (encode err) @?= Just testError
28
33
29
34
, testCase " invalid JSON" $
30
35
assertSubtractResponse (" 5" :: String ) (errResponse idNull (- 32700 ))
@@ -35,7 +40,8 @@ main = defaultMain [ testCase "encode RPC error" testEncodeRpcError
35
40
, testCase " empty batch call" $
36
41
assertSubtractResponse emptyArray (errResponse idNull (- 32600 ))
37
42
38
- , testCase " invalid batch element" testInvalidBatchElement
43
+ , testCase " invalid batch element" $
44
+ map removeErrMsg <$> callSubtractMethods [True ] @?= Just [errResponse idNull (- 32600 )]
39
45
40
46
, testCase " wrong version in request" testWrongVersion
41
47
@@ -69,9 +75,15 @@ main = defaultMain [ testCase "encode RPC error" testEncodeRpcError
69
75
, testCase " batch request" testBatch
70
76
, testCase " batch notifications" testBatchNotifications
71
77
, testCase " allow missing version" testAllowMissingVersion
72
- , testCase " no arguments" testNoArgs
73
- , testCase " empty argument array" testEmptyUnnamedArgs
74
- , testCase " empty argument object" testEmptyNamedArgs
78
+
79
+ , testCase " no arguments" $
80
+ assertGetTimeResponse (Nothing :: Maybe Value )
81
+
82
+ , testCase " empty argument array" $
83
+ assertGetTimeResponse $ Just (empty :: Array )
84
+
85
+ , testCase " empty argument object" $
86
+ assertGetTimeResponse $ Just (H. empty :: Object )
75
87
76
88
, let req = subtractRequestNamed [(" x" , Number 10 ), (" y" , Number 20 ), (" z" , String " extra" )] nonNullId
77
89
rsp = TestResponse nonNullId $ Right $ Number (- 10 )
@@ -91,25 +103,10 @@ main = defaultMain [ testCase "encode RPC error" testEncodeRpcError
91
103
92
104
, testCase " parallelize tasks" P. testParallelizingTasks ]
93
105
94
- testEncodeRpcError :: Assertion
95
- testEncodeRpcError = fromByteString (encode err) @?= Just testError
96
- where err = rpcError (- 1 ) " error"
97
- testError = TestRpcError (- 1 ) " error" Nothing
98
-
99
- testEncodeErrorWithData :: Assertion
100
- testEncodeErrorWithData = fromByteString (encode err) @?= Just testError
101
- where err = rpcErrorWithData 1 " my message" errorData
102
- testError = TestRpcError 1 " my message" $ Just $ toJSON errorData
103
- errorData = (' \x03BB ' , [True ], () )
104
-
105
106
assertSubtractResponse :: ToJSON a => a -> TestResponse -> Assertion
106
107
assertSubtractResponse request expectedRsp = removeErrMsg <$> rsp @?= Just expectedRsp
107
108
where rsp = callSubtractMethods request
108
109
109
- testInvalidBatchElement :: Assertion
110
- testInvalidBatchElement = map removeErrMsg <$> rsp @?= Just [errResponse idNull (- 32600 )]
111
- where rsp = callSubtractMethods [True ]
112
-
113
110
testWrongVersion :: Assertion
114
111
testWrongVersion = removeErrMsg <$> rsp @?= Just (errResponse idNull (- 32600 ))
115
112
where rsp = callSubtractMethods $ Object $ H. insert versionKey (String " 1" ) hm
@@ -137,26 +134,17 @@ testAllowMissingVersion = (fromByteString =<< runIdentity response) @?= (Just $
137
134
response = call (toMethods [subtractMethod]) $ encode requestNoVersion
138
135
i = idNumber (- 1 )
139
136
140
- testNoArgs :: Assertion
141
- testNoArgs = compareGetTimeResult Nothing
142
-
143
- testEmptyUnnamedArgs :: Assertion
144
- testEmptyUnnamedArgs = compareGetTimeResult $ Just $ Right empty
145
-
146
- testEmptyNamedArgs :: Assertion
147
- testEmptyNamedArgs = compareGetTimeResult $ Just $ Left H. empty
148
-
149
137
incrementStateMethod :: Method (State Int )
150
138
incrementStateMethod = toMethod " increment" f ()
151
139
where f :: RpcResult (State Int ) ()
152
140
f = lift $ modify (+ 1 )
153
141
154
- compareGetTimeResult :: Maybe ( Either Object Array ) -> Assertion
155
- compareGetTimeResult requestArgs = assertEqual " unexpected rpc response" expected =<<
156
- ((fromByteString . fromJust ) <$> call (toMethods [getTimeMethod]) (encode getTimeRequest))
157
- where expected = Just $ TestResponse i (Right $ Number 100 )
158
- getTimeRequest = TestRequest " get_time_seconds" requestArgs (Just i )
159
- i = idString " Id 1 "
142
+ assertGetTimeResponse :: ToJSON a => a -> Assertion
143
+ assertGetTimeResponse args = passed @? " unexpected RPC response"
144
+ where passed = (expected == ) <$> rsp
145
+ expected = Just $ TestResponse nonNullId (Right $ Number 100 )
146
+ req = TestRequest " get_time_seconds" ( Just args) (Just nonNullId )
147
+ rsp = callGetTimeMethod req
160
148
161
149
subtractRequestNamed :: [(Text , Value )] -> TestId -> TestRequest
162
150
subtractRequestNamed args i = TestRequest " subtract" (Just $ H. fromList args) (Just i)
@@ -170,28 +158,31 @@ callSubtractMethods req = let methods :: Methods Identity
170
158
rsp = call methods $ encode req
171
159
in fromByteString =<< runIdentity rsp
172
160
161
+ callGetTimeMethod :: TestRequest -> IO (Maybe TestResponse )
162
+ callGetTimeMethod req = let methods :: Methods IO
163
+ methods = toMethods [getTimeMethod]
164
+ rsp = call methods $ encode req
165
+ in (fromByteString =<< ) <$> rsp
166
+
173
167
fromByteString :: FromJSON a => B. ByteString -> Maybe a
174
168
fromByteString str = case fromJSON <$> decode str of
175
169
Just (Success x) -> Just x
176
170
_ -> Nothing
177
171
178
172
subtractMethod :: Method Identity
179
- subtractMethod = toMethod " subtract" sub (Required " x" :+: Optional " y" 0 :+: () )
180
- where sub :: Int -> Int -> RpcResult Identity Int
181
- sub x y = return (x - y)
173
+ subtractMethod = toMethod " subtract" subtract (Required " x" :+: Optional " y" 0 :+: () )
182
174
183
175
flippedSubtractMethod :: Method Identity
184
- flippedSubtractMethod = toMethod " subtract 2" sub (Optional " y" (- 1000 ) :+: Required " x" :+: () )
185
- where sub :: Int -> Int -> RpcResult Identity Int
186
- sub y x = return (x - y)
176
+ flippedSubtractMethod = toMethod " subtract 2" (flip subtract ) params
177
+ where params = Optional " y" (- 1000 ) :+: Required " x" :+: ()
187
178
188
- getTimeMethod :: Method IO
189
- getTimeMethod = toMethod " get_time_seconds" getTime ()
190
- where getTime :: RpcResult IO Integer
191
- getTime = liftIO getTestTime
179
+ subtract :: Int -> Int -> RpcResult Identity Int
180
+ subtract x y = return (x - y)
192
181
193
- getTestTime :: IO Integer
194
- getTestTime = return 100
182
+ getTimeMethod :: Method IO
183
+ getTimeMethod = toMethod " get_time_seconds" getTestTime ()
184
+ where getTestTime :: RpcResult IO Integer
185
+ getTestTime = liftIO $ return 100
195
186
196
187
removeErrMsg :: TestResponse -> TestResponse
197
188
removeErrMsg (TestResponse i (Left (TestRpcError code _ _)))
0 commit comments