|
@@ -157,7 +157,7 @@ currently executed.")
|
|
|
"Run all tests matched by SELECTOR.
|
|
|
SELECTOR defaults to \"^org\".
|
|
|
See the docstring of `ert-select-tests' for valid selectors.
|
|
|
-Tests are run inside
|
|
|
+Unless `ert', this function runs all tests inside
|
|
|
(let ((deactivate-mark nil))
|
|
|
(save-excursion
|
|
|
(save-match-data
|
|
@@ -192,6 +192,31 @@ Uses `org-test-run-tests' to run the actual tests."
|
|
|
(org-test-run-tests)))
|
|
|
|
|
|
|
|
|
+
|
|
|
+;;; Utility functions:
|
|
|
+
|
|
|
+(defun org-test-which-func ()
|
|
|
+ "Return the name of the current defun."
|
|
|
+ (save-excursion
|
|
|
+ (save-match-data
|
|
|
+ (end-of-line)
|
|
|
+ (beginning-of-defun)
|
|
|
+ (if (looking-at "(defun[[:space:]]+\\([^([:space:]]*\\)[[:space:]]*(")
|
|
|
+ (match-string-no-properties 1)
|
|
|
+ (error "No defun found around point.")))))
|
|
|
+
|
|
|
+(defun org-test-ensure-buffer-emacs-lisp-p (&optional buffer)
|
|
|
+ "Ensure BUFFER contains an elisp file based on extension.
|
|
|
+If BUFFER is nil, use the current buffer.
|
|
|
+Error if not."
|
|
|
+ (save-excursion
|
|
|
+ (save-match-data
|
|
|
+ ;; Check, if editing an emacs-lisp file
|
|
|
+ (with-current-buffer (or buffer (current-buffer))
|
|
|
+ (unless
|
|
|
+ (string-match "\\.el$" buffer-file-name)
|
|
|
+ (error "Not an emacs lisp file: %s" buffer-file-name))))))
|
|
|
+
|
|
|
|
|
|
;;; Commands:
|
|
|
|
|
@@ -199,22 +224,17 @@ Uses `org-test-run-tests' to run the actual tests."
|
|
|
"Execute all tests for function at point if tests exist."
|
|
|
(interactive)
|
|
|
(ert-delete-all-tests)
|
|
|
- (save-excursion
|
|
|
- (save-match-data
|
|
|
- (end-of-line)
|
|
|
- (beginning-of-defun)
|
|
|
- (when (looking-at "(defun[[:space:]]+\\([^([:space:]]*\\)[[:space:]]*(")
|
|
|
- (let* ((fun (match-string-no-properties 1))
|
|
|
- (dir (org-test-test-directory-for-file buffer-file-name))
|
|
|
- (tf (or (org-test-test-file-name-for-defun
|
|
|
- dir fun buffer-file-name)
|
|
|
- (org-test-test-file-name-for-file dir buffer-file-name))))
|
|
|
- (if tf
|
|
|
- (progn
|
|
|
- (load-file tf)
|
|
|
- (org-test-run-tests
|
|
|
- (concat "^" fun)))
|
|
|
- (error "No test files found for \"%s\"" fun)))))))
|
|
|
+ (let* ((fun (org-test-wich-func))
|
|
|
+ (dir (org-test-test-directory-for-file buffer-file-name))
|
|
|
+ (tf (or (org-test-test-file-name-for-defun
|
|
|
+ dir fun buffer-file-name)
|
|
|
+ (org-test-test-file-name-for-file dir buffer-file-name))))
|
|
|
+ (if tf
|
|
|
+ (progn
|
|
|
+ (load-file tf)
|
|
|
+ (org-test-run-tests
|
|
|
+ (concat "^" fun)))
|
|
|
+ (error "No test files found for \"%s\"" fun))))
|
|
|
|
|
|
(defun org-test-test-buffer-file (&optional only)
|
|
|
"Run all tests for current `buffer-file-name' if tests exist.
|
|
@@ -245,16 +265,12 @@ file only."
|
|
|
"test files")
|
|
|
buffer-file-name))))
|
|
|
|
|
|
-(defun org-test-edit-buffer-file-tests ()
|
|
|
+(defun org-test-edit-buffer-file-tests (&optional func)
|
|
|
"Open the `org-test-default-test-file-name' file for editing.
|
|
|
If the file (and parent directories) do not yet exist,
|
|
|
create them."
|
|
|
(interactive)
|
|
|
- (save-match-data
|
|
|
- ;; Check, if editing an emacs-lisp file
|
|
|
- (unless
|
|
|
- (string-match "\\.el$" buffer-file-name)
|
|
|
- (error "Not an emacs lisp file: %s" buffer-file-name)))
|
|
|
+ (org-test-ensure-buffer-emacs-lisp-p)
|
|
|
|
|
|
(let ((dir (org-test-test-directory-for-file
|
|
|
buffer-file-name)))
|
|
@@ -262,7 +278,11 @@ create them."
|
|
|
(error "Directory %s not found. Sorry."
|
|
|
org-test-default-directory-name))
|
|
|
|
|
|
- (let* ((tf (concat dir org-test-default-test-file-name))
|
|
|
+ (let* ((tf (concat
|
|
|
+ dir
|
|
|
+ (if func
|
|
|
+ (concat func ".el")
|
|
|
+ org-test-default-test-file-name)))
|
|
|
(exists (file-exists-p tf))
|
|
|
(rel (file-relative-name buffer-file-name dir))
|
|
|
(tprefix (file-name-nondirectory
|
|
@@ -272,9 +292,11 @@ create them."
|
|
|
(find-file tf)
|
|
|
(unless exists
|
|
|
(insert
|
|
|
- ";;; " org-test-default-test-file-name " --- Tests for "
|
|
|
+ ";;; " (file-name-nondirectory tf) "\n"
|
|
|
+ ";; Tests for `"
|
|
|
+ (if func (concat func "' in `") "")
|
|
|
(replace-regexp-in-string "^\\(?:\\.+/\\)+" "" rel)
|
|
|
- "\n\n"
|
|
|
+ "'\n\n"
|
|
|
"\n"
|
|
|
";;; Code:\n"
|
|
|
"(require 'org-test)\n"
|
|
@@ -289,6 +311,14 @@ create them."
|
|
|
" (should-not nil)\n"
|
|
|
" (should-error (error \"errr...\")))\n")))))
|
|
|
|
|
|
+(defun org-test-edit-current-defuns-tests ()
|
|
|
+ "Open the file with tests related to the current defun.
|
|
|
+If the file (and parent directories) do not yet exist,
|
|
|
+create them."
|
|
|
+ (interactive)
|
|
|
+ (org-test-ensure-buffer-emacs-lisp-p)
|
|
|
+ (org-test-edit-buffer-file-tests
|
|
|
+ (org-test-which-func)))
|
|
|
|
|
|
|
|
|
(provide 'org-test)
|