ob-lilypond: change prefix to org-babel-lilypond
[org-mode/org-tableheadings.git] / testing / lisp / test-ob-lilypond.el
blobc0cd475f320fde1928b1f22ce10ec0ab6fafdfac
1 ;;; test-ob-lilypond.el --- tests for ob-lilypond.el
3 ;; Copyright (c) 2010-2014 Martyn Jago
4 ;; Authors: Martyn Jago
6 ;; This file is not part of GNU Emacs.
8 ;; This program is free software; you can redistribute it and/or modify
9 ;; it under the terms of the GNU General Public License as published by
10 ;; the Free Software Foundation, either version 3 of the License, or
11 ;; (at your option) any later version.
13 ;; This program is distributed in the hope that it will be useful,
14 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ;; GNU General Public License for more details.
18 ;; You should have received a copy of the GNU General Public License
19 ;; along with this program. If not, see <http://www.gnu.org/licenses/>.
21 ;;; Code:
22 (unless (featurep 'ob-lilypond)
23 (signal 'missing-test-dependency "Support for Lilypond code blocks"))
25 (save-excursion
26 (set-buffer (get-buffer-create "test-ob-lilypond.el"))
27 (setq org-babel-lilypond-here
28 (file-name-directory
29 (or load-file-name (buffer-file-name)))))
31 (ert-deftest ob-lilypond/assert ()
32 (should t))
34 (ert-deftest ob-lilypond/feature-provision ()
35 (should (featurep 'ob-lilypond)))
37 (ert-deftest ob-lilypond/check-lilypond-alias ()
38 (should (fboundp 'lilypond-mode)))
40 (ert-deftest ob-lilypond/org-babel-tangle-lang-exts ()
41 (let ((found nil)
42 (list org-babel-tangle-lang-exts))
43 (while list
44 (when (equal (car list) '("LilyPond" . "ly"))
45 (setq found t))
46 (setq list (cdr list)))
47 (should found)))
49 (ert-deftest ob-lilypond/org-babel-prep-session:lilypond ()
50 (should-error (org-babel-prep-session:lilypond nil nil))
51 :type 'error)
53 (ert-deftest ob-lilypond/ly-compile-lilyfile ()
54 (should (equal
55 `(,(org-babel-lilypond-determine-ly-path) ;program
56 nil ;infile
57 "*lilypond*" ;buffer
58 t ;display
59 ,(if org-babel-lilypond-gen-png "--png" "") ;&rest...
60 ,(if org-babel-lilypond-gen-html "--html" "")
61 ,(if org-babel-lilypond-gen-pdf "--pdf" "")
62 ,(if org-babel-lilypond-use-eps "-dbackend=eps" "")
63 ,(if org-babel-lilypond-gen-svg "-dbackend=svg" "")
64 "--output=test-file"
65 "test-file.ly")
66 (org-babel-lilypond-compile-lilyfile "test-file.ly" t))))
68 (ert-deftest ob-lilypond/ly-compile-post-tangle ()
69 (should (boundp 'org-babel-lilypond-compile-post-tangle)))
71 (ert-deftest ob-lilypond/ly-display-pdf-post-tangle ()
72 (should (boundp 'org-babel-lilypond-display-pdf-post-tangle)))
74 (ert-deftest ob-lilypond/ly-play-midi-post-tangle ()
75 (should (boundp 'org-babel-lilypond-play-midi-post-tangle)))
77 (ert-deftest ob-lilypond/ly-OSX-ly-path ()
78 (should (boundp 'org-babel-lilypond-OSX-ly-path))
79 (should (stringp org-babel-lilypond-OSX-ly-path)))
81 (ert-deftest ob-lilypond/ly-OSX-pdf-path ()
82 (should (boundp 'org-babel-lilypond-OSX-pdf-path))
83 (should (stringp org-babel-lilypond-OSX-pdf-path)))
85 (ert-deftest ob-lilypond/ly-OSX-midi-path ()
86 (should (boundp 'org-babel-lilypond-OSX-midi-path))
87 (should (stringp org-babel-lilypond-OSX-midi-path)))
89 (ert-deftest ob-lilypond/ly-nix-ly-path ()
90 (should (boundp 'org-babel-lilypond-nix-ly-path))
91 (should (stringp org-babel-lilypond-nix-ly-path)))
93 (ert-deftest ob-lilypond/ly-nix-pdf-path ()
94 (should (boundp 'org-babel-lilypond-nix-pdf-path))
95 (should (stringp org-babel-lilypond-nix-pdf-path)))
97 (ert-deftest ob-lilypond/ly-nix-midi-path ()
98 (should (boundp 'org-babel-lilypond-nix-midi-path))
99 (should (stringp org-babel-lilypond-nix-midi-path)))
101 (ert-deftest ob-lilypond/ly-w32-ly-path ()
102 (should (boundp 'org-babel-lilypond-w32-ly-path))
103 (should (stringp org-babel-lilypond-w32-ly-path)))
105 (ert-deftest ob-lilypond/ly-w32-pdf-path ()
106 (should (boundp 'org-babel-lilypond-w32-pdf-path))
107 (should (stringp org-babel-lilypond-w32-pdf-path)))
109 (ert-deftest ob-lilypond/ly-w32-midi-path ()
110 (should (boundp 'org-babel-lilypond-w32-midi-path))
111 (should (stringp org-babel-lilypond-w32-midi-path)))
113 (ert-deftest ob-lilypond/ly-gen-png ()
114 (should (boundp 'org-babel-lilypond-gen-png)))
116 (ert-deftest ob-lilypond/ly-gen-svg ()
117 (should (boundp 'org-babel-lilypond-gen-svg)))
119 (ert-deftest ob-lilypond/ly-gen-html ()
120 (should (boundp 'org-babel-lilypond-gen-html)))
122 (ert-deftest ob-lilypond/ly-gen-html ()
123 (should (boundp 'org-babel-lilypond-gen-pdf)))
125 (ert-deftest ob-lilypond/use-eps ()
126 (should (boundp 'org-babel-lilypond-use-eps)))
128 (ert-deftest ob-lilypond/ly-arrange-mode ()
129 (should (boundp 'org-babel-lilypond-arrange-mode)))
131 ;; (ert-deftest ob-lilypond/org-babel-default-header-args:lilypond ()
132 ;; (should (equal '((:tangle . "yes")
133 ;; (:noweb . "yes")
134 ;; (:results . "silent")
135 ;; (:comments . "yes"))
136 ;; org-babel-default-header-args:lilypond)))
138 ;;TODO finish...
139 (ert-deftest ob-lilypond/org-babel-expand-body:lilypond ()
140 (should (equal "This is a test"
141 (org-babel-expand-body:lilypond "This is a test" ()))))
143 ;;TODO (ert-deftest org-babel-lilypond-test-org-babel-execute:lilypond ())
144 (ert-deftest ob-lilypond/ly-check-for-compile-error ()
145 (set-buffer (get-buffer-create "*lilypond*"))
146 (erase-buffer)
147 (should (not (org-babel-lilypond-check-for-compile-error nil t)))
148 (insert-file-contents (concat org-babel-lilypond-here
149 "../examples/ob-lilypond-test.error")
150 nil nil nil t)
151 (goto-char (point-min))
152 (should (org-babel-lilypond-check-for-compile-error nil t))
153 (kill-buffer "*lilypond*"))
155 (ert-deftest ob-lilypond/ly-process-compile-error ()
156 (find-file-other-window (concat
157 org-babel-lilypond-here
158 "../examples/ob-lilypond-broken.org"))
159 (set-buffer (get-buffer-create "*lilypond*"))
160 (insert-file-contents (concat
161 org-babel-lilypond-here
162 "../examples/ob-lilypond-test.error")
163 nil nil nil t)
164 (goto-char (point-min))
165 (search-forward "error:" nil t)
166 (should-error
167 (org-babel-lilypond-process-compile-error (concat
168 org-babel-lilypond-here
169 "../examples/ob-lilypond-broken.ly"))
170 :type 'error)
171 (set-buffer "ob-lilypond-broken.org")
172 (should (equal 238 (point)))
173 (exchange-point-and-mark)
174 (should (equal (+ 238 (length "line 25")) (point)))
175 (kill-buffer "*lilypond*")
176 (kill-buffer "ob-lilypond-broken.org"))
178 (ert-deftest ob-lilypond/ly-mark-error-line ()
179 (let ((file-name (concat
180 org-babel-lilypond-here
181 "../examples/ob-lilypond-broken.org"))
182 (expected-point-min 198)
183 (expected-point-max 205)
184 (line "line 20"))
185 (find-file-other-window file-name)
186 (org-babel-lilypond-mark-error-line file-name line)
187 (should (equal expected-point-min (point)))
189 (exchange-point-and-mark)
190 (should (= expected-point-max (point)))
191 (kill-buffer (file-name-nondirectory file-name))))
193 (ert-deftest ob-lilypond/ly-parse-line-num ()
194 (with-temp-buffer
195 (insert-file-contents (concat
196 org-babel-lilypond-here
197 "../examples/ob-lilypond-test.error")
198 nil nil nil t)
199 (goto-char (point-min))
200 (search-forward "error:")
201 (should (equal 25 (org-babel-lilypond-parse-line-num (current-buffer))))))
203 (ert-deftest ob-lilypond/ly-parse-error-line ()
204 (let ((org-babel-lilypond-file (concat
205 org-babel-lilypond-here
206 "../examples/ob-lilypond-broken.ly")))
207 (should (equal "line 20"
208 (org-babel-lilypond-parse-error-line org-babel-lilypond-file 20)))
209 (should (not (org-babel-lilypond-parse-error-line org-babel-lilypond-file 0)))))
211 (ert-deftest ob-lilypond/ly-attempt-to-open-pdf ()
212 (let ((post-tangle org-babel-lilypond-display-pdf-post-tangle)
213 (org-babel-lilypond-file (concat
214 org-babel-lilypond-here
215 "../examples/ob-lilypond-test.ly"))
216 (pdf-file (concat
217 org-babel-lilypond-here
218 "../examples/ob-lilypond-test.pdf")))
219 (setq org-babel-lilypond-display-pdf-post-tangle t)
220 (when (not (file-exists-p pdf-file))
221 (set-buffer (get-buffer-create (file-name-nondirectory pdf-file)))
222 (write-file pdf-file))
223 (should (equal
224 (concat
225 (org-babel-lilypond-determine-pdf-path) " " pdf-file)
226 (org-babel-lilypond-attempt-to-open-pdf org-babel-lilypond-file t)))
227 (delete-file pdf-file)
228 (kill-buffer (file-name-nondirectory pdf-file))
229 (should (equal
230 "No pdf file generated so can't display!"
231 (org-babel-lilypond-attempt-to-open-pdf pdf-file)))
232 (setq org-babel-lilypond-display-pdf-post-tangle post-tangle)))
234 (ert-deftest ob-lilypond/ly-attempt-to-play-midi ()
235 (let ((post-tangle org-babel-lilypond-play-midi-post-tangle)
236 (org-babel-lilypond-file (concat
237 org-babel-lilypond-here
238 "../examples/ob-lilypond-test.ly"))
239 (midi-file (concat
240 org-babel-lilypond-here
241 "../examples/ob-lilypond-test.midi")))
242 (setq org-babel-lilypond-play-midi-post-tangle t)
243 (when (not (file-exists-p midi-file))
244 (set-buffer (get-buffer-create (file-name-nondirectory midi-file)))
245 (write-file midi-file))
246 (should (equal
247 (concat
248 (org-babel-lilypond-determine-midi-path) " " midi-file)
249 (org-babel-lilypond-attempt-to-play-midi org-babel-lilypond-file t)))
250 (delete-file midi-file)
251 (kill-buffer (file-name-nondirectory midi-file))
252 (should (equal
253 "No midi file generated so can't play!"
254 (org-babel-lilypond-attempt-to-play-midi midi-file)))
255 (setq org-babel-lilypond-play-midi-post-tangle post-tangle)))
257 (ert-deftest ob-lilypond/ly-determine-ly-path ()
258 (should (equal org-babel-lilypond-OSX-ly-path
259 (org-babel-lilypond-determine-ly-path "darwin")))
260 (should (equal org-babel-lilypond-w32-ly-path
261 (org-babel-lilypond-determine-ly-path "windows-nt")))
262 (should (equal org-babel-lilypond-nix-ly-path
263 (org-babel-lilypond-determine-ly-path "nix"))))
265 (ert-deftest ob-lilypond/ly-determine-pdf-path ()
266 (should (equal org-babel-lilypond-OSX-pdf-path
267 (org-babel-lilypond-determine-pdf-path "darwin")))
268 (should (equal org-babel-lilypond-w32-pdf-path
269 (org-babel-lilypond-determine-pdf-path "windows-nt")))
270 (should (equal org-babel-lilypond-nix-pdf-path
271 (org-babel-lilypond-determine-pdf-path "nix"))))
273 (ert-deftest ob-lilypond/ly-determine-midi-path ()
274 (should (equal org-babel-lilypond-OSX-midi-path
275 (org-babel-lilypond-determine-midi-path "darwin")))
276 (should (equal org-babel-lilypond-w32-midi-path
277 (org-babel-lilypond-determine-midi-path "windows-nt")))
278 (should (equal org-babel-lilypond-nix-midi-path
279 (org-babel-lilypond-determine-midi-path "nix"))))
281 (ert-deftest ob-lilypond/ly-toggle-midi-play-toggles-flag ()
282 (if org-babel-lilypond-play-midi-post-tangle
283 (progn
284 (org-babel-lilypond-toggle-midi-play)
285 (should (not org-babel-lilypond-play-midi-post-tangle))
286 (org-babel-lilypond-toggle-midi-play)
287 (should org-babel-lilypond-play-midi-post-tangle))
288 (org-babel-lilypond-toggle-midi-play)
289 (should org-babel-lilypond-play-midi-post-tangle)
290 (org-babel-lilypond-toggle-midi-play)
291 (should (not org-babel-lilypond-play-midi-post-tangle))))
293 (ert-deftest ob-lilypond/ly-toggle-pdf-display-toggles-flag ()
294 (if org-babel-lilypond-display-pdf-post-tangle
295 (progn
296 (org-babel-lilypond-toggle-pdf-display)
297 (should (not org-babel-lilypond-display-pdf-post-tangle))
298 (org-babel-lilypond-toggle-pdf-display)
299 (should org-babel-lilypond-display-pdf-post-tangle))
300 (org-babel-lilypond-toggle-pdf-display)
301 (should org-babel-lilypond-display-pdf-post-tangle)
302 (org-babel-lilypond-toggle-pdf-display)
303 (should (not org-babel-lilypond-display-pdf-post-tangle))))
305 (ert-deftest ob-lilypond/ly-toggle-pdf-generation-toggles-flag ()
306 (if org-babel-lilypond-gen-pdf
307 (progn
308 (org-babel-lilypond-toggle-pdf-generation)
309 (should (not org-babel-lilypond-gen-pdf))
310 (org-babel-lilypond-toggle-pdf-generation)
311 (should org-babel-lilypond-gen-pdf))
312 (org-babel-lilypond-toggle-pdf-generation)
313 (should org-babel-lilypond-gen-pdf)
314 (org-babel-lilypond-toggle-pdf-generation)
315 (should (not org-babel-lilypond-gen-pdf))))
317 (ert-deftest ob-lilypond/ly-toggle-arrange-mode ()
318 (if org-babel-lilypond-arrange-mode
319 (progn
320 (org-babel-lilypond-toggle-arrange-mode)
321 (should (not org-babel-lilypond-arrange-mode))
322 (org-babel-lilypond-toggle-arrange-mode)
323 (should org-babel-lilypond-arrange-mode))
324 (org-babel-lilypond-toggle-arrange-mode)
325 (should org-babel-lilypond-arrange-mode)
326 (org-babel-lilypond-toggle-arrange-mode)
327 (should (not org-babel-lilypond-arrange-mode))))
329 (ert-deftest ob-lilypond/ly-toggle-png-generation-toggles-flag ()
330 (if org-babel-lilypond-gen-png
331 (progn
332 (org-babel-lilypond-toggle-png-generation)
333 (should (not org-babel-lilypond-gen-png))
334 (org-babel-lilypond-toggle-png-generation)
335 (should org-babel-lilypond-gen-png))
336 (org-babel-lilypond-toggle-png-generation)
337 (should org-babel-lilypond-gen-png)
338 (org-babel-lilypond-toggle-png-generation)
339 (should (not org-babel-lilypond-gen-png))))
341 (ert-deftest ob-lilypond/ly-toggle-html-generation-toggles-flag ()
342 (if org-babel-lilypond-gen-html
343 (progn
344 (org-babel-lilypond-toggle-html-generation)
345 (should (not org-babel-lilypond-gen-html))
346 (org-babel-lilypond-toggle-html-generation)
347 (should org-babel-lilypond-gen-html))
348 (org-babel-lilypond-toggle-html-generation)
349 (should org-babel-lilypond-gen-html)
350 (org-babel-lilypond-toggle-html-generation)
351 (should (not org-babel-lilypond-gen-html))))
353 (ert-deftest ob-lilypond/ly-switch-extension-with-extensions ()
354 (should (equal "test-name.xyz"
355 (org-babel-lilypond-switch-extension "test-name" ".xyz")))
356 (should (equal "test-name.xyz"
357 (org-babel-lilypond-switch-extension "test-name.abc" ".xyz")))
358 (should (equal "test-name"
359 (org-babel-lilypond-switch-extension "test-name.abc" ""))))
361 (ert-deftest ob-lilypond/ly-switch-extension-with-paths ()
362 (should (equal "/some/path/to/test-name.xyz"
363 (org-babel-lilypond-switch-extension "/some/path/to/test-name" ".xyz"))))
365 (ert-deftest ob-lilypond/ly-get-header-args ()
366 (should (equal '((:tangle . "yes")
367 (:noweb . "yes")
368 (:results . "silent")
369 (:cache . "yes")
370 (:comments . "yes"))
371 (org-babel-lilypond-set-header-args t)))
372 (should (equal '((:results . "file")
373 (:exports . "results"))
374 (org-babel-lilypond-set-header-args nil))))
376 (ert-deftest ob-lilypond/ly-set-header-args ()
377 (org-babel-lilypond-set-header-args t)
378 (should (equal '((:tangle . "yes")
379 (:noweb . "yes")
380 (:results . "silent")
381 (:cache . "yes")
382 (:comments . "yes"))
383 org-babel-default-header-args:lilypond))
384 (org-babel-lilypond-set-header-args nil)
385 (should (equal '((:results . "file")
386 (:exports . "results"))
387 org-babel-default-header-args:lilypond)))
389 (provide 'test-ob-lilypond)
391 ;;; test-ob-lilypond.el ends here