aboutsummaryrefslogtreecommitdiffstats
path: root/test/src
diff options
context:
space:
mode:
authorEli Zaretskii2016-07-19 18:59:41 +0300
committerEli Zaretskii2016-07-19 18:59:41 +0300
commit00b6647651e4276ac5c47aa33e0fec6726469bc7 (patch)
tree8e03635aac3f32b806b85e1a7bf976741d85cc30 /test/src
parent439f3c3e567692b6823923d569a06ac206d1c3be (diff)
downloademacs-00b6647651e4276ac5c47aa33e0fec6726469bc7.tar.gz
emacs-00b6647651e4276ac5c47aa33e0fec6726469bc7.zip
Fix 'transpose-regions' when LEAVE-MARKERS arg is non-nil
* src/insdel.c (adjust_markers_bytepos): New function. * src/lisp.h (adjust_markers_bytepos): Add prototype. * src/insdel.c (replace_range, replace_range_2): * src/editfns.c (Ftranspose_regions): Call adjust_markers_bytepos. (Bug#5131) * test/src/editfns-tests.el (transpose-test-reverse-word) (transpose-test-get-byte-positions): New functions. (transpose-ascii-regions-test) (transpose-nonascii-regions-test-1) (transpose-nonascii-regions-test-2): New tests.
Diffstat (limited to 'test/src')
-rw-r--r--test/src/editfns-tests.el45
1 files changed, 45 insertions, 0 deletions
diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el
index 507ceef2f7d..2f90d1e7495 100644
--- a/test/src/editfns-tests.el
+++ b/test/src/editfns-tests.el
@@ -89,3 +89,48 @@
89 (propertize "23" 'face 'underline) 89 (propertize "23" 'face 'underline)
90 (propertize "45" 'face 'italic))) 90 (propertize "45" 'face 'italic)))
91 #("012345 " 0 2 (face bold) 2 4 (face underline) 4 10 (face italic))))) 91 #("012345 " 0 2 (face bold) 2 4 (face underline) 4 10 (face italic)))))
92
93;; Tests for bug#5131.
94(defun transpose-test-reverse-word (start end)
95 "Reverse characters in a word by transposing pairs of characters."
96 (let ((begm (make-marker))
97 (endm (make-marker)))
98 (set-marker begm start)
99 (set-marker endm end)
100 (while (> endm begm)
101 (progn (transpose-regions begm (1+ begm) endm (1+ endm) t)
102 (set-marker begm (1+ begm))
103 (set-marker endm (1- endm))))))
104
105(defun transpose-test-get-byte-positions (len)
106 "Validate character position to byte position translation."
107 (let ((bytes '()))
108 (dotimes (pos len)
109 (setq bytes (add-to-list 'bytes (position-bytes (1+ pos)) t)))
110 bytes))
111
112(ert-deftest transpose-ascii-regions-test ()
113 (with-temp-buffer
114 (erase-buffer)
115 (insert "abcd")
116 (transpose-test-reverse-word 1 4)
117 (should (string= (buffer-string) "dcba"))
118 (should (equal (transpose-test-get-byte-positions 5) '(1 2 3 4 5)))))
119
120(ert-deftest transpose-nonascii-regions-test-1 ()
121 (with-temp-buffer
122 (erase-buffer)
123 (insert "÷bcd")
124 (transpose-test-reverse-word 1 4)
125 (should (string= (buffer-string) "dcb÷"))
126 (should (equal (transpose-test-get-byte-positions 5) '(1 2 3 4 6)))))
127
128(ert-deftest transpose-nonascii-regions-test-2 ()
129 (with-temp-buffer
130 (erase-buffer)
131 (insert "÷ab\"äé")
132 (transpose-test-reverse-word 1 6)
133 (should (string= (buffer-string) "éä\"ba÷"))
134 (should (equal (transpose-test-get-byte-positions 7) '(1 3 5 6 7 8 10)))))
135
136;;; editfns-tests.el ends here