99 ResultMessage ,
1010 SystemMessage ,
1111 TextBlock ,
12+ ToolResultBlock ,
1213 ToolUseBlock ,
1314 UserMessage ,
1415)
@@ -25,6 +26,108 @@ def test_parse_valid_user_message(self):
2526 }
2627 message = parse_message (data )
2728 assert isinstance (message , UserMessage )
29+ assert len (message .content ) == 1
30+ assert isinstance (message .content [0 ], TextBlock )
31+ assert message .content [0 ].text == "Hello"
32+
33+ def test_parse_user_message_with_tool_use (self ):
34+ """Test parsing a user message with tool_use block."""
35+ data = {
36+ "type" : "user" ,
37+ "message" : {
38+ "content" : [
39+ {"type" : "text" , "text" : "Let me read this file" },
40+ {
41+ "type" : "tool_use" ,
42+ "id" : "tool_456" ,
43+ "name" : "Read" ,
44+ "input" : {"file_path" : "/example.txt" },
45+ },
46+ ]
47+ },
48+ }
49+ message = parse_message (data )
50+ assert isinstance (message , UserMessage )
51+ assert len (message .content ) == 2
52+ assert isinstance (message .content [0 ], TextBlock )
53+ assert isinstance (message .content [1 ], ToolUseBlock )
54+ assert message .content [1 ].id == "tool_456"
55+ assert message .content [1 ].name == "Read"
56+ assert message .content [1 ].input == {"file_path" : "/example.txt" }
57+
58+ def test_parse_user_message_with_tool_result (self ):
59+ """Test parsing a user message with tool_result block."""
60+ data = {
61+ "type" : "user" ,
62+ "message" : {
63+ "content" : [
64+ {
65+ "type" : "tool_result" ,
66+ "tool_use_id" : "tool_789" ,
67+ "content" : "File contents here" ,
68+ }
69+ ]
70+ },
71+ }
72+ message = parse_message (data )
73+ assert isinstance (message , UserMessage )
74+ assert len (message .content ) == 1
75+ assert isinstance (message .content [0 ], ToolResultBlock )
76+ assert message .content [0 ].tool_use_id == "tool_789"
77+ assert message .content [0 ].content == "File contents here"
78+
79+ def test_parse_user_message_with_tool_result_error (self ):
80+ """Test parsing a user message with error tool_result block."""
81+ data = {
82+ "type" : "user" ,
83+ "message" : {
84+ "content" : [
85+ {
86+ "type" : "tool_result" ,
87+ "tool_use_id" : "tool_error" ,
88+ "content" : "File not found" ,
89+ "is_error" : True ,
90+ }
91+ ]
92+ },
93+ }
94+ message = parse_message (data )
95+ assert isinstance (message , UserMessage )
96+ assert len (message .content ) == 1
97+ assert isinstance (message .content [0 ], ToolResultBlock )
98+ assert message .content [0 ].tool_use_id == "tool_error"
99+ assert message .content [0 ].content == "File not found"
100+ assert message .content [0 ].is_error is True
101+
102+ def test_parse_user_message_with_mixed_content (self ):
103+ """Test parsing a user message with mixed content blocks."""
104+ data = {
105+ "type" : "user" ,
106+ "message" : {
107+ "content" : [
108+ {"type" : "text" , "text" : "Here's what I found:" },
109+ {
110+ "type" : "tool_use" ,
111+ "id" : "use_1" ,
112+ "name" : "Search" ,
113+ "input" : {"query" : "test" },
114+ },
115+ {
116+ "type" : "tool_result" ,
117+ "tool_use_id" : "use_1" ,
118+ "content" : "Search results" ,
119+ },
120+ {"type" : "text" , "text" : "What do you think?" },
121+ ]
122+ },
123+ }
124+ message = parse_message (data )
125+ assert isinstance (message , UserMessage )
126+ assert len (message .content ) == 4
127+ assert isinstance (message .content [0 ], TextBlock )
128+ assert isinstance (message .content [1 ], ToolUseBlock )
129+ assert isinstance (message .content [2 ], ToolResultBlock )
130+ assert isinstance (message .content [3 ], TextBlock )
28131
29132 def test_parse_valid_assistant_message (self ):
30133 """Test parsing a valid assistant message."""
0 commit comments