diff options
| author | Eli Zaretskii | 2016-07-19 18:59:41 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2016-07-19 18:59:41 +0300 |
| commit | 00b6647651e4276ac5c47aa33e0fec6726469bc7 (patch) | |
| tree | 8e03635aac3f32b806b85e1a7bf976741d85cc30 /test/src | |
| parent | 439f3c3e567692b6823923d569a06ac206d1c3be (diff) | |
| download | emacs-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.el | 45 |
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 | ||