summaryrefslogtreecommitdiff
path: root/docutils/tools/editors/emacs/tests/shift.el
diff options
context:
space:
mode:
authorsmerten <smerten@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2011-03-20 17:20:36 +0000
committersmerten <smerten@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2011-03-20 17:20:36 +0000
commit6dc6c5a2e1249836c3d6f890041412b0871a7cb5 (patch)
tree1f25867704424351a22c79b42c6aec7546dd3876 /docutils/tools/editors/emacs/tests/shift.el
parentc9699f99550c77ea8df2b44e6855e148b94a9b4b (diff)
downloaddocutils-6dc6c5a2e1249836c3d6f890041412b0871a7cb5.tar.gz
* Package version
There is a package version in `rst-version`. For a release it's only the official version number, for development version in addition it contains the revision and timestamp. The package version is used for customizable variables according to Emacs standards. * Indentation and filling Indentation and filling is completely revised / new. The general idea is to determine tabs which make sense for reStructuredText and use them for indentation and filling. Like in other modes <tab> always indents the current line. If the current indentation is irregular the most likely tab for continuing the last block is used. If the indentation matches a tab already the indentation for the next tab in the list of possible tabs is used. The customization group `rst-indent` contains a couple of customizable variables to match different styles. Auto-fill uses these mechanism, too. Filling also uses these mechanisms. For most types of reStructuredText blocks <M-q> (`fill-paragraph`) does what you expect including filling of regions. These features should improve the experience of editing reStructuredText in Emacs much. Feedback on these features is welcome. * Improved paragraph recognition Most reStructuredText blocks are now recognized as paragraphs. Thus things like <C-down> (`forward-paragraph`) and friends work. This also influences filling. * Comment handling Comment handling is revised / new. <M-#> (`comment-region`) works and comments are treated correctly in filling. At the moment only one style for commenting regions is supported. Feedback on this feature is welcome. * Deprecated commands The following commands had never been bound to keys. It seems unlikely that they are used and for this reason they are deprecated starting with this release: * `rst-replace-lines` * `rst-join-paragraph` * `rst-force-fill-paragraph` * `rst-repeat-last-character` Feedback whether they are really used by someone is welcome. Otherwise they are removed at some point. * New customizable variables A couple of variables defined by `defvar` so far are now customizable: * `rst-adjust-hook` * `rst-new-adornment-down` * `rst-preferred-bullets` * New tests Lots of tests have been added. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk@6993 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
Diffstat (limited to 'docutils/tools/editors/emacs/tests/shift.el')
-rw-r--r--docutils/tools/editors/emacs/tests/shift.el725
1 files changed, 627 insertions, 98 deletions
diff --git a/docutils/tools/editors/emacs/tests/shift.el b/docutils/tools/editors/emacs/tests/shift.el
index c72630bbe..076725698 100644
--- a/docutils/tools/editors/emacs/tests/shift.el
+++ b/docutils/tools/editors/emacs/tests/shift.el
@@ -3,147 +3,676 @@
(add-to-list 'load-path ".")
(load "ert-support" nil t)
+(defun string-insert (s col char)
+ "Insert CHAR at position COL in S. Return S."
+ (let ((l (length s))
+ (c (char-to-string char)))
+ (if (<= l col)
+ (concat s (make-string (- col l) ? ) c)
+ (concat (substring s 0 col) c (substring s (1+ col))))))
+
+(defun line-tabs ()
+ "Wrapper to call `rst-line-tabs' creating a readable result."
+ (let ((tabs (rst-line-tabs))
+ (s "")
+ (cnt 0)
+ c)
+ (delete-region (point-min) (point-max))
+ (dolist (tab tabs)
+ (setq c (+ ?A cnt))
+ (if (cdr tab) (setq c (+ c (- ?a ?A))))
+ (setq s (string-insert s (car tab) c))
+ (setq cnt (1+ cnt)))
+ (insert "\n" s)))
+
+(ert-deftest rst-line-tabs ()
+ "Tests for `rst-line-tabs'."
+ (let ((rst-indent-width 2)
+ (rst-indent-field 2)
+ (rst-indent-literal-normal 3)
+ (rst-indent-literal-minimized 2)
+ (rst-indent-comment 3))
+ (should (equal-buffer
+ '(line-tabs)
+ "\^@"
+ "
+"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+* a\^@"
+ "
+B a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+ * b\^@"
+ "
+ B a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+ XV. c\^@"
+ "
+ B a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+* \^@"
+ "
+A"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+ *\tb\^@"
+ "
+ B a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "Some para\^@"
+ "
+A"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ " A quoted block\^@"
+ "
+ A"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+:Field: Content on same line\^@"
+ "
+C b a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+:Field: \^@"
+ "
+B a"
+ ))
+ (let ((rst-indent-field 0))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+:Field: Content on same line\^@"
+ "
+B a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+:Field: \^@"
+ "
+B a"
+ )))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+.. dir:: Content on same line\^@"
+ "
+C b a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+.. dir:: \^@"
+ "
+B a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+.. |sub| dir:: Content on same line\^@"
+ "
+D c b a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+.. |sub| dir::\^@"
+ "
+C b a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+.. [CIT] citation\^@"
+ "
+C b a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+.. [#FN] Footnote\^@"
+ "
+C b a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+.. [CIT]\^@"
+ "
+B a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+Some text::\^@"
+ "
+B a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+::\^@"
+ "
+B a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+ ::\^@"
+ "
+ B a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+.. First comment\^@"
+ "
+B a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+ XV. c::\^@"
+ "
+ C b a"
+ ))
+ (should (equal-buffer
+ '(line-tabs)
+ "
+ :f: val::\^@"
+ "
+ D c b a"
+ ))
+ ))
+
(defun compute-tabs ()
"Wrapper to call `rst-compute-tabs' creating a readable result."
- (let ((tabs (mapcar 'car (rst-compute-tabs (point)))))
+ (let ((tabs (rst-compute-tabs (point)))
+ (s "")
+ (cnt 0))
(delete-region (point-min) (point-max))
(dolist (tab tabs)
- (insert "\n" (make-string tab ? ) "@"))))
+ (setq s (string-insert s tab (+ ?A cnt)))
+ (setq cnt (1+ cnt)))
+ (insert "\n" s)))
(ert-deftest rst-compute-tabs ()
"Tests for `rst-compute-tabs'."
- (should (equal-buffer
- '(compute-tabs)
- "\^@"
- ""
- ))
- (should (equal-buffer
- '(compute-tabs)
- "
+ (let ((rst-indent-width 2)
+ (rst-indent-field 2)
+ (rst-indent-literal-normal 3)
+ (rst-indent-literal-minimized 2)
+ (rst-indent-comment 3))
+ (should (equal-buffer
+ '(compute-tabs)
+ "\^@"
+ "
+"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
* a
\^@"
- "
-@
- @"
- ))
- (should (equal-buffer
- '(compute-tabs)
- "
+ "
+B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
* a
* b
\^@"
- "
-@
- @
- @"
- ))
- (should (equal-buffer
- '(compute-tabs)
- "
+ "
+C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
* a
* b
XV. c
\^@"
- "
-@
- @
- @
- @"
- ))
- (should (equal-buffer
- '(compute-tabs)
- "
+ "
+D C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
* a
XV. c
\^@"
- "
-@
- @
- @
- @"
- ))
- (should (equal-buffer
- '(compute-tabs)
- "
+ "
+D C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
*
XV. c
\^@"
- "
-@
- @
- @"
- ))
- (should (equal-buffer
- '(compute-tabs)
- "
+ "
+C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
* a
* b
XV. c
* d
\^@"
- "
-@
- @
- @"
- ))
- (should (equal-buffer
- '(compute-tabs)
- "
+ "
+C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
* a
* b
XV. c
* d
* e
\^@"
- "
-@
- @"
- ))
- (should (equal-buffer
- '(compute-tabs)
- "
+ "
+B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
* a
* b
XV. c
\^@"
- "
- @
- @
- @
- @"
- ))
- (should (equal-buffer
- '(compute-tabs)
- "
+ "
+ D C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
* a
*\tb
\^@"
- "
-@
- @
- @"
- ))
- (should (equal-buffer
- '(compute-tabs)
- "* a
-\^@"
- "
-@
- @"
- ))
- (should (equal-buffer
- '(compute-tabs)
- " * a
+ "
+C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "* a
+\^@"
+ "
+B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ " * a
* b
XV. c
\^@"
- "
- @
- @
- @
- @"
- ))
- )
+ "
+ D C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "Some para
+
+ A quoted block
+
+ Quoting again
+\^@"
+ "
+C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+:Field: Content on same line
+\^@"
+ "
+C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+:Field: Content on same line
+ but continued differently
+\^@"
+ "
+D CA B"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+:Field: Content on same line
+ but continued differently
+\^@"
+ "
+D C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+:Field:
+
+ Content on next line
+\^@"
+ "
+C BA"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+:Field: Starts on same line
+
+ Content on next line
+\^@"
+ "
+C A B"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. dir:: Content on same line
+\^@"
+ "
+C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. dir::
+
+ Content on next line
+\^@"
+ "
+B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. dir::
+
+ Content on next line
+\^@"
+ "
+C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. dir:: Same
+
+ Content on next line
+\^@"
+ "
+D C A B"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. |sub| dir:: Content on same line
+\^@"
+ "
+D C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. |sub| dir::
+
+ Content on next line
+\^@"
+ "
+C A B"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. |sub| dir::
+
+ Content on next line
+\^@"
+ "
+D C A B"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. |sub| dir:: Same
+
+ Content on next line
+\^@"
+ "
+E D A C B"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. |sub| dir:: Same
+
+ :par: val
+
+ Content on next line
+\^@"
+ "
+E DC A B"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. |sub| dir::
+
+ :par: val
+
+ Content on next line
+\^@"
+ "
+C A B"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. |sub| dir:: Same
+
+ :f: val
+
+ Content on next line
+\^@"
+ "
+E DAC B"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. |sub| dir:: Same
+
+ :f: val
+
+ Content on next line
+\^@"
+ "
+D A C B"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. |sub| dir:: Same
+
+ :f: val
+
+ * Item
+\^@"
+ "
+C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. |sub| dir:: Same
+
+ :f: val
+
+ * Item
+
+ 1. Enumerated
+\^@"
+ "
+D C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. [CIT] citation
+\^@"
+ "
+C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. [#FN] Footnote
+\^@"
+ "
+C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. [CIT]
+
+ citation
+\^@"
+ "
+B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. [CIT]
+
+ citation
+\^@"
+ "
+C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. [CIT]
+
+ citation
+
+ .. |sub| dir:: Same
+
+ :f: val
+
+ * Item
+
+ 1. Enumerated
+\^@"
+ "
+E D C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+Some text::
+\^@"
+ "
+B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+No text
+
+::
+\^@"
+ "
+B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+No text
+
+ ::
+\^@"
+ "
+C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. [CIT]
+
+ citation
+
+ .. |sub| dir:: Same
+
+ :f: val
+
+ No text
+
+ ::
+\^@"
+ "
+E D C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. First comment
+\^@"
+ "
+B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+* a
+ XV. c::
+\^@"
+ "
+E D C B A"
+ ))
+ (should (equal-buffer
+ '(compute-tabs)
+ "
+.. [CIT]
+
+ citation
+
+ .. |sub| dir:: Same
+
+ :f: val::
+\^@"
+ "
+F E D C B A"
+ ))
+ ))
(ert-deftest rst-shift-region-right ()
"Tests for `rst-shift-region' to the right."