You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

640 lines
10 KiB

;; Tests for operations on list items -*- lexical-binding: t -*-
(add-to-list 'load-path ".")
(load "init" nil t)
(init-rst-ert t)
(ert-deftest items-asserts ()
"Check some assertions."
(should (equal ert-Buf-point-char "\^@"))
(should (equal ert-Buf-mark-char "\^?"))
)
(defun find-begs (beg-re)
(rst-find-begs (region-beginning) (region-end) beg-re))
(ert-deftest rst-find-begs ()
"Tests `rst-find-begs'."
(should (ert-equal-buffer-return
'(find-begs 'itmany-beg-1)
"\^@1 Normal paragraph.
* 22 A bullet
* 37 Another bullet
58 Another normal paragraph.
\^?"
t '((22 . 0)
(37 . 0))))
(should (ert-equal-buffer-return
'(find-begs 'itmany-beg-1)
"1 Normal paragraph.
\^?* 22 A bullet
* 37 Another bullet
\^@58 Another normal paragraph.
"
t '((22 . 0)
(37 . 0))))
(should (ert-equal-buffer-return
'(find-begs 'itmany-beg-1)
"1 Normal paragraph.
\^?* 22 A bullet
* 37 Another bullet
1. 58 An enum.
2. 74 Another enum.
\^@95 Another normal paragraph.
"
t '((22 . 0)
(37 . 0)
(58 . 0)
(74 . 0))))
(should (ert-equal-buffer-return
'(find-begs 'bul-beg)
"\^@
- 2 one
+ 10 two
* 19 three
\^?"
t '((2 . 0)
(10 . 0)
(19 . 0))))
(should (ert-equal-buffer-return
'(find-begs 'bul-beg)
"
- 2 one\^@
+ 10 two
* 19 three
\^?"
t '((2 . 0)
(10 . 0)
(19 . 0))))
(should (ert-equal-buffer-return
'(find-begs 'bul-beg)
"+ 1 zero
\^@- 10 one
+ 19 two
* 28 three\^?
"
t '((10 . 0)
(19 . 0)
(28 . 0))))
(should (ert-equal-buffer-return
'(find-begs 'bul-beg)
"\^@
- 2 one
+ 11 two
* 23 three
\^?"
t '((2 . 0)
(13 . 2)
(23 . 0))))
(should (ert-equal-buffer-return
'(find-begs 'bul-beg)
"\^@Normal paragraph
* 19 bullet
* 32 three
Another normal paragraph
\^?"
t '((19 . 0)
(34 . 2))))
)
(ert-deftest rst-find-begs-BUGS ()
"Exposes bugs in `rst-find-begs'."
:expected-result :failed ;; These are bugs
(should (ert-equal-buffer-return
'(find-begs 'bul-beg)
"\^@Normal paragraph
* 18 bullet
* 30 three
Another normal paragraph
\^?"
t '((18 . 0)
(32 . 2))))
(should (ert-equal-buffer-return
'(find-begs 'bul-beg)
"\^@
- 2 one
+ 10 two
* 21 three
\^?"
t '((2 . 0)
(12 . 2)
(19 . 0))))
)
(ert-deftest rst-convert-bullets-to-enumeration ()
"Tests `rst-convert-bullets-to-enumeration'."
(should (ert-equal-buffer
'(rst-convert-bullets-to-enumeration)
"\^@Normal paragraph.
* A bullet
* Another bullet
Another normal paragraph.
\^?"
"\^@Normal paragraph.
1. A bullet
2. Another bullet
Another normal paragraph.
\^?" t))
(should (ert-equal-buffer
'(rst-convert-bullets-to-enumeration)
"Normal paragraph.
\^?* A bullet
* Another bullet
\^@Another normal paragraph.
"
"Normal paragraph.
\^?1. A bullet
2. Another bullet
\^@Another normal paragraph.
" t))
(should (ert-equal-buffer
'(rst-convert-bullets-to-enumeration)
"Normal paragraph.
\^?* A bullet
* Another bullet
1. A bullet
2. Another bullet
\^@Another normal paragraph.
"
"Normal paragraph.
\^?1. A bullet
2. Another bullet
3. A bullet
4. Another bullet
\^@Another normal paragraph.
" t))
)
(ert-deftest rst-convert-bullets-to-enumeration-BUGS ()
"Exposes bugs in `rst-convert-bullets-to-enumeration'."
:expected-result :failed ;; These are bugs
(should (ert-equal-buffer
'(rst-convert-bullets-to-enumeration)
"\^@Normal paragraph.
* A bullet
* Another bullet
* A bullet
* Another bullet
Another normal paragraph.
\^?"
"\^@Normal paragraph.
1. A bullet
2. Another bullet
* A bullet
* Another bullet
Another normal paragraph.
\^?" t))
)
(ert-deftest rst-insert-list-continue ()
"Tests `rst-insert-list' when continuing a list."
(should (ert-equal-buffer
'(rst-insert-list)
"* Some text\^@\n"
"* Some text
* \^@\n"))
(should (ert-equal-buffer
'(rst-insert-list)
"* Some \^@text\n"
"* Some text
* \^@\n"))
(should (ert-equal-buffer
'(rst-insert-list)
"* \^@Some text\n"
"* Some text
* \^@\n"))
(should (ert-equal-buffer
'(rst-insert-list)
"* Some text
- A deeper hyphen bullet\^@\n"
"* Some text
- A deeper hyphen bullet
- \^@\n"))
(should (ert-equal-buffer
'(rst-insert-list)
"* Some text
- \^@Some text\n"
"* Some text
- Some text
- \^@\n"))
(should (ert-equal-buffer
'(rst-insert-list)
"1. Some text\^@\n"
"1. Some text
2. \^@\n"))
(should (ert-equal-buffer
'(rst-insert-list)
"2. Some text\^@\n"
"2. Some text
3. \^@\n"))
(should (ert-equal-buffer
'(rst-insert-list)
"a) Some text\^@\n"
"a) Some text
b) \^@\n"))
(should (ert-equal-buffer
'(rst-insert-list)
"(A) Some text\^@\n"
"(A) Some text
\(B) \^@\n"))
(should (ert-equal-buffer
'(rst-insert-list)
"(I) Some text\^@\n"
"(I) Some text
\(J) \^@\n"))
(should (ert-equal-buffer
'(rst-insert-list)
"(I) Some text\^@\n"
"(I) Some text
\(J) \^@\n"))
(should (ert-equal-buffer
'(rst-insert-list)
"(h) Some text
\(i) Some text\^@\n"
"(h) Some text
\(i) Some text
\(j) \^@\n"))
(should (ert-equal-buffer
'(rst-insert-list t)
"(i) Some text\^@\n"
"(i) Some text
\(ii) \^@\n"))
(should (ert-equal-buffer
'(rst-insert-list)
"(IV) Some text
\(V) Some text\^@\n"
"(IV) Some text
\(V) Some text
\(VI) \^@\n"))
)
(ert-deftest rst-insert-list-continue-BUGS ()
"Exposes bugs in `rst-insert-list-continue'."
:expected-result :failed ;; These are bugs
(should (ert-equal-buffer
'(rst-insert-list)
"(iv) Some text
\(v) Some text\^@\n"
"(iv) Some text
\(v) Some text
\(vi) \^@\n")))
(ert-deftest rst-insert-list-new ()
"Tests `rst-insert-list' when inserting a new list."
(should (ert-equal-buffer
'(rst-insert-list)
"\^@
"
"* \^@
" '("*")))
(should (ert-equal-buffer
'(rst-insert-list)
"
\^@
"
"
- \^@
" '("-")))
(should (ert-equal-buffer
'(rst-insert-list)
"
\^@
"
"
#. \^@
" '("#.")))
(should (ert-equal-buffer
'(rst-insert-list)
"\^@
"
"5) \^@
" '("1)" 5)))
(should (ert-equal-buffer
'(rst-insert-list)
"\^@
"
"(i) \^@
" '("(i)" "")))
(should (ert-equal-buffer
'(rst-insert-list)
"\^@
"
"IV. \^@
" '("I." 4)))
(should (ert-equal-buffer
'(rst-insert-list)
"Some line\^@
"
"Some line
c. \^@
" '("a." "c")))
(should (ert-equal-buffer
'(rst-insert-list)
"Some line
\^@
"
"Some line
B) \^@
" '("A)" "B")))
(should (ert-equal-buffer
'(rst-insert-list)
"Some line
\^@
"
"Some line
IV. \^@
" '("I." 4)))
(should (ert-equal-buffer
'(rst-insert-list)
"Some line
\^@Another line
"
"Some line
Another line
* \^@
" '("*")))
)
(ert-deftest rst-insert-list-new-BUGS ()
"Exposes bugs in `rst-insert-list' when inserting a new list."
:expected-result :failed ;; These are bugs
(should (ert-equal-buffer
'(rst-insert-list)
"\^@ \n"
"* \^@
" '("*")))
(should (ert-equal-buffer
'(rst-insert-list)
"Some line
\^@
Another line
"
"Some line
* \^@
Another line
" '("*")))
)
(ert-deftest rst-straighten-bullets-region ()
"Tests `rst-straighten-bullets-region'."
(let ((rst-preferred-bullets '(?* ?-)))
(should (ert-equal-buffer
'(rst-straighten-bullets-region)
"\^@\^?"
"\^@\^?"
t))
(should (ert-equal-buffer
'(rst-straighten-bullets-region)
"\^@
- one
+ two
* three
\^?"
"\^@
* one
* two
* three
\^?"
t))
(should (ert-equal-buffer
'(rst-straighten-bullets-region)
"- one\^@
+ two\^?"
"* one\^@
* two\^?"
t))
(should (ert-equal-buffer
'(rst-straighten-bullets-region)
"+ zero
\^@- one
+ two
* three\^?
- four"
"+ zero
\^@* one
* two
* three\^?
- four"
t))
(should (ert-equal-buffer
'(rst-straighten-bullets-region)
"\^@
- one
+ two
* three
\^?"
"\^@
* one
- two
* three
\^?"
t))
(should (ert-equal-buffer
'(rst-straighten-bullets-region)
"\^@
- one
- two
* three
\^?"
"\^@
* one
- two
* three
\^?"
t))
(should (ert-equal-buffer
'(rst-straighten-bullets-region)
"\^@
+ one
* two
+ three
\^?"
"\^@
* one
- two
* three
\^?"
t))
)
(let ((rst-preferred-bullets nil))
(should (ert-equal-buffer
'(rst-straighten-bullets-region)
"\^@
- one
+ two
* three
\^?"
"\^@
- one
+ two
* three
\^?"
t))
))
(ert-deftest rst-straighten-bullets-region-BUGS ()
"Tests `rst-straighten-bullets-region'."
:expected-result :failed ;; These are bugs
(let ((rst-preferred-bullets '(?* ?-)))
(should (ert-equal-buffer
'(rst-straighten-bullets-region)
"\^@
- one
+ two
* three
\^?"
"\^@
* one
- two
* three
\^?"
t))
(should (ert-equal-buffer
'(rst-straighten-bullets-region)
"\^@
- one
+ two
* three
\^?"
"\^@
* one
- two
* three
\^?"
t))
(should (ert-equal-buffer
'(rst-straighten-bullets-region)
"\^@
+ one
* two
+ three
\^?"
"\^@
* one
- two
* three
\^?"
t))
))
(defun arabic-roman-roundtrip (arabic roman)
"Convert ARABIC to roman, compare it to ROMAN and convert this back.
Return t if roundtrip is correct."
(let ((cvt-roman (rst-arabic-to-roman arabic))
(cvt-arabic (rst-roman-to-arabic roman)))
(and (equal roman cvt-roman) (equal arabic cvt-arabic))))
(ert-deftest arabic-roman-roundtrip ()
"Test `rst-arabic-to-roman' and `rst-roman-to-arabic'."
;; Test invalid arabic numbers.
(should-error (arabic-roman-roundtrip -1 "I")
:type 'wrong-type-argument)
(should-error (arabic-roman-roundtrip 0 "I")
:type 'wrong-type-argument)
(should-error (arabic-roman-roundtrip nil "I")
:type 'wrong-type-argument)
;; Test invalid roman numbers.
(should-error (arabic-roman-roundtrip 1 nil)
:type 'wrong-type-argument)
(should-error (arabic-roman-roundtrip 1 "NoRoman")
:type 'wrong-type-argument)
(should-error (arabic-roman-roundtrip 1 "")
:type 'wrong-type-argument)
;; Test values.
(should (arabic-roman-roundtrip 1 "I"))
(should (arabic-roman-roundtrip 4 "IV"))
(should (arabic-roman-roundtrip 5 "V"))
(should (arabic-roman-roundtrip 10 "X"))
(should (arabic-roman-roundtrip 20 "XX"))
(should (arabic-roman-roundtrip 1999 "MCMXCIX"))
(should (arabic-roman-roundtrip 2000 "MM"))
(should (arabic-roman-roundtrip 3333 "MMMCCCXXXIII"))
(should (arabic-roman-roundtrip 444 "CDXLIV"))
)