mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-09-29 20:37:51 +00:00
ob-lilypond: test suite, all tests passing
This commit is contained in:
parent
0b6eb6de3c
commit
dacf18e80a
|
@ -242,14 +242,15 @@ LINE is the erroneous line"
|
|||
FILE-NAME is full path to lilypond file.
|
||||
LINENO is the number of the erroneous line"
|
||||
|
||||
(set-buffer (get-buffer-create "temp-buf"))
|
||||
(insert-file-contents (ly-switch-extension file-name ".ly")
|
||||
nil nil nil t)
|
||||
(if (> lineNo 0)
|
||||
(progn
|
||||
(goto-line lineNo)
|
||||
(buffer-substring (point) (point-at-eol)))
|
||||
nil))
|
||||
(with-temp-buffer
|
||||
(insert-file-contents (ly-switch-extension file-name ".ly")
|
||||
nil nil nil t)
|
||||
(if (> lineNo 0)
|
||||
(progn
|
||||
(goto-char (point-min))
|
||||
(forward-line (- lineNo 1))
|
||||
(buffer-substring (point) (point-at-eol)))
|
||||
nil)))
|
||||
|
||||
(defun ly-attempt-to-open-pdf (file-name &optional test)
|
||||
"Attempt to display the generated pdf file
|
||||
|
|
31
testing/examples/ob-lilypond-broken.ly
Normal file
31
testing/examples/ob-lilypond-broken.ly
Normal file
|
@ -0,0 +1,31 @@
|
|||
line 1
|
||||
line 2
|
||||
line 3
|
||||
line 4
|
||||
line 5
|
||||
line 6
|
||||
line 7
|
||||
line 8
|
||||
line 9
|
||||
line 10
|
||||
line 11
|
||||
line 12
|
||||
line 13
|
||||
line 14
|
||||
line 15
|
||||
line 16
|
||||
line 17
|
||||
line 18
|
||||
line 19
|
||||
line 20
|
||||
line 21
|
||||
line 22
|
||||
line 23
|
||||
line 24
|
||||
line 25
|
||||
line 26
|
||||
line 27
|
||||
line 28
|
||||
line 29
|
||||
line 30
|
||||
|
39
testing/examples/ob-lilypond-broken.org
Normal file
39
testing/examples/ob-lilypond-broken.org
Normal file
|
@ -0,0 +1,39 @@
|
|||
* Faulty lilypond org file for test purposes (do not adjust)
|
||||
line 2
|
||||
line 3
|
||||
line 4
|
||||
line 5
|
||||
line 6
|
||||
line 7
|
||||
line 8
|
||||
line 9
|
||||
line 10
|
||||
line 11
|
||||
line 12
|
||||
line 13
|
||||
line 14
|
||||
line 15
|
||||
line 16
|
||||
line 17
|
||||
line 18
|
||||
line 19
|
||||
line 20
|
||||
line 21
|
||||
line 22
|
||||
line 23
|
||||
line 24
|
||||
line 25
|
||||
line 26
|
||||
line 27
|
||||
line 28
|
||||
line 29
|
||||
line 30
|
||||
line 31
|
||||
line 32
|
||||
line 33
|
||||
line 34
|
||||
line 35
|
||||
line 36
|
||||
line 37
|
||||
line 38
|
||||
line 39
|
15
testing/examples/ob-lilypond-test.error
Normal file
15
testing/examples/ob-lilypond-test.error
Normal file
|
@ -0,0 +1,15 @@
|
|||
Processing `xxx'
|
||||
Parsing...
|
||||
/path/to/tangled/file/test.ly:25:0: error: syntax error, unexpected \score, expecting '='
|
||||
|
||||
\score {
|
||||
Interpreting music... [8][16][24][32]
|
||||
Preprocessing graphical objects...
|
||||
Interpreting music...
|
||||
MIDI output to `xxx'
|
||||
Finding the ideal number of pages...
|
||||
Fitting music on 2 or 3 pages...
|
||||
Drawing systems...
|
||||
Layout output to `xxx'
|
||||
Converting to `xxx'...
|
||||
error: failed files: "/Path/to/tangled/file/test.ly/example.ly"
|
30
testing/examples/ob-lilypond-test.ly
Normal file
30
testing/examples/ob-lilypond-test.ly
Normal file
|
@ -0,0 +1,30 @@
|
|||
|
||||
% [[file:~/.emacs.d/martyn/martyn/ob-lilypond/test/test-build/test.org::*LilyPond%2520Version][LilyPond-Version:1]]
|
||||
|
||||
\version "2.12.3"
|
||||
|
||||
% LilyPond-Version:1 ends here
|
||||
|
||||
% [[file:~/.emacs.d/martyn/martyn/ob-lilypond/test/test-build/test.org::*lilypond%2520block%2520for%2520test%2520purposes][lilypond-block-for-test-purposes:1]]
|
||||
|
||||
\score {
|
||||
\relative c' {
|
||||
c8 d e f g a b c |
|
||||
b a g f e d c4 |
|
||||
}
|
||||
|
||||
% lilypond-block-for-test-purposes:1 ends here
|
||||
|
||||
% [[file:~/.emacs.d/martyn/martyn/ob-lilypond/test/test-build/test.org::*lilypond%2520block%2520for%2520test%2520purposes][lilypond-block-for-test-purposes:2]]
|
||||
|
||||
\layout {
|
||||
}
|
||||
\midi {
|
||||
\context {
|
||||
\Score
|
||||
tempoWholesPerMinute = #(ly:make-moment 150 4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
% lilypond-block-for-test-purposes:2 ends here
|
37
testing/examples/ob-lilypond-test.org
Normal file
37
testing/examples/ob-lilypond-test.org
Normal file
|
@ -0,0 +1,37 @@
|
|||
* Test org lilypond file
|
||||
|
||||
This is a simple file for test purposes
|
||||
|
||||
** LilyPond Version
|
||||
|
||||
#+begin_src lilypond
|
||||
|
||||
\version "2.12.3"
|
||||
|
||||
#+end_src
|
||||
|
||||
** DONE lilypond block for test purposes
|
||||
|
||||
#+begin_src lilypond
|
||||
|
||||
\score {
|
||||
\relative c' {
|
||||
c8 d e f g a b c |
|
||||
b a g f e d c4 |
|
||||
}
|
||||
|
||||
#+end_src
|
||||
|
||||
#+begin_src lilypond
|
||||
|
||||
\layout {
|
||||
}
|
||||
\midi {
|
||||
\context {
|
||||
\Score
|
||||
tempoWholesPerMinute = #(ly:make-moment 150 4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#+end_src
|
323
testing/lisp/test-ob-lilypond.el
Normal file
323
testing/lisp/test-ob-lilypond.el
Normal file
|
@ -0,0 +1,323 @@
|
|||
(save-excursion
|
||||
(set-buffer (get-buffer-create "test-ob-lilypond.el"))
|
||||
(setq ly-here
|
||||
(file-name-directory
|
||||
(buffer-file-name
|
||||
(current-buffer)))))
|
||||
|
||||
(ert-deftest ob-lilypond/assert ()
|
||||
(should t))
|
||||
|
||||
(ert-deftest ob-lilypond/feature-provision ()
|
||||
(should (featurep 'ob-lilypond)))
|
||||
|
||||
(ert-deftest ob-lilypond/check-lilypond-alias ()
|
||||
(should (fboundp 'lilypond-mode)))
|
||||
|
||||
(ert-deftest ob-lilypond/org-babel-tangle-lang-exts ()
|
||||
(let ((found nil)
|
||||
(list org-babel-tangle-lang-exts))
|
||||
(while list
|
||||
(when (equal (car list) '("LilyPond" . "ly"))
|
||||
(setq found t))
|
||||
(setq list (cdr list)))
|
||||
(should found)))
|
||||
|
||||
(ert-deftest ob-lilypond/org-babel-prep-session:lilypond ()
|
||||
(should-error (org-babel-prep-session:lilypond nil nil))
|
||||
:type 'error)
|
||||
|
||||
(ert-deftest ob-lilypond/ly-version-const ()
|
||||
(should (boundp 'ly-version)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-version-command ()
|
||||
(should (equal "ob-lilypond version 0.2" (ly-version)))
|
||||
(with-temp-buffer
|
||||
(ly-version t)
|
||||
(should (equal "ob-lilypond version 0.2"
|
||||
(buffer-substring (point-min) (point-max))))))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-compile-lilyfile ()
|
||||
(should (equal
|
||||
`(,(ly-determine-ly-path) ;program
|
||||
nil ;infile
|
||||
"*lilypond*" ;buffer
|
||||
t ;display
|
||||
,(if ly-gen-png "--png" "") ;&rest...
|
||||
,(if ly-gen-html "--html" "")
|
||||
,(if ly-use-eps "-dbackend=eps" "")
|
||||
,(if ly-gen-svg "-dbackend=svg" "")
|
||||
"--output=test-file"
|
||||
"test-file.ly")
|
||||
(ly-compile-lilyfile "test-file.ly" t))))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-compile-post-tangle ()
|
||||
(should (boundp 'ly-compile-post-tangle)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-display-pdf-post-tangle ()
|
||||
(should (boundp 'ly-display-pdf-post-tangle)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-play-midi-post-tangle ()
|
||||
(should (boundp 'ly-play-midi-post-tangle)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-OSX-ly-path ()
|
||||
(should (boundp 'ly-OSX-ly-path))
|
||||
(should (stringp ly-OSX-ly-path)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-OSX-pdf-path ()
|
||||
(should (boundp 'ly-OSX-pdf-path))
|
||||
(should (stringp ly-OSX-pdf-path)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-OSX-midi-path ()
|
||||
(should (boundp 'ly-OSX-midi-path))
|
||||
(should (stringp ly-OSX-midi-path)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-nix-ly-path ()
|
||||
(should (boundp 'ly-nix-ly-path))
|
||||
(should (stringp ly-nix-ly-path)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-nix-pdf-path ()
|
||||
(should (boundp 'ly-nix-pdf-path))
|
||||
(should (stringp ly-nix-pdf-path)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-nix-midi-path ()
|
||||
(should (boundp 'ly-nix-midi-path))
|
||||
(should (stringp ly-nix-midi-path)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-win32-ly-path ()
|
||||
(should (boundp 'ly-win32-ly-path))
|
||||
(should (stringp ly-win32-ly-path)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-win32-pdf-path ()
|
||||
(should (boundp 'ly-win32-pdf-path))
|
||||
(should (stringp ly-win32-pdf-path)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-win32-midi-path ()
|
||||
(should (boundp 'ly-win32-midi-path))
|
||||
(should (stringp ly-win32-midi-path)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-gen-png ()
|
||||
(should (boundp 'ly-gen-png)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-gen-svg ()
|
||||
(should (boundp 'ly-gen-svg)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-gen-html ()
|
||||
(should (boundp 'ly-gen-html)))
|
||||
|
||||
(ert-deftest ob-lilypond/use-eps ()
|
||||
(should (boundp 'ly-use-eps)))
|
||||
|
||||
(ert-deftest ob-lilypond/org-babel-default-header-args:lilypond ()
|
||||
(should (equal '((:tangle . "yes")
|
||||
(:noweb . "yes")
|
||||
(:results . "silent")
|
||||
(:comments . "yes"))
|
||||
org-babel-default-header-args:lilypond)))
|
||||
|
||||
;;TODO finish...
|
||||
(ert-deftest ob-lilypond/org-babel-expand-body:lilypond ()
|
||||
(should (equal "This is a test"
|
||||
(org-babel-expand-body:lilypond "This is a test" ()))))
|
||||
|
||||
;;TODO (ert-deftest ly-test-org-babel-execute:lilypond ())
|
||||
(ert-deftest ob-lilypond/ly-check-for-compile-error ()
|
||||
(set-buffer (get-buffer-create "*lilypond*"))
|
||||
(erase-buffer)
|
||||
(should (not (ly-check-for-compile-error nil t)))
|
||||
(insert-file-contents (concat ly-here
|
||||
"../examples/ob-lilypond-test.error")
|
||||
nil nil nil t)
|
||||
(goto-char (point-min))
|
||||
(should (ly-check-for-compile-error nil t))
|
||||
(kill-buffer "*lilypond*"))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-process-compile-error ()
|
||||
(find-file-other-window (concat
|
||||
ly-here
|
||||
"../examples/ob-lilypond-broken.org"))
|
||||
(set-buffer (get-buffer-create "*lilypond*"))
|
||||
(insert-file-contents (concat
|
||||
ly-here
|
||||
"../examples/ob-lilypond-test.error")
|
||||
nil nil nil t)
|
||||
(goto-char (point-min))
|
||||
(search-forward "error:" nil t)
|
||||
(should-error
|
||||
(ly-process-compile-error (concat
|
||||
ly-here
|
||||
"../examples/ob-lilypond-broken.ly"))
|
||||
:type 'error)
|
||||
(set-buffer "ob-lilypond-broken.org")
|
||||
(should (equal 238 (point)))
|
||||
(exchange-point-and-mark)
|
||||
(should (equal (+ 238 (length "line 25")) (point)))
|
||||
(kill-buffer "*lilypond*")
|
||||
(kill-buffer "ob-lilypond-broken.org"))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-mark-error-line ()
|
||||
(let ((file-name (concat
|
||||
ly-here
|
||||
"../examples/ob-lilypond-broken.org"))
|
||||
(expected-point-min 198)
|
||||
(expected-point-max 205)
|
||||
(line "line 20"))
|
||||
(find-file-other-window file-name)
|
||||
(ly-mark-error-line file-name line)
|
||||
(should (equal expected-point-min (point)))
|
||||
|
||||
(exchange-point-and-mark)
|
||||
(should (= expected-point-max (point)))
|
||||
(kill-buffer (file-name-nondirectory file-name))))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-parse-line-num ()
|
||||
(with-temp-buffer
|
||||
(insert-file-contents (concat
|
||||
ly-here
|
||||
"../examples/ob-lilypond-test.error")
|
||||
nil nil nil t)
|
||||
(goto-char (point-min))
|
||||
(search-forward "error:")
|
||||
(should (equal 25 (ly-parse-line-num (current-buffer))))))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-parse-error-line ()
|
||||
(let ((ly-file (concat
|
||||
ly-here
|
||||
"../examples/ob-lilypond-broken.ly")))
|
||||
(should (equal "line 20"
|
||||
(ly-parse-error-line ly-file 20)))
|
||||
(should (not (ly-parse-error-line ly-file 0)))))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-attempt-to-open-pdf ()
|
||||
(let ((post-tangle ly-display-pdf-post-tangle)
|
||||
(ly-file (concat
|
||||
ly-here
|
||||
"../examples/ob-lilypond-test.ly"))
|
||||
(pdf-file (concat
|
||||
ly-here
|
||||
"../examples/ob-lilypond-test.pdf")))
|
||||
(setq ly-open-pdf-post-tangle t)
|
||||
(when (not (file-exists-p pdf-file))
|
||||
(set-buffer (get-buffer-create (file-name-nondirectory pdf-file)))
|
||||
(write-file pdf-file))
|
||||
(should (equal
|
||||
(concat
|
||||
(ly-determine-pdf-path) " " pdf-file)
|
||||
(ly-attempt-to-open-pdf ly-file t)))
|
||||
(delete-file pdf-file)
|
||||
(kill-buffer (file-name-nondirectory pdf-file))
|
||||
(should (equal
|
||||
"No pdf file generated so can't display!"
|
||||
(ly-attempt-to-open-pdf pdf-file)))
|
||||
(setq ly-display-pdf-post-tangle post-tangle)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-attempt-to-play-midi ()
|
||||
(let ((post-tangle ly-play-midi-post-tangle)
|
||||
(ly-file (concat
|
||||
ly-here
|
||||
"../examples/ob-lilypond-test.ly"))
|
||||
(midi-file (concat
|
||||
ly-here
|
||||
"../examples/ob-lilypond-test.midi")))
|
||||
(setq ly-play-midi-post-tangle t)
|
||||
(when (not (file-exists-p midi-file))
|
||||
(set-buffer (get-buffer-create (file-name-nondirectory midi-file)))
|
||||
(write-file midi-file))
|
||||
(should (equal
|
||||
(concat
|
||||
(ly-determine-midi-path) " " midi-file)
|
||||
(ly-attempt-to-play-midi ly-file t)))
|
||||
(delete-file midi-file)
|
||||
(kill-buffer (file-name-nondirectory midi-file))
|
||||
(should (equal
|
||||
"No midi file generated so can't play!"
|
||||
(ly-attempt-to-play-midi midi-file)))
|
||||
(setq ly-play-midi-post-tangle post-tangle)))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-determine-ly-path ()
|
||||
(should (equal ly-OSX-ly-path
|
||||
(ly-determine-ly-path "darwin")))
|
||||
(should (equal ly-win32-ly-path
|
||||
(ly-determine-ly-path "win32")))
|
||||
(should (equal ly-nix-ly-path
|
||||
(ly-determine-ly-path "nix"))))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-determine-pdf-path ()
|
||||
(should (equal ly-OSX-pdf-path
|
||||
(ly-determine-pdf-path "darwin")))
|
||||
(should (equal ly-win32-pdf-path
|
||||
(ly-determine-pdf-path "win32")))
|
||||
(should (equal ly-nix-pdf-path
|
||||
(ly-determine-pdf-path "nix"))))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-determine-midi-path ()
|
||||
(should (equal ly-OSX-midi-path
|
||||
(ly-determine-midi-path "darwin")))
|
||||
(should (equal ly-win32-midi-path
|
||||
(ly-determine-midi-path "win32")))
|
||||
(should (equal ly-nix-midi-path
|
||||
(ly-determine-midi-path "nix"))))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-toggle-midi-play-toggles-flag ()
|
||||
(if ly-play-midi-post-tangle
|
||||
(progn
|
||||
(ly-toggle-midi-play)
|
||||
(should (not ly-play-midi-post-tangle))
|
||||
(ly-toggle-midi-play)
|
||||
(should ly-play-midi-post-tangle))
|
||||
(ly-toggle-midi-play)
|
||||
(should ly-play-midi-post-tangle)
|
||||
(ly-toggle-midi-play)
|
||||
(should (not ly-play-midi-post-tangle))))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-toggle-pdf-display-toggles-flag ()
|
||||
(if ly-display-pdf-post-tangle
|
||||
(progn
|
||||
(ly-toggle-pdf-display)
|
||||
(should (not ly-display-pdf-post-tangle))
|
||||
(ly-toggle-pdf-display)
|
||||
(should ly-display-pdf-post-tangle))
|
||||
(ly-toggle-pdf-display)
|
||||
(should ly-display-pdf-post-tangle)
|
||||
(ly-toggle-pdf-display)
|
||||
(should (not ly-display-pdf-post-tangle))))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-toggle-png-generation-toggles-flag ()
|
||||
(if ly-gen-png
|
||||
(progn
|
||||
(ly-toggle-png-generation)
|
||||
(should (not ly-gen-png))
|
||||
(ly-toggle-png-generation)
|
||||
(should ly-gen-png))
|
||||
(ly-toggle-png-generation)
|
||||
(should ly-gen-png)
|
||||
(ly-toggle-png-generation)
|
||||
(should (not ly-gen-png))))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-toggle-html-generation-toggles-flag ()
|
||||
(if ly-gen-html
|
||||
(progn
|
||||
(ly-toggle-html-generation)
|
||||
(should (not ly-gen-html))
|
||||
(ly-toggle-html-generation)
|
||||
(should ly-gen-html))
|
||||
(ly-toggle-html-generation)
|
||||
(should ly-gen-html)
|
||||
(ly-toggle-html-generation)
|
||||
(should (not ly-gen-html))))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-switch-extension-with-extensions ()
|
||||
(should (equal "test-name.xyz"
|
||||
(ly-switch-extension "test-name" ".xyz")))
|
||||
(should (equal "test-name.xyz"
|
||||
(ly-switch-extension "test-name.abc" ".xyz")))
|
||||
(should (equal "test-name"
|
||||
(ly-switch-extension "test-name.abc" ""))))
|
||||
|
||||
(ert-deftest ob-lilypond/ly-switch-extension-with-paths ()
|
||||
(should (equal "/some/path/to/test-name.xyz"
|
||||
(ly-switch-extension "/some/path/to/test-name" ".xyz"))))
|
||||
|
||||
(provide 'test-ob-lilypond)
|
||||
|
||||
;;; test-ob-lilypond.el ends here
|
Loading…
Reference in a new issue