24
24
(require 'lsp-treemacs )
25
25
26
26
(require 'lsp-dart-protocol )
27
+ (require 'lsp-dart-test-support )
27
28
28
29
(defcustom lsp-dart-test-tree-on-run t
29
30
" Enable the test tree when running tests."
@@ -232,15 +233,44 @@ Defaults to side following treemacs default."
232
233
(car (last (append group-ids nil )))
233
234
test))))
234
235
235
- (defun lsp-dart-test-tree--ret-action (uri position )
236
+ (defun lsp-dart-test-tree--ret-action (uri &optional position )
236
237
" Build the ret action for an item in the test tree view.
237
238
URI is the test uri.
238
239
POSITION is the test start position."
239
- (interactive )
240
240
(lsp-treemacs--open-file-in-mru (lsp--uri-to-path uri))
241
- (goto-char (lsp--position-to-point position))
241
+ (when position
242
+ (goto-char (lsp--position-to-point position)))
242
243
(run-hooks 'xref-after-jump-hook ))
243
244
245
+ (defun lsp-dart-test-tree--run-test (uri &optional position )
246
+ " Run test from POSITION and URI from tree."
247
+ (lsp-treemacs--open-file-in-mru (lsp--uri-to-path uri))
248
+ (if position
249
+ (progn
250
+ (goto-char (lsp--position-to-point position))
251
+ (lsp-dart-test--run (lsp-dart-test--test-at-point)))
252
+ (lsp-dart-test--run (list :file-name (lsp--uri-to-path uri)))))
253
+
254
+ (defun lsp-dart-test-tree--build-suite-actions (suite )
255
+ " Build the action options for SUITE in test tree view."
256
+ (let ((uri (plist-get suite :path )))
257
+ `([" Go to file" (lsp-dart-test-tree--ret-action , uri )]
258
+ [" Run file tests again" (lsp-dart-test-tree--run-test , uri )])))
259
+
260
+ (defun lsp-dart-test-tree--build-group-actions (group )
261
+ " Build the action options for GROUP in test tree view."
262
+ (let ((uri (plist-get group :uri ))
263
+ (position (plist-get group :position )))
264
+ `([" Go to group" (lsp-dart-test-tree--ret-action , uri , position )]
265
+ [" Run group tests again" (lsp-dart-test-tree--run-test , uri , position )])))
266
+
267
+ (defun lsp-dart-test-tree--build-test-actions (test )
268
+ " Build the action options for TEST in test tree view."
269
+ (let ((uri (plist-get test :uri ))
270
+ (position (plist-get test :position )))
271
+ `([" Go to test" (lsp-dart-test-tree--ret-action , uri , position )]
272
+ [" Run test again" (lsp-dart-test-tree--run-test , uri , position )])))
273
+
244
274
(defun lsp-dart-test-tree--suite->tree (suite-or-group )
245
275
" Map SUITE-OR-GROUP to treemacs tree items."
246
276
(let ((tests (seq-map
@@ -251,7 +281,8 @@ POSITION is the test start position."
251
281
(plist-get test :time ))
252
282
:icon (plist-get test :status )
253
283
:ret-action (lambda (&rest _ ) (lsp-dart-test-tree--ret-action (plist-get test :uri )
254
- (plist-get test :position )))))
284
+ (plist-get test :position )))
285
+ :actions (lsp-dart-test-tree--build-test-actions test)))
255
286
(plist-get suite-or-group :tests )))
256
287
(groups (seq-map
257
288
(-lambda ((group-id . group))
@@ -262,13 +293,15 @@ POSITION is the test start position."
262
293
(plist-get group :status ))
263
294
:children (lsp-dart-test-tree--suite->tree group)
264
295
:ret-action (lambda (&rest _ ) (lsp-dart-test-tree--ret-action (plist-get group :uri )
265
- (plist-get group :position ))))
296
+ (plist-get group :position )))
297
+ :actions (lsp-dart-test-tree--build-group-actions group))
266
298
(list :key (concat " suite-" (number-to-string (plist-get suite-or-group :id )))
267
299
:label (lsp-dart-test-tree--colorize-name (f-filename (plist-get suite-or-group :path ))
268
300
(plist-get suite-or-group :status ))
269
301
:icon (plist-get suite-or-group :status )
270
302
:children (lsp-dart-test-tree--suite->tree group)
271
- :ret-action (lambda (&rest _ ) (lsp-treemacs--open-file-in-mru (plist-get suite-or-group :path ))))))
303
+ :ret-action (lambda (&rest _ ) (lsp-dart-test-tree--ret-action (plist-get group :uri )))
304
+ :actions (lsp-dart-test-tree--build-suite-actions suite-or-group))))
272
305
(plist-get suite-or-group :groups ))))
273
306
(when (or tests groups)
274
307
(append tests groups))))
0 commit comments