Last active
December 11, 2015 21:19
-
-
Save hugoduncan/4662037 to your computer and use it in GitHub Desktop.
Examine failed test using ediff to compare actual and expected results
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defvar clojure-test-ediff-buffers nil) | |
(defun clojure-test-ediff-cleanup () | |
"A function for ediff-cleanup-hook, to cleanup the temporary ediff buffers" | |
(mapc #'kill-buffer clojure-test-ediff-buffers)) | |
(defconst re1 | |
"Expected \\(?:.\\|\n\\)*, got (not ([^ ]+ \\(\"\\(?:.\\|\n\\)+\"\\) \\(\"\\(?:.\\|\n\\)+\"\\)))" | |
"Match predicate on strings test") | |
(defconst re2 | |
"Expected \\(?:.\\|\n\\)*, got (not ([^ ]+ \\(\\(?:.\\|\n\\)+\\) \\(\\(?:.\\|\n\\)+\\)))" | |
"Match predicate test") | |
(defconst re3 "Expected \\(\\(?:.\\|\n\\)+\\), got \\(\\(?:.\\|\n\\)+\\)" | |
"Match general test") | |
(defun clojure-test-ediff-result () | |
"Show the result of the test under point as an ediff" | |
(interactive) | |
(let ((overlay (find-if (lambda (o) (overlay-get o 'message)) | |
(overlays-at (point))))) | |
(if overlay | |
(let* ((m (overlay-get overlay 'message)) | |
(f (or (string-match re1 m) | |
(string-match re2 m) | |
(string-match re3 m)))) | |
(message m) | |
(if f | |
(let ((exp-buffer (generate-new-buffer " *expected*")) | |
(act-buffer (generate-new-buffer " *actual*"))) | |
(with-current-buffer exp-buffer | |
(insert (match-string-no-properties 1 m))) | |
(with-current-buffer act-buffer | |
(insert (match-string-no-properties 2 m))) | |
(setq clojure-test-ediff-buffers | |
(list (buffer-name exp-buffer) (buffer-name act-buffer))) | |
(ediff-buffers | |
(buffer-name exp-buffer) (buffer-name act-buffer))) | |
(message "Error, regex failed to match")))))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment