@@ -6,8 +6,8 @@ local M = {}
66-- Create a temporary file with content
77function M .create_temp_file (content )
88 local tmp_file = vim .fn .tempname ()
9- local file = io.open (tmp_file , " w " )
10- file :write (content or " Test file content" )
9+ local file = io.open (tmp_file , ' w ' )
10+ file :write (content or ' Test file content' )
1111 file :close ()
1212 return tmp_file
1313end
1919
2020-- Open a buffer for a file
2121function M .open_buffer (file )
22- vim .cmd (" edit " .. file )
22+ vim .cmd (' edit ' .. file )
2323 return vim .api .nvim_get_current_buf ()
2424end
2525
2626-- Close a buffer
2727function M .close_buffer (bufnr )
2828 if bufnr and vim .api .nvim_buf_is_valid (bufnr ) then
29- pcall (vim .cmd , " bdelete! " .. bufnr )
29+ pcall (vim .cmd , ' bdelete! ' .. bufnr )
3030 end
3131end
3232
3333-- Set visual selection programmatically
3434function M .set_visual_selection (start_line , start_col , end_line , end_col )
3535 -- Enter visual mode
36- vim .cmd (" normal! " .. start_line .. " G " .. start_col .. " lv " .. end_line .. " G " .. end_col .. " l " )
36+ vim .cmd (' normal! ' .. start_line .. ' G ' .. start_col .. ' lv ' .. end_line .. ' G ' .. end_col .. ' l ' )
3737end
3838
3939-- Reset editor state
@@ -42,11 +42,11 @@ function M.reset_editor()
4242 for _ , bufnr in ipairs (vim .api .nvim_list_bufs ()) do
4343 -- Skip non-existing or invalid buffers
4444 if vim .api .nvim_buf_is_valid (bufnr ) then
45- pcall (vim .cmd , " bdelete! " .. bufnr )
45+ pcall (vim .cmd , ' bdelete! ' .. bufnr )
4646 end
4747 end
4848 -- Reset any other editor state as needed
49- pcall (vim .cmd , " silent! %bwipeout!" )
49+ pcall (vim .cmd , ' silent! %bwipeout!' )
5050end
5151
5252-- Mock input function
6464function M .mock_notify ()
6565 local notifications = {}
6666 local original_notify = vim .notify
67-
67+
6868 vim .notify = function (msg , level , opts )
6969 table.insert (notifications , {
7070 msg = msg ,
7171 level = level ,
72- opts = opts
72+ opts = opts ,
7373 })
7474 end
75-
75+
7676 return {
7777 reset = function ()
7878 vim .notify = original_notify
@@ -82,21 +82,21 @@ function M.mock_notify()
8282 end ,
8383 clear = function ()
8484 notifications = {}
85- end
85+ end ,
8686 }
8787end
8888
8989function M .mock_time_ago ()
9090 local util = require (' opencode.util' )
9191 local original_time_ago = util .time_ago
92-
92+
9393 util .time_ago = function (timestamp )
9494 if timestamp > 1e12 then
9595 timestamp = math.floor (timestamp / 1000 )
9696 end
9797 return os.date (' %Y-%m-%d %H:%M:%S' , timestamp )
9898 end
99-
99+
100100 return function ()
101101 util .time_ago = original_time_ago
102102 end
@@ -112,22 +112,37 @@ function M.load_test_data(filename)
112112 return vim .json .decode (content )
113113end
114114
115+ function M .get_session_from_events (events )
116+ -- streaming_renderer needs a valid session id
117+ for _ , event in ipairs (events ) do
118+ -- find the session id in a message or part event
119+ local properties = event .properties
120+ local session_id = properties .info and properties .info .sessionID or properties .part and properties .part .sessionID
121+ if session_id then
122+ --- @diagnostic disable-next-line : missing-fields
123+ return { id = session_id }
124+ end
125+ end
126+
127+ return nil
128+ end
129+
115130function M .replay_event (event )
116131 local streaming_renderer = require (' opencode.ui.streaming_renderer' )
117132 if event .type == ' message.updated' then
118- streaming_renderer .handle_message_updated (event )
133+ streaming_renderer .on_message_updated (event )
119134 elseif event .type == ' message.part.updated' then
120- streaming_renderer .handle_part_updated (event )
135+ streaming_renderer .on_part_updated (event )
121136 elseif event .type == ' message.removed' then
122- streaming_renderer .handle_message_removed (event )
137+ streaming_renderer .on_message_removed (event )
123138 elseif event .type == ' message.part.removed' then
124- streaming_renderer .handle_part_removed (event )
139+ streaming_renderer .on_part_removed (event )
125140 elseif event .type == ' session.compacted' then
126- streaming_renderer .handle_session_compacted ()
141+ streaming_renderer .on_session_compacted ()
127142 elseif event .type == ' permission.updated' then
128- streaming_renderer .handle_permission_updated (event )
143+ streaming_renderer .on_permission_updated (event )
129144 elseif event .type == ' permission.replied' then
130- streaming_renderer .handle_permission_replied (event )
145+ streaming_renderer .on_permission_replied (event )
131146 end
132147end
133148
@@ -154,4 +169,4 @@ function M.capture_output(output_buf, namespace)
154169 }
155170end
156171
157- return M
172+ return M
0 commit comments