branch: externals/urgrep
commit 559b2c07cd18ba23cee729b9b1b7f92b6fecc9f5
Author: Jim Porter <jporterb...@gmail.com>
Commit: Jim Porter <jporterb...@gmail.com>

    Add a unit test for getting the preferred tool on multiple hosts
---
 urgrep-tests.el | 40 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/urgrep-tests.el b/urgrep-tests.el
index 3b83a6c770..47e97fc635 100644
--- a/urgrep-tests.el
+++ b/urgrep-tests.el
@@ -24,11 +24,25 @@
 
 ;;; Code:
 
-(require 'ert)
+;; FIXME: Work around Emacs bug#58265.
+(let ((orig-home (getenv "HOME")))
+  (require 'ert)
+  (require 'tramp)
+  (require 'ert-x)
+  (setenv "HOME" orig-home))
 
 (unless (fboundp 'always)
   (defun always (&rest _) t))
 
+(defun urgrep-tests-remote-accessible-p ()
+  "Return whether a test involving remote files can proceed."
+  (let ((inhibit-message t))
+    (ignore-errors
+      (and
+       (file-remote-p ert-remote-temporary-file-directory)
+       (file-directory-p ert-remote-temporary-file-directory)
+       (file-writable-p ert-remote-temporary-file-directory)))))
+
 (ert-deftest urgrep-tests-common-prefix ()
   (should (equal (urgrep--common-prefix "foo" "bar") ""))
   (should (equal (urgrep--common-prefix "bar" "baz") "ba")))
@@ -502,6 +516,30 @@
       (should (equal (urgrep--get-prop 'executable-name tool) "gf"))
       (should (equal urgrep--host-defaults nil)))))
 
+(ert-deftest urgrep-tests-get-tool-remote-host ()
+  (skip-unless (urgrep-tests-remote-accessible-p))
+  (connection-local-set-profile-variables
+   'urgrep-test-ripgrep
+   '((urgrep-preferred-tools . (ripgrep))))
+  (let ((default-directory ert-remote-temporary-file-directory))
+    (connection-local-set-profiles
+     (connection-local-criteria-for-default-directory) 'urgrep-test-ripgrep))
+  (cl-letf (((symbol-function #'executable-find) #'always)
+            (urgrep--host-defaults nil))
+    ;; Get the preferred tool on the local host.
+    (let ((tool (with-connection-local-variables (urgrep-get-tool))))
+      (should (equal (car tool) 'ugrep))
+      (should (equal (urgrep--get-prop 'executable-name tool) "ugrep")))
+    ;; Now try on a remote host.
+    (let* ((default-directory ert-remote-temporary-file-directory)
+           (tool (with-connection-local-variables (urgrep-get-tool))))
+      (should (equal (car tool) 'ripgrep))
+      (should (equal (urgrep--get-prop 'executable-name tool) "rg")))
+    ;; Try again on the local host to make sure it didn't change.
+    (let ((tool (with-connection-local-variables (urgrep-get-tool))))
+      (should (equal (car tool) 'ugrep))
+      (should (equal (urgrep--get-prop 'executable-name tool) "ugrep")))))
+
 (defun urgrep-tests--check-match-at-point ()
   (let* ((line (string-to-number (current-word)))
          (loc

Reply via email to