2424(require 'lsp-treemacs )
2525
2626(require 'lsp-dart-protocol )
27+ (require 'lsp-dart-test-support )
2728
2829(defcustom lsp-dart-test-tree-on-run t
2930 " Enable the test tree when running tests."
@@ -232,15 +233,44 @@ Defaults to side following treemacs default."
232233 (car (last (append group-ids nil )))
233234 test))))
234235
235- (defun lsp-dart-test-tree--ret-action (uri position )
236+ (defun lsp-dart-test-tree--ret-action (uri &optional position )
236237 " Build the ret action for an item in the test tree view.
237238URI is the test uri.
238239POSITION is the test start position."
239- (interactive )
240240 (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)))
242243 (run-hooks 'xref-after-jump-hook ))
243244
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+
244274(defun lsp-dart-test-tree--suite->tree (suite-or-group )
245275 " Map SUITE-OR-GROUP to treemacs tree items."
246276 (let ((tests (seq-map
@@ -251,7 +281,8 @@ POSITION is the test start position."
251281 (plist-get test :time ))
252282 :icon (plist-get test :status )
253283 :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)))
255286 (plist-get suite-or-group :tests )))
256287 (groups (seq-map
257288 (-lambda ((group-id . group))
@@ -262,13 +293,15 @@ POSITION is the test start position."
262293 (plist-get group :status ))
263294 :children (lsp-dart-test-tree--suite->tree group)
264295 :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))
266298 (list :key (concat " suite-" (number-to-string (plist-get suite-or-group :id )))
267299 :label (lsp-dart-test-tree--colorize-name (f-filename (plist-get suite-or-group :path ))
268300 (plist-get suite-or-group :status ))
269301 :icon (plist-get suite-or-group :status )
270302 :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))))
272305 (plist-get suite-or-group :groups ))))
273306 (when (or tests groups)
274307 (append tests groups))))
0 commit comments