aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/ChangeLog8
-rw-r--r--test/automated/undo-tests.el98
2 files changed, 106 insertions, 0 deletions
diff --git a/test/ChangeLog b/test/ChangeLog
index 392a996662a..75a3d0101c3 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,11 @@
12014-03-26 Barry O'Reilly <gundaetiapo@gmail.com>
2
3 * automated/undo-tests.el (undo-test-marker-adjustment-nominal):
4 (undo-test-region-t-marker): New tests of marker adjustments.
5 (undo-test-marker-adjustment-moved):
6 (undo-test-region-mark-adjustment): New tests to demonstrate
7 bug#16818, which fail without the fix.
8
12014-03-23 Dmitry Gutov <dgutov@yandex.ru> 92014-03-23 Dmitry Gutov <dgutov@yandex.ru>
2 10
3 * automated/package-test.el (package-test-describe-package): 11 * automated/package-test.el (package-test-describe-package):
diff --git a/test/automated/undo-tests.el b/test/automated/undo-tests.el
index 8a963f10028..6ecac36b6b3 100644
--- a/test/automated/undo-tests.el
+++ b/test/automated/undo-tests.el
@@ -268,6 +268,104 @@
268 (should (string= (buffer-string) 268 (should (string= (buffer-string)
269 "This sentence corrupted?aaa")))) 269 "This sentence corrupted?aaa"))))
270 270
271(ert-deftest undo-test-marker-adjustment-nominal ()
272 "Test nominal behavior of marker adjustments."
273 (with-temp-buffer
274 (buffer-enable-undo)
275 (insert "abcdefg")
276 (undo-boundary)
277 (let ((m (make-marker)))
278 (set-marker m 2 (current-buffer))
279 (goto-char (point-min))
280 (delete-forward-char 3)
281 (undo-boundary)
282 (should (= (point-min) (marker-position m)))
283 (undo)
284 (undo-boundary)
285 (should (= 2 (marker-position m))))))
286
287(ert-deftest undo-test-region-t-marker ()
288 "Test undo in region containing marker with t insertion-type."
289 (with-temp-buffer
290 (buffer-enable-undo)
291 (transient-mark-mode 1)
292 (insert "abcdefg")
293 (undo-boundary)
294 (let ((m (make-marker)))
295 (set-marker-insertion-type m t)
296 (set-marker m (point-min) (current-buffer)) ; m at a
297 (goto-char (+ 2 (point-min)))
298 (push-mark (point) t t)
299 (setq mark-active t)
300 (goto-char (point-min))
301 (delete-forward-char 1) ;; delete region covering "ab"
302 (undo-boundary)
303 (should (= (point-min) (marker-position m)))
304 ;; Resurrect "ab". m's insertion type means the reinsertion
305 ;; moves it forward 2, and then the marker adjustment returns it
306 ;; to its rightful place.
307 (undo)
308 (undo-boundary)
309 (should (= (point-min) (marker-position m))))))
310
311(ert-deftest undo-test-marker-adjustment-moved ()
312 "Test marker adjustment behavior when the marker moves.
313Demonstrates bug 16818."
314 (with-temp-buffer
315 (buffer-enable-undo)
316 (insert "abcdefghijk")
317 (undo-boundary)
318 (let ((m (make-marker)))
319 (set-marker m 2 (current-buffer)) ; m at b
320 (goto-char (point-min))
321 (delete-forward-char 3) ; m at d
322 (undo-boundary)
323 (set-marker m 4) ; m at g
324 (undo)
325 (undo-boundary)
326 ;; m still at g, but shifted 3 because deletion undone
327 (should (= 7 (marker-position m))))))
328
329(ert-deftest undo-test-region-mark-adjustment ()
330 "Test that the mark's marker adjustment in undo history doesn't
331obstruct undo in region from finding the correct change group.
332Demonstrates bug 16818."
333 (with-temp-buffer
334 (buffer-enable-undo)
335 (transient-mark-mode 1)
336 (insert "First line\n")
337 (insert "Second line\n")
338 (undo-boundary)
339
340 (goto-char (point-min))
341 (insert "aaa")
342 (undo-boundary)
343
344 (undo)
345 (undo-boundary)
346
347 (goto-char (point-max))
348 (insert "bbb")
349 (undo-boundary)
350
351 (push-mark (point) t t)
352 (setq mark-active t)
353 (goto-char (- (point) 3))
354 (delete-forward-char 1)
355 (undo-boundary)
356
357 (insert "bbb")
358 (undo-boundary)
359
360 (goto-char (point-min))
361 (push-mark (point) t t)
362 (setq mark-active t)
363 (goto-char (+ (point) 3))
364 (undo)
365 (undo-boundary)
366
367 (should (string= (buffer-string) "aaaFirst line\nSecond line\nbbb"))))
368
271(defun undo-test-all (&optional interactive) 369(defun undo-test-all (&optional interactive)
272 "Run all tests for \\[undo]." 370 "Run all tests for \\[undo]."
273 (interactive "p") 371 (interactive "p")