summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <mail@nicolasgoaziou.fr>2016-02-17 15:19:11 +0100
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2016-02-17 22:49:19 +0100
commit923f512ee4f044361993ce7ab7daa3dfec2c8551 (patch)
tree2f20ab5dccac784bb145914356b3e4e32aea539e
parentaa2db034a0edbc60f006e5be60faf9d2ca68575d (diff)
downloadorg-mode-923f512ee4f044361993ce7ab7daa3dfec2c8551.tar.gz
org-colview: Add tests
* testing/lisp/test-org-colview.el (test-org-colview/columns-summary): New test.
-rw-r--r--testing/lisp/test-org-colview.el335
1 files changed, 335 insertions, 0 deletions
diff --git a/testing/lisp/test-org-colview.el b/testing/lisp/test-org-colview.el
index b8c62ef..75c3e2e 100644
--- a/testing/lisp/test-org-colview.el
+++ b/testing/lisp/test-org-colview.el
@@ -21,6 +21,8 @@
;;; Column view
+(require 'cl-lib)
+
(ert-deftest test-org-colview/columns-scope ()
"Test `org-columns' scope."
;; Before the first headline, view all document.
@@ -119,6 +121,339 @@
(org-columns))
(org-trim (get-char-property (point) 'display))))))
+(ert-deftest test-org-colview/columns-summary ()
+ "Test `org-columns' summary types."
+ ;; {+} and {+;format} add numbers.
+ (should
+ (equal
+ "3"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: 1
+:END:
+** S1
+:PROPERTIES:
+:A: 2
+:END:"
+ (let ((org-columns-default-format "%A{+}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ (should
+ (equal
+ "3.0"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: 1
+:END:
+** S1
+:PROPERTIES:
+:A: 2
+:END:"
+ (let ((org-columns-default-format "%A{+;%.1f}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ ;; {$} is a shortcut for {+;%.2f}.
+ (should
+ (equal
+ "3.60"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: 1.50
+:END:
+** S1
+:PROPERTIES:
+:A: 2.10
+:END:"
+ (let ((org-columns-default-format "%A{$}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ ;; {:} sums times. Plain numbers are hours.
+ (should
+ (equal
+ "4:10"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: 1:30
+:END:
+** S1
+:PROPERTIES:
+:A: 2:40
+:END:"
+ (let ((org-columns-default-format "%A{:}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ (should
+ (equal
+ "3:30"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: 1:30
+:END:
+** S1
+:PROPERTIES:
+:A: 2
+:END:"
+ (let ((org-columns-default-format "%A{:}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ ;; {X}, {X/} and {X%} indicate checkbox status.
+ (should
+ (equal
+ "[ ]"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: [ ]
+:END:
+** S1
+:PROPERTIES:
+:A: [ ]
+:END:"
+ (let ((org-columns-default-format "%A{X}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ (should
+ (equal
+ "[-]"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: [ ]
+:END:
+** S1
+:PROPERTIES:
+:A: [X]
+:END:"
+ (let ((org-columns-default-format "%A{X}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ (should
+ (equal
+ "[X]"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: [X]
+:END:
+** S1
+:PROPERTIES:
+:A: [X]
+:END:"
+ (let ((org-columns-default-format "%A{X}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ (should
+ (equal
+ "[1/2]"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: [ ]
+:END:
+** S1
+:PROPERTIES:
+:A: [X]
+:END:"
+ (let ((org-columns-default-format "%A{X/}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ (should
+ (equal
+ "[50%]"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: [ ]
+:END:
+** S1
+:PROPERTIES:
+:A: [X]
+:END:"
+ (let ((org-columns-default-format "%A{X%}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ ;; {min} is the smallest number in column, {max} the largest one.
+ ;; {mean} is the arithmetic mean of numbers in column.
+ (should
+ (equal
+ "42"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: 99
+:END:
+** S1
+:PROPERTIES:
+:A: 42
+:END:"
+ (let ((org-columns-default-format "%A{min}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ (should
+ (equal
+ "99"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: 99
+:END:
+** S1
+:PROPERTIES:
+:A: 42
+:END:"
+ (let ((org-columns-default-format "%A{max}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ (should
+ (equal
+ "51.0"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: 60
+:END:
+** S1
+:PROPERTIES:
+:A: 42
+:END:"
+ (let ((org-columns-default-format "%A{mean}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ ;; {:min}, {:max} and {:mean} apply to time values.
+ (should
+ (equal
+ "1:20"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: 4:40
+:END:
+** S1
+:PROPERTIES:
+:A: 1:20
+:END:"
+ (let ((org-columns-default-format "%A{:min}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ (should
+ (equal
+ "4:40"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: 4:40
+:END:
+** S1
+:PROPERTIES:
+:A: 1:20
+:END:"
+ (let ((org-columns-default-format "%A{:max}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ (should
+ (equal
+ "3:00"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: 4:40
+:END:
+** S1
+:PROPERTIES:
+:A: 1:20
+:END:"
+ (let ((org-columns-default-format "%A{:mean}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ ;; {@min}, {@max} and {@mean} apply to ages.
+ (should
+ (equal
+ (org-columns-number-to-string
+ (float-time
+ (time-subtract
+ (current-time)
+ (apply #'encode-time (org-parse-time-string "<2014-03-04 Tue>"))))
+ 'min_age)
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: <2012-03-29 Thu>
+:END:
+** S1
+:PROPERTIES:
+:A: <2014-03-04 Tue>
+:END:"
+ (let ((org-columns-default-format "%A{@min}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ (should
+ (equal
+ (org-columns-number-to-string
+ (float-time
+ (time-subtract
+ (current-time)
+ (apply #'encode-time (org-parse-time-string "<2012-03-29 Thu>"))))
+ 'max_age)
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: <2012-03-29 Thu>
+:END:
+** S1
+:PROPERTIES:
+:A: <2014-03-04 Tue>
+:END:"
+ (let ((org-columns-default-format "%A{@max}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ (should
+ (equal
+ (org-columns-number-to-string
+ (/ (+ (float-time
+ (time-subtract
+ (current-time)
+ (apply #'encode-time (org-parse-time-string "<2014-03-04 Tue>"))))
+ (float-time
+ (time-subtract
+ (current-time)
+ (apply #'encode-time (org-parse-time-string "<2012-03-29 Thu>")))))
+ 2)
+ 'mean_age)
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: <2012-03-29 Thu>
+:END:
+** S1
+:PROPERTIES:
+:A: <2014-03-04 Tue>
+:END:"
+ (let ((org-columns-default-format "%A{@mean}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified))))
+ ;; @min, @max and @mean also accept regular duration in
+ ;; a "?d ?h ?m ?s" format.
+ (should
+ (equal
+ "1d 10h 0m 0s"
+ (org-test-with-temp-text
+ "* H
+** S1
+:PROPERTIES:
+:A: 1d 10h
+:END:
+** S1
+:PROPERTIES:
+:A: 5d 3h
+:END:"
+ (let ((org-columns-default-format "%A{@min}")) (org-columns))
+ (get-char-property (point) 'org-columns-value-modified)))))
+
;;; Dynamic block