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.
376 lines
7.1 KiB
376 lines
7.1 KiB
;; Tests for operations on toc -*- lexical-binding: t -*- |
|
|
|
(add-to-list 'load-path ".") |
|
(load "init" nil t) |
|
(init-rst-ert t) |
|
|
|
(ert-deftest toc-asserts () |
|
"Check some assertions." |
|
(should (equal ert-Buf-point-char "\^@")) |
|
(should (equal ert-Buf-mark-char "\^?")) |
|
) |
|
|
|
(setq title "===== |
|
Title |
|
===== |
|
|
|
" |
|
headers "Header A |
|
======== |
|
|
|
Header B |
|
======== |
|
|
|
Subheader B.a |
|
------------- |
|
|
|
SubSubheader B.a.1 |
|
~~~~~~~~~~~~~~~~~~ |
|
|
|
Subheader B.b |
|
------------- |
|
|
|
Header C |
|
========") |
|
|
|
(ert-deftest rst-toc-insert () |
|
"Tests `rst-toc-insert'." |
|
;; Set customizable variables to defaults |
|
(let ((rst-toc-indent 2) |
|
(rst-toc-insert-style 'fixed) |
|
(rst-toc-insert-number-separator " - ") |
|
(rst-toc-insert-max-level nil) |
|
(indent-tabs-mode nil)) |
|
(should (ert-equal-buffer |
|
'(rst-toc-insert) |
|
"" |
|
t)) |
|
;; Can't identify a title so do nothing - that's actually a (MIS-)FEATURE |
|
(should (ert-equal-buffer |
|
'(rst-toc-insert) |
|
(concat "\^@" headers) |
|
t)) |
|
;; Can't identify a title so do nothing - that's actually a (MIS-)FEATURE |
|
(should (ert-equal-buffer |
|
(rst-toc-insert) |
|
(concat "\^@\n" headers) |
|
t)) |
|
;; Won't work on a section title |
|
(should (ert-equal-buffer |
|
'(rst-toc-insert) |
|
(concat title "\^@" headers) |
|
t)) |
|
;; No indentation |
|
(let ((rst-toc-indent 1)) |
|
(should (ert-equal-buffer |
|
'(rst-toc-insert) |
|
(concat title "\^@THIS IS DELETED\n\n" headers) |
|
(concat title "1 - Header A |
|
2 - Header B |
|
2.1 - Subheader B.a |
|
2.1.1 - SubSubheader B.a.1 |
|
2.2 - Subheader B.b |
|
3 - Header C\^@ |
|
|
|
" headers)))) |
|
;; Indentation |
|
(let ((rst-toc-insert-style 'listed) |
|
(rst-preferred-bullets '(?+)) |
|
(rst-toc-indent 1)) |
|
(should (ert-equal-buffer |
|
'(rst-toc-insert) |
|
(concat title " \^@\n\n" headers) |
|
(concat title " + Header A |
|
+ Header B |
|
+ Subheader B.a |
|
+ SubSubheader B.a.1 |
|
+ Subheader B.b |
|
+ Header C\^@ |
|
|
|
" headers)))) |
|
;; Only first level |
|
(let ((rst-toc-insert-style 'plain)) |
|
(should (ert-equal-buffer |
|
'(rst-toc-insert 1) |
|
(concat title " \^@\n\n" headers) |
|
(concat title " Header A |
|
Header B |
|
Header C\^@ |
|
|
|
" headers)))) |
|
;; Prefix and indentation |
|
(let ((rst-toc-insert-style 'aligned) |
|
(headers-add " |
|
|
|
C_1 |
|
--- |
|
|
|
C_2 |
|
--- |
|
|
|
C_3 |
|
--- |
|
|
|
C_4 |
|
--- |
|
|
|
C_5 |
|
--- |
|
|
|
C_6 |
|
--- |
|
|
|
C_7 |
|
--- |
|
|
|
C_8 |
|
--- |
|
|
|
C_9 |
|
--- |
|
|
|
C_10 |
|
---- |
|
")) |
|
(should (ert-equal-buffer |
|
'(rst-toc-insert) |
|
(concat title ".. \^@\n\n" headers headers-add) |
|
(concat title ".. 1 - Header A |
|
2 - Header B |
|
2.1 - Subheader B.a |
|
2.1.1 - SubSubheader B.a.1 |
|
2.2 - Subheader B.b |
|
3 - Header C |
|
3. 1 - C_1 |
|
3. 2 - C_2 |
|
3. 3 - C_3 |
|
3. 4 - C_4 |
|
3. 5 - C_5 |
|
3. 6 - C_6 |
|
3. 7 - C_7 |
|
3. 8 - C_8 |
|
3. 9 - C_9 |
|
3.10 - C_10\^@ |
|
|
|
" headers headers-add)))) |
|
) |
|
) |
|
|
|
(ert-deftest rst-toc-update () |
|
"Tests `rst-toc-update'." |
|
(let ((contents ".. contents:: Inhalt\n") |
|
(fields " :bla: blub\n :local:\n") |
|
(old ".. 1 Header A |
|
2 Header B |
|
3 Header C") |
|
(new ".. |
|
1 Header A |
|
2 Header B |
|
2.1 Subheader B.a |
|
2.1.1 SubSubheader B.a.1 |
|
2.2 Subheader B.b |
|
3 Header C") |
|
(indent-tabs-mode nil)) |
|
;; Set customizable variables to defaults |
|
(let ((rst-toc-indent 2) |
|
(rst-toc-insert-style 'fixed) |
|
(rst-toc-insert-number-separator " ") |
|
(rst-toc-insert-max-level nil)) |
|
(should (ert-equal-buffer |
|
'(rst-toc-update) |
|
(concat title contents fields old "\n\n" headers "\^@") |
|
(concat title contents fields new "\n\n" headers "\^@"))) |
|
(should (ert-equal-buffer |
|
'(rst-toc-update) |
|
(concat title contents old "\n\n" headers "\^@") |
|
(concat title contents new "\n\n" headers "\^@"))) |
|
(should (ert-equal-buffer |
|
'(rst-toc-update) |
|
(concat title contents ".." "\n\n" headers "\^@") |
|
(concat title contents new "\n\n" headers "\^@"))) |
|
(should (ert-equal-buffer |
|
'(rst-toc-update) |
|
(concat title contents ".." "\^@") |
|
(concat title contents ".." "\^@"))) |
|
) |
|
)) |
|
|
|
(defun toc () |
|
"Call `rst-toc' and copy special buffer to target buffer. |
|
Return line number link is pointing to in original buffer or nil for no link." |
|
(rst-toc) |
|
(let ((txt (buffer-substring-no-properties (point-min) (point-max))) |
|
(pt (point)) |
|
(mrk (mark t)) |
|
(lnk (condition-case nil |
|
(progn |
|
(rst-toc-mode-follow-link-kill) |
|
t) |
|
(error nil)))) |
|
(setq lnk (and lnk (line-number-at-pos))) |
|
(delete-region (point-min) (point-max)) |
|
(insert txt) |
|
(set-mark mrk) |
|
(goto-char pt) |
|
lnk)) |
|
|
|
(ert-deftest rst-toc () |
|
"Tests `rst-toc'." |
|
;; Set customizable variables to defaults |
|
(let ((rst-toc-indent 2) |
|
(indent-tabs-mode nil)) |
|
(should (ert-equal-buffer |
|
'(toc) |
|
"No section title at all |
|
\^@" |
|
"\^@" |
|
)) |
|
(should (ert-equal-buffer-return |
|
'(toc) |
|
(concat title headers "\n\^@") |
|
"Title |
|
Header A |
|
Header B |
|
Subheader B.a |
|
SubSubheader B.a.1 |
|
Subheader B.b |
|
\^@ Header C |
|
" |
|
20)) |
|
(should (ert-equal-buffer-return |
|
'(toc) |
|
(concat title "Header A |
|
======== |
|
|
|
Header B |
|
======== |
|
|
|
Subh\^@eader B.a |
|
------------- |
|
|
|
SubSubheader B.a.1 |
|
~~~~~~~~~~~~~~~~~~ |
|
|
|
Subheader B.b |
|
------------- |
|
|
|
Header C |
|
======== |
|
") |
|
"Title |
|
Header A |
|
Header B |
|
\^@ Subheader B.a |
|
SubSubheader B.a.1 |
|
Subheader B.b |
|
Header C |
|
" |
|
11)) |
|
(should (ert-equal-buffer-return |
|
'(toc) |
|
(concat "\^@\n\n" title headers "\n") |
|
"\^@Title |
|
Header A |
|
Header B |
|
Subheader B.a |
|
SubSubheader B.a.1 |
|
Subheader B.b |
|
Header C |
|
" |
|
4)) |
|
(should (ert-equal-buffer-return |
|
'(toc) |
|
(concat title "Header A |
|
======== |
|
|
|
Header B |
|
======== |
|
|
|
Subheader B.a |
|
------------- |
|
|
|
SubSubheader B.a.1 |
|
~~~~~~~~~~~~~~~~~~ |
|
\^@ |
|
Subheader B.b |
|
------------- |
|
|
|
Header C |
|
======== |
|
") |
|
"Title |
|
Header A |
|
Header B |
|
Subheader B.a |
|
\^@ SubSubheader B.a.1 |
|
Subheader B.b |
|
Header C |
|
" |
|
14)) |
|
)) |
|
|
|
(defun toc-follow (level) |
|
(rst-toc-insert level) |
|
(back-to-indentation) |
|
(call-interactively #'rst-toc-follow-link)) |
|
|
|
(ert-deftest rst-toc-follow-link () |
|
"Tests `rst-toc-follow-link'." |
|
(let ((rst-toc-insert-style 'plain)) |
|
(should-error (ert-equal-buffer |
|
'(toc-follow 1) |
|
"" |
|
"") |
|
:type 'error) |
|
(should (ert-equal-buffer |
|
'(toc-follow 1) |
|
(concat title " \^@\n\n" headers) |
|
(concat title " Header A |
|
Header B |
|
Header C |
|
|
|
Header A |
|
======== |
|
|
|
Header B |
|
======== |
|
|
|
Subheader B.a |
|
------------- |
|
|
|
SubSubheader B.a.1 |
|
~~~~~~~~~~~~~~~~~~ |
|
|
|
Subheader B.b |
|
------------- |
|
|
|
\^@Header C |
|
========"))) |
|
)) |
|
|
|
(defun toc-mode-return (kill) |
|
(rst-toc) |
|
(rst-toc-mode-return kill) |
|
(let ((buf (get-buffer rst-toc-buffer-name))) |
|
(when buf |
|
(kill-buffer buf) |
|
t))) |
|
|
|
(ert-deftest rst-toc-mode-return () |
|
"Tests `rst-toc-mode-return'." |
|
(should-error (ert-equal-buffer |
|
'(rst-toc-mode-return) |
|
"" |
|
t) |
|
:type 'error) |
|
(should (ert-equal-buffer-return |
|
'(toc-mode-return nil) |
|
(concat title " \^@\n\n" headers) |
|
t |
|
t)) |
|
(should (ert-equal-buffer-return |
|
'(toc-mode-return t) |
|
(concat title " \^@\n\n" headers) |
|
t |
|
nil)) |
|
)
|
|
|