ob-lilypond: test suite, all tests passing

This commit is contained in:
Martyn Jago 2011-07-01 12:22:05 -07:00 committed by Eric Schulte
parent 0b6eb6de3c
commit dacf18e80a
7 changed files with 484 additions and 8 deletions

View File

@ -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

View 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

View 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

View 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"

View 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

View 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

View 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