summaryrefslogtreecommitdiff
path: root/lisp/ldg-test.el
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2012-04-26 16:39:25 -0500
committerJohn Wiegley <johnw@newartisans.com>2012-04-26 16:39:25 -0500
commit64a9b42381c26baf24e58b40f50f0b253e551811 (patch)
tree5447a29dff64c3a8b7be8100a01bcb4a2d73b0bb /lisp/ldg-test.el
parent7cc550fc22357e2ded194d3e65287c6b3317f5ae (diff)
parentb4407c10c0071365322b2963747bf42a57fd7304 (diff)
downloadfork-ledger-64a9b42381c26baf24e58b40f50f0b253e551811.tar.gz
fork-ledger-64a9b42381c26baf24e58b40f50f0b253e551811.tar.bz2
fork-ledger-64a9b42381c26baf24e58b40f50f0b253e551811.zip
Merge branch 'release/v3.0.0-20120426'
Diffstat (limited to 'lisp/ldg-test.el')
-rw-r--r--lisp/ldg-test.el75
1 files changed, 75 insertions, 0 deletions
diff --git a/lisp/ldg-test.el b/lisp/ldg-test.el
new file mode 100644
index 00000000..478c62d8
--- /dev/null
+++ b/lisp/ldg-test.el
@@ -0,0 +1,75 @@
+(defcustom ledger-source-directory "~/src/ledger"
+ "Directory where the Ledger sources are located."
+ :type 'directory
+ :group 'ledger)
+
+(defcustom ledger-test-binary "~/Products/ledger/debug/ledger"
+ "Directory where the Ledger sources are located."
+ :type 'file
+ :group 'ledger)
+
+(defun ledger-test-org-narrow-to-entry ()
+ (outline-back-to-heading)
+ (narrow-to-region (point) (progn (outline-next-heading) (point)))
+ (goto-char (point-min)))
+
+(defun ledger-test-create ()
+ (interactive)
+ (let ((uuid (org-entry-get (point) "ID")))
+ (when (string-match "\\`\\([^-]+\\)-" uuid)
+ (let ((prefix (match-string 1 uuid))
+ input output)
+ (save-restriction
+ (ledger-test-org-narrow-to-entry)
+ (goto-char (point-min))
+ (while (re-search-forward "#\\+begin_src ledger" nil t)
+ (goto-char (match-end 0))
+ (forward-line 1)
+ (let ((beg (point)))
+ (re-search-forward "#\\+end_src")
+ (setq input
+ (concat (or input "")
+ (buffer-substring beg (match-beginning 0))))))
+ (goto-char (point-min))
+ (while (re-search-forward ":OUTPUT:" nil t)
+ (goto-char (match-end 0))
+ (forward-line 1)
+ (let ((beg (point)))
+ (re-search-forward ":END:")
+ (setq output
+ (concat (or output "")
+ (buffer-substring beg (match-beginning 0)))))))
+ (find-file-other-window
+ (expand-file-name (concat prefix ".test")
+ (expand-file-name "test/regress"
+ ledger-source-directory)))
+ (ledger-mode)
+ (if input
+ (insert input)
+ (insert "2012-03-17 Payee\n")
+ (insert " Expenses:Food $20\n")
+ (insert " Assets:Cash\n"))
+ (insert "\ntest reg\n")
+ (if output
+ (insert output))
+ (insert "end test\n")))))
+
+(defun ledger-test-run ()
+ (interactive)
+ (save-excursion
+ (goto-char (point-min))
+ (when (re-search-forward "^test \\(.+?\\)\\( ->.*\\)?$" nil t)
+ (let ((command (expand-file-name ledger-test-binary))
+ (args (format "--args-only --columns=80 --no-color -f \"%s\" %s"
+ buffer-file-name (match-string 1))))
+ (setq args (replace-regexp-in-string "\\$sourcepath"
+ ledger-source-directory args))
+ (kill-new args)
+ (message "Testing: ledger %s" args)
+ (let ((prev-directory default-directory))
+ (cd ledger-source-directory)
+ (unwind-protect
+ (async-shell-command (format "\"%s\" %s" command args))
+ (cd prev-directory)))))))
+
+(provide 'ldg-test)