Skip to content

Commit ed03fde

Browse files
committed
Refactor tests
1 parent 18c3dc4 commit ed03fde

File tree

11 files changed

+175
-108
lines changed

11 files changed

+175
-108
lines changed

Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,6 @@ test:
4949
## Tests the package.
5050
$(CASK) exec $(EMACS) --batch -q \
5151
--eval "(add-to-list 'load-path \""$(shell readlink -f .)"\")" \
52-
-l test/swift-mode-test-indent.el \
53-
-f swift-mode:run-test:indent
52+
--eval "(add-to-list 'load-path \""$(shell readlink -f .)"/test\")" \
53+
-l test/swift-mode-test.el \
54+
-f swift-mode:run-test
File renamed without changes.

test/swift-mode-test-indent.el

Lines changed: 45 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -34,79 +34,52 @@
3434
(require 'swift-mode)
3535
(require 'swift-mode-indent)
3636

37-
(defvar swift-mode:test:basedir
38-
(file-name-directory (or load-file-name buffer-file-name)))
39-
40-
(defun swift-mode:setup-error-buffer ()
41-
"Initialize and switch to the error buffer.
42-
43-
Return the error-buffer"
44-
(pop-to-buffer (get-buffer-create "*swift-mode-test-indent*"))
45-
(fundamental-mode)
46-
(setq buffer-read-only nil)
47-
(erase-buffer)
48-
(current-buffer))
49-
50-
(defun swift-mode:run-test:indent ()
51-
"Run indentation test for `swift-mode'."
37+
(defun swift-mode:run-test:indent
38+
(&optional error-buffer error-counts progress-reporter)
39+
"Run indentation test for `swift-mode'.
40+
41+
ERROR-BUFFER is the buffer to output errors.
42+
ERROR-COUNTS is a association list holding counts of errors. Updated
43+
destructively.
44+
PROGRESS-REPORTER is the progress-reporter."
5245
(interactive)
53-
(let ((error-buffer
54-
(if noninteractive nil (swift-mode:setup-error-buffer)))
55-
(current-line 0)
56-
(error-counts (list
57-
(cons 'error 0)
58-
(cons 'warning 0)
59-
(cons 'info 0)
60-
(cons 'ok 0)))
61-
(progress-reporter (unless noninteractive
62-
(make-progress-reporter "Running tests..."))))
63-
(setq default-directory
64-
(concat (file-name-as-directory swift-mode:test:basedir)
65-
"swift-files"))
66-
67-
(dolist (swift-file (file-expand-wildcards "*.swift"))
68-
(redisplay)
69-
(with-temp-buffer
70-
(switch-to-buffer (current-buffer))
71-
(insert-file-contents-literally swift-file)
72-
(swift-mode)
73-
(setq current-line 0)
74-
(while (not (eobp))
75-
(when (not noninteractive)
76-
(progress-reporter-update progress-reporter))
77-
(setq current-line (1+ current-line))
78-
(cond
79-
((looking-at ".*//.*swift-mode:test:keep-indent")
80-
nil)
81-
82-
((= (line-beginning-position) (line-end-position))
83-
;; Empty line
84-
nil)
85-
86-
(t
87-
(when (looking-at ".*//.*swift-mode:test:eval\\(.*\\)")
88-
(eval-region (match-beginning 1) (match-end 1)))
89-
(let*
90-
((status (swift-mode:test-current-line-indent
91-
swift-file current-line error-buffer))
92-
(count-assoc (assq status error-counts)))
93-
(setcdr count-assoc (1+ (cdr count-assoc))))))
94-
(forward-line))))
95-
96-
(when (not noninteractive)
97-
(progress-reporter-done progress-reporter))
98-
99-
(swift-mode:print-message
100-
error-buffer
101-
(concat
102-
"Errors: " (prin1-to-string (assoc-default 'error error-counts)) "\n"
103-
"Warning: " (prin1-to-string (assoc-default 'warning error-counts)) "\n"
104-
"Info: " (prin1-to-string (assoc-default 'info error-counts)) "\n"
105-
"OK: " (prin1-to-string (assoc-default 'ok error-counts)) "\n"))
106-
107-
(if noninteractive
108-
(kill-emacs (min 63 (assoc-default 'error error-counts)))
109-
(compilation-mode))))
46+
47+
(if (not swift-mode:test:running)
48+
(swift-mode:run-test '(swift-mode:run-test:indent))
49+
(let ((current-line 0))
50+
(setq default-directory
51+
(concat (file-name-as-directory swift-mode:test:basedir)
52+
(file-name-as-directory "swift-files")
53+
"indent"))
54+
55+
(dolist (swift-file (file-expand-wildcards "*.swift"))
56+
(redisplay)
57+
(with-temp-buffer
58+
(switch-to-buffer (current-buffer))
59+
(insert-file-contents-literally swift-file)
60+
(swift-mode)
61+
(setq current-line 0)
62+
(while (not (eobp))
63+
(when (not noninteractive)
64+
(progress-reporter-update progress-reporter))
65+
(setq current-line (1+ current-line))
66+
(cond
67+
((looking-at ".*//.*swift-mode:test:keep-indent")
68+
nil)
69+
70+
((= (line-beginning-position) (line-end-position))
71+
;; Empty line
72+
nil)
73+
74+
(t
75+
(when (looking-at ".*//.*swift-mode:test:eval\\(.*\\)")
76+
(eval-region (match-beginning 1) (match-end 1)))
77+
(let*
78+
((status (swift-mode:test-current-line-indent
79+
swift-file current-line error-buffer))
80+
(count-assoc (assq status error-counts)))
81+
(setcdr count-assoc (1+ (cdr count-assoc))))))
82+
(forward-line)))))))
11083

11184
(defun swift-mode:test-current-line-indent
11285
(swift-file current-line error-buffer)
@@ -151,40 +124,6 @@ ERROR-BUFFER is the buffer to output errors."
151124

152125
status))
153126

154-
(defun swift-mode:show-error (error-buffer file line level message)
155-
"Show an error message to the ERROR-BUFFER or stdout.
156-
157-
If the Emacs is in the batch mode, the message is printed to the stdout.
158-
Otherwise, the message is appended to the ERROR-BUFFER.
159-
160-
FILE is the filename of the test case.
161-
LINE is the line number of the error.
162-
LEVEL is the error level (e.g. error, warning).
163-
MESSAGE is the error message."
164-
(let ((formatted
165-
(concat
166-
"swift-mode-test:"
167-
file
168-
":"
169-
(prin1-to-string line)
170-
": "
171-
level
172-
": "
173-
message
174-
"\n")))
175-
(swift-mode:print-message error-buffer formatted)))
176-
177-
(defun swift-mode:print-message (error-buffer message)
178-
"Print a message to the ERROR-BUFFER or stdout.
179-
180-
If the Emacs is in the batch mode, MESSAGE is printed to the stdout.
181-
Otherwise, MESSAGE is appended to the ERROR-BUFFER."
182-
(if noninteractive
183-
(princ message)
184-
(with-current-buffer error-buffer
185-
(goto-char (point-max))
186-
(insert-and-inherit message))))
187-
188127
(provide 'swift-mode-test-indent)
189128

190129
;;; swift-mode-test-indent.el ends here

0 commit comments

Comments
 (0)