@@ -133,3 +133,100 @@ TEST(ProtocolMCPTest, ToolDefinition) {
133133  EXPECT_EQ (tool_definition.inputSchema ,
134134            deserialized_tool_definition->inputSchema );
135135}
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