summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartyn Jago <martyn.jago@btinternet.com>2011-07-01 12:22:05 -0700
committerEric Schulte <schulte.eric@gmail.com>2011-07-01 12:22:33 -0700
commitdacf18e80a906166a601e13d8e33c2ef0365c7b9 (patch)
tree7ca7a727e3306d37ac7d549a295c9a59d4c8ed59
parent0b6eb6de3caba434cd37566b0a6bdc91fc1c15bc (diff)
downloadorg-mode-dacf18e80a906166a601e13d8e33c2ef0365c7b9.tar.gz
ob-lilypond: test suite, all tests passing
-rw-r--r--lisp/ob-lilypond.el17
-rw-r--r--testing/examples/ob-lilypond-broken.ly31
-rw-r--r--testing/examples/ob-lilypond-broken.org39
-rw-r--r--testing/examples/ob-lilypond-test.error15
-rw-r--r--testing/examples/ob-lilypond-test.ly30
-rw-r--r--testing/examples/ob-lilypond-test.org37
-rw-r--r--testing/lisp/test-ob-lilypond.el323
7 files changed, 484 insertions, 8 deletions
diff --git a/lisp/ob-lilypond.el b/lisp/ob-lilypond.el
index 031eb8f..39aa78c 100644
--- a/lisp/ob-lilypond.el
+++ b/lisp/ob-lilypond.el
@@ -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
diff --git a/testing/examples/ob-lilypond-broken.ly b/testing/examples/ob-lilypond-broken.ly
new file mode 100644
index 0000000..e836f6d
--- /dev/null
+++ b/testing/examples/ob-lilypond-broken.ly
@@ -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
+
diff --git a/testing/examples/ob-lilypond-broken.org b/testing/examples/ob-lilypond-broken.org
new file mode 100644
index 0000000..557418b
--- /dev/null
+++ b/testing/examples/ob-lilypond-broken.org
@@ -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
diff --git a/testing/examples/ob-lilypond-test.error b/testing/examples/ob-lilypond-test.error
new file mode 100644
index 0000000..ceae291
--- /dev/null
+++ b/testing/examples/ob-lilypond-test.error
@@ -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"
diff --git a/testing/examples/ob-lilypond-test.ly b/testing/examples/ob-lilypond-test.ly
new file mode 100644
index 0000000..745600d
--- /dev/null
+++ b/testing/examples/ob-lilypond-test.ly
@@ -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
diff --git a/testing/examples/ob-lilypond-test.org b/testing/examples/ob-lilypond-test.org
new file mode 100644
index 0000000..cd8587a
--- /dev/null
+++ b/testing/examples/ob-lilypond-test.org
@@ -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
diff --git a/testing/lisp/test-ob-lilypond.el b/testing/lisp/test-ob-lilypond.el
new file mode 100644
index 0000000..16d6f09
--- /dev/null
+++ b/testing/lisp/test-ob-lilypond.el
@@ -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