@@ -41,7 +41,9 @@ main = hspec spec
41
41
spec :: Spec
42
42
spec = do
43
43
describe " dispatcher" jsonSpec
44
- describe " ResponseMessage" responseMessageSpec
44
+ describe " RequestMessage" requestMessageSpec
45
+ describe " ResponseMessage" responseMessageSpec
46
+ describe " NotificationMesssage" notificationMessageSpec
45
47
46
48
-- ---------------------------------------------------------------------
47
49
@@ -61,16 +63,20 @@ jsonSpec = do
61
63
`shouldNotBe` Nothing
62
64
63
65
66
+ requestMessageSpec :: Spec
67
+ requestMessageSpec = do
68
+ describe " edge cases" $ do
69
+ it " handles missing params field" $ do
70
+ J. eitherDecode " { \" jsonrpc\" : \" 2.0\" , \" id\" : 15, \" method\" : \" shutdown\" }"
71
+ `shouldBe` Right (TRequestMessage " 2.0" (IdInt 15 ) SMethod_Shutdown Nothing )
72
+
64
73
responseMessageSpec :: Spec
65
74
responseMessageSpec = do
66
75
describe " edge cases" $ do
67
76
it " decodes result = null" $ do
68
77
let input = " {\" jsonrpc\" : \" 2.0\" , \" id\" : 123, \" result\" : null}"
69
78
in J. decode input `shouldBe` Just
70
79
((TResponseMessage " 2.0" (Just (IdInt 123 )) (Right $ InL J. Null )) :: TResponseMessage 'Method_WorkspaceExecuteCommand)
71
- it " handles missing params field" $ do
72
- J. eitherDecode " { \" jsonrpc\" : \" 2.0\" , \" id\" : 15, \" method\" : \" shutdown\" }"
73
- `shouldBe` Right (TRequestMessage " 2.0" (IdInt 15 ) SMethod_Shutdown Nothing )
74
80
describe " invalid JSON" $ do
75
81
it " throws if neither result nor error is present" $ do
76
82
(J. eitherDecode " {\" jsonrpc\" :\" 2.0\" ,\" id\" :1}" :: Either String (TResponseMessage 'Method_Initialize))
@@ -82,6 +88,13 @@ responseMessageSpec = do
82
88
`shouldSatisfy `
83
89
(either (\ err -> " Error in $: both error and result cannot be present" `isPrefixOf ` err ) (\ _ -> False ))
84
90
91
+ notificationMessageSpec :: Spec
92
+ notificationMessageSpec = do
93
+ describe " edge cases" $ do
94
+ it " handles missing params field" $ do
95
+ J. eitherDecode " { \" jsonrpc\" : \" 2.0\" , \" method\" : \" exit\" }"
96
+ `shouldBe` Right (TNotificationMessage " 2.0" SMethod_Exit Nothing )
97
+
85
98
-- ---------------------------------------------------------------------
86
99
87
100
propertyJsonRoundtrip :: (Eq a , Show a , J. ToJSON a , J. FromJSON a ) => a -> Property
0 commit comments