@@ -133,3 +133,100 @@ TEST(ProtocolMCPTest, ToolDefinition) {
133
133
EXPECT_EQ (tool_definition.inputSchema ,
134
134
deserialized_tool_definition->inputSchema );
135
135
}
136
+
137
+ TEST (ProtocolMCPTest, MessageWithRequest) {
138
+ Request request;
139
+ request.id = 1 ;
140
+ request.method = " test_method" ;
141
+ request.params = llvm::json::Object{{" param" , " value" }};
142
+
143
+ Message message = request;
144
+
145
+ llvm::Expected<Message> deserialized_message = roundtripJSON (message);
146
+ ASSERT_THAT_EXPECTED (deserialized_message, llvm::Succeeded ());
147
+
148
+ ASSERT_TRUE (std::holds_alternative<Request>(*deserialized_message));
149
+ const Request &deserialized_request =
150
+ std::get<Request>(*deserialized_message);
151
+
152
+ EXPECT_EQ (request.id , deserialized_request.id );
153
+ EXPECT_EQ (request.method , deserialized_request.method );
154
+ EXPECT_EQ (request.params , deserialized_request.params );
155
+ }
156
+
157
+ TEST (ProtocolMCPTest, MessageWithResponse) {
158
+ Response response;
159
+ response.id = 2 ;
160
+ response.result = llvm::json::Object{{" result" , " success" }};
161
+
162
+ Message message = response;
163
+
164
+ llvm::Expected<Message> deserialized_message = roundtripJSON (message);
165
+ ASSERT_THAT_EXPECTED (deserialized_message, llvm::Succeeded ());
166
+
167
+ ASSERT_TRUE (std::holds_alternative<Response>(*deserialized_message));
168
+ const Response &deserialized_response =
169
+ std::get<Response>(*deserialized_message);
170
+
171
+ EXPECT_EQ (response.id , deserialized_response.id );
172
+ EXPECT_EQ (response.result , deserialized_response.result );
173
+ }
174
+
175
+ TEST (ProtocolMCPTest, MessageWithNotification) {
176
+ Notification notification;
177
+ notification.method = " notification_method" ;
178
+ notification.params = llvm::json::Object{{" notify" , " data" }};
179
+
180
+ Message message = notification;
181
+
182
+ llvm::Expected<Message> deserialized_message = roundtripJSON (message);
183
+ ASSERT_THAT_EXPECTED (deserialized_message, llvm::Succeeded ());
184
+
185
+ ASSERT_TRUE (std::holds_alternative<Notification>(*deserialized_message));
186
+ const Notification &deserialized_notification =
187
+ std::get<Notification>(*deserialized_message);
188
+
189
+ EXPECT_EQ (notification.method , deserialized_notification.method );
190
+ EXPECT_EQ (notification.params , deserialized_notification.params );
191
+ }
192
+
193
+ TEST (ProtocolMCPTest, MessageWithError) {
194
+ ErrorInfo error_info;
195
+ error_info.code = -32603 ;
196
+ error_info.message = " Internal error" ;
197
+
198
+ Error error;
199
+ error.id = 3 ;
200
+ error.error = error_info;
201
+
202
+ Message message = error;
203
+
204
+ llvm::Expected<Message> deserialized_message = roundtripJSON (message);
205
+ ASSERT_THAT_EXPECTED (deserialized_message, llvm::Succeeded ());
206
+
207
+ ASSERT_TRUE (std::holds_alternative<Error>(*deserialized_message));
208
+ const Error &deserialized_error = std::get<Error>(*deserialized_message);
209
+
210
+ EXPECT_EQ (error.id , deserialized_error.id );
211
+ EXPECT_EQ (error.error .code , deserialized_error.error .code );
212
+ EXPECT_EQ (error.error .message , deserialized_error.error .message );
213
+ }
214
+
215
+ TEST (ProtocolMCPTest, ResponseWithError) {
216
+ ErrorInfo error_info;
217
+ error_info.code = -32700 ;
218
+ error_info.message = " Parse error" ;
219
+
220
+ Response response;
221
+ response.id = 4 ;
222
+ response.error = error_info;
223
+
224
+ llvm::Expected<Response> deserialized_response = roundtripJSON (response);
225
+ ASSERT_THAT_EXPECTED (deserialized_response, llvm::Succeeded ());
226
+
227
+ EXPECT_EQ (response.id , deserialized_response->id );
228
+ EXPECT_FALSE (deserialized_response->result .has_value ());
229
+ ASSERT_TRUE (deserialized_response->error .has_value ());
230
+ EXPECT_EQ (response.error ->code , deserialized_response->error ->code );
231
+ EXPECT_EQ (response.error ->message , deserialized_response->error ->message );
232
+ }
0 commit comments