Browse Source

only load those test files for which the required executables are present

* testing/org-test.el (org-exe-not-found): An error type used to
  signal a missing executable
  (org-test-for-executable): A function used by test files to throw an
  error if a required executable is not present.
  (org-test-load): Simply skip files for which the required
  executables are not present.

* testing/lisp/test-ob-R.el: Conditional loading.
* testing/lisp/test-ob-awk.el: Conditional loading.
* testing/lisp/test-ob-fortran.el: Conditional loading.
Eric Schulte 8 years ago
parent
commit
decd7227f6
4 changed files with 41 additions and 9 deletions
  1. 4 0
      testing/lisp/test-ob-R.el
  2. 2 0
      testing/lisp/test-ob-awk.el
  3. 2 0
      testing/lisp/test-ob-fortran.el
  4. 33 9
      testing/org-test.el

+ 4 - 0
testing/lisp/test-ob-R.el

@@ -6,6 +6,10 @@
 ;; Released under the GNU General Public License version 3
 ;; see: http://www.gnu.org/licenses/gpl-3.0.html
 
+(org-test-for-executable "R")
+(unless (featurep 'ess)
+  (signal 'org-test-lib-not-found "ess"))
+
 (let ((load-path (cons (expand-file-name
 			".." (file-name-directory
 			      (or load-file-name buffer-file-name)))

+ 2 - 0
testing/lisp/test-ob-awk.el

@@ -6,6 +6,8 @@
 ;; Released under the GNU General Public License version 3
 ;; see: http://www.gnu.org/licenses/gpl-3.0.html
 
+(org-test-for-executable "awk")
+
 (let ((load-path (cons (expand-file-name
 			".." (file-name-directory
 			      (or load-file-name buffer-file-name)))

+ 2 - 0
testing/lisp/test-ob-fortran.el

@@ -6,6 +6,8 @@
 ;; Released under the GNU General Public License version 3
 ;; see: http://www.gnu.org/licenses/gpl-3.0.html
 
+(org-test-for-executable "gfortran")
+
 (let ((load-path (cons (expand-file-name
 			".." (file-name-directory
 			      (or load-file-name buffer-file-name)))

+ 33 - 9
testing/org-test.el

@@ -100,8 +100,25 @@ org-test searches this directory up the directory tree.")
 (defconst org-test-link-in-heading-file
   (expand-file-name "link-in-heading.org" org-test-dir))
 
+;; Errors used by test files that shouldn't be run because local
+;; dependencies are missing.
+(put 'org-exe-not-found
+     'error-conditions
+     '(error org-test-missing-dependency org-test-exe-not-found))
+(put 'org-lib-not-found
+     'error-conditions
+     '(error org-test-missing-dependency org-test-lib-not-found))
+
 
 ;;; Functions for writing tests
+(defun org-test-for-executable (exe)
+  "Throw an error if EXE is not available.
+This can be used at the top of code-block-language specific test
+files to avoid loading the file on systems without the
+executable."
+  (unless (> (length (shell-command-to-string (format "which %s" exe))) 0)
+    (signal 'org-test-exe-not-found exe)))
+
 (defun org-test-buffer (&optional file)
   "TODO:  Setup and return a buffer to work with.
 If file is non-nil insert it's contents in there.")
@@ -252,15 +269,22 @@ then remove it and place the point there before running BODY."
 (defun org-test-load ()
   "Load up the org-mode test suite."
   (interactive)
-  (flet ((rload (base)
-		(mapc
-		 (lambda (path)
-		   (if (file-directory-p path) (rload path) (load-file path)))
-		 (directory-files base 'full
-				  "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*\\.el$"))))
-    (rload (expand-file-name "lisp" org-test-dir))
-    (rload (expand-file-name "lisp"
-			     (expand-file-name "contrib" org-test-dir)))))
+  (flet ((rld (base)
+	      ;; Recursively load all files, if files throw errors
+	      ;; then silently ignore the error and continue to the
+	      ;; next file.  This allows files to error out if
+	      ;; required executables aren't available.
+	      (mapc
+	       (lambda (path)
+		 (if (file-directory-p path)
+		     (rld path)
+		   (condition-case nil
+		       (load-file path)
+		     (org-exe-not-found nil))))
+	       (directory-files base 'full
+				"^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*\\.el$"))))
+    (rld (expand-file-name "lisp" org-test-dir))
+    (rld (expand-file-name "lisp" (expand-file-name "contrib" org-test-dir)))))
 
 (defun org-test-current-defun ()
   "Test the current function."