diff options
| author | Andreas Politz | 2019-12-05 23:10:32 -0500 |
|---|---|---|
| committer | Stefan Monnier | 2019-12-05 23:10:32 -0500 |
| commit | bcf4201d4c85afcc729104e492a14db00c3c5903 (patch) | |
| tree | f1670796ecad7749b029187b612b9fb3c397f080 /test/src/buffer-tests.el | |
| parent | 4c933077157ba409d645f4649c8a3a8e534d53d5 (diff) | |
| download | emacs-bcf4201d4c85afcc729104e492a14db00c3c5903.tar.gz emacs-bcf4201d4c85afcc729104e492a14db00c3c5903.zip | |
* test/src/buffer-tests.el: Add loads of overlay tests
Taken from the `feature/noverlay` branch.
Suggested by Vladimir Kazanov <vekazanov@gmail.com>.
Diffstat (limited to 'test/src/buffer-tests.el')
| -rw-r--r-- | test/src/buffer-tests.el | 1219 |
1 files changed, 1219 insertions, 0 deletions
diff --git a/test/src/buffer-tests.el b/test/src/buffer-tests.el index 845d41f9d60..4ab99c131d0 100644 --- a/test/src/buffer-tests.el +++ b/test/src/buffer-tests.el | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | ;;; Code: | 20 | ;;; Code: |
| 21 | 21 | ||
| 22 | (require 'ert) | 22 | (require 'ert) |
| 23 | (eval-when-compile (require 'cl-lib)) | ||
| 23 | 24 | ||
| 24 | (ert-deftest overlay-modification-hooks-message-other-buf () | 25 | (ert-deftest overlay-modification-hooks-message-other-buf () |
| 25 | "Test for bug#21824. | 26 | "Test for bug#21824. |
| @@ -94,4 +95,1222 @@ with parameters from the *Messages* buffer modification." | |||
| 94 | (insert "toto") | 95 | (insert "toto") |
| 95 | (move-overlay ol (point-min) (point-min))))) | 96 | (move-overlay ol (point-min) (point-min))))) |
| 96 | 97 | ||
| 98 | |||
| 99 | ;; +==========================================================================+ | ||
| 100 | ;; | Overlay test setup | ||
| 101 | ;; +==========================================================================+ | ||
| 102 | |||
| 103 | (eval-when-compile | ||
| 104 | (defun buffer-tests--make-test-name (fn x y) | ||
| 105 | (intern (format "buffer-tests--%s-%s-%s" fn x y)))) | ||
| 106 | |||
| 107 | (defun buffer-tests--unmake-test-name (symbol) | ||
| 108 | (let ((name (if (stringp symbol) symbol (symbol-name symbol)))) | ||
| 109 | (when (string-match "\\`buffer-tests--\\(.*\\)-\\(.*\\)-\\(.*\\)\\'" name) | ||
| 110 | (list (match-string 1 name) | ||
| 111 | (match-string 2 name) | ||
| 112 | (match-string 3 name))))) | ||
| 113 | |||
| 114 | (defmacro deftest-make-overlay-1 (id args) | ||
| 115 | (declare (indent 1)) | ||
| 116 | `(ert-deftest ,(buffer-tests--make-test-name 'make-overlay 1 id) () | ||
| 117 | (with-temp-buffer | ||
| 118 | (should ,(cons 'make-overlay args))))) | ||
| 119 | |||
| 120 | (defmacro deftest-make-overlay-2 (id args condition) | ||
| 121 | (declare (indent 1)) | ||
| 122 | `(ert-deftest ,(buffer-tests--make-test-name 'make-overlay 2 id) () | ||
| 123 | (with-temp-buffer | ||
| 124 | (should-error | ||
| 125 | ,(cons 'make-overlay args) | ||
| 126 | :type ',condition | ||
| 127 | :exclude-subtypes t)))) | ||
| 128 | |||
| 129 | (defmacro deftest-overlay-start/end-1 (id start-end-args start-end-should) | ||
| 130 | (declare (indent 1)) | ||
| 131 | (cl-destructuring-bind (start end sstart send) | ||
| 132 | (append start-end-args start-end-should) | ||
| 133 | `(ert-deftest ,(buffer-tests--make-test-name 'overlay-start/end 1 id) () | ||
| 134 | (with-temp-buffer | ||
| 135 | (insert (make-string 9 ?\n)) | ||
| 136 | (let ((ov (make-overlay ,start ,end))) | ||
| 137 | (should (equal ,sstart (overlay-start ov))) | ||
| 138 | (should (equal ,send (overlay-end ov)))))))) | ||
| 139 | |||
| 140 | (defmacro deftest-overlay-buffer-1 (id arg-expr should-expr) | ||
| 141 | (declare (indent 1)) | ||
| 142 | `(ert-deftest ,(buffer-tests--make-test-name 'overlay-buffer 1 id) () | ||
| 143 | (with-temp-buffer | ||
| 144 | (should (equal (overlay-buffer (make-overlay 1 1 ,arg-expr)) | ||
| 145 | ,should-expr))))) | ||
| 146 | |||
| 147 | (defmacro deftest-overlayp-1 (id arg-expr should-expr) | ||
| 148 | (declare (indent 1)) | ||
| 149 | `(ert-deftest ,(buffer-tests--make-test-name 'overlay-buffer 1 id) () | ||
| 150 | (with-temp-buffer | ||
| 151 | (should (equal ,should-expr (overlayp ,arg-expr)))))) | ||
| 152 | |||
| 153 | (defmacro deftest-next-overlay-change-1 (id pos result &rest ov-tuple) | ||
| 154 | `(ert-deftest ,(buffer-tests--make-test-name 'next-overlay-change 1 id) () | ||
| 155 | (let ((tuple (copy-sequence ',ov-tuple))) | ||
| 156 | (with-temp-buffer | ||
| 157 | (insert (make-string (max 100 (if tuple | ||
| 158 | (apply #'max | ||
| 159 | (mapcar | ||
| 160 | (lambda (m) (apply #'max m)) | ||
| 161 | tuple)) | ||
| 162 | 0)) | ||
| 163 | ?\n)) | ||
| 164 | (dolist (tup tuple) | ||
| 165 | (make-overlay (car tup) (cadr tup))) | ||
| 166 | (should (equal (next-overlay-change ,pos) | ||
| 167 | ,result)))))) | ||
| 168 | |||
| 169 | (defmacro deftest-previous-overlay-change-1 (id pos result &rest ov-tuple) | ||
| 170 | `(ert-deftest ,(buffer-tests--make-test-name 'previous-overlay-change 1 id) () | ||
| 171 | (let ((tuple ',ov-tuple)) | ||
| 172 | (with-temp-buffer | ||
| 173 | (insert (make-string (max 100 (if tuple | ||
| 174 | (apply #'max | ||
| 175 | (mapcar | ||
| 176 | (lambda (m) (apply #'max m)) | ||
| 177 | tuple)) | ||
| 178 | 0)) | ||
| 179 | ?\n)) | ||
| 180 | (dolist (tup tuple) | ||
| 181 | (make-overlay (car tup) (cadr tup))) | ||
| 182 | (should (equal (previous-overlay-change ,pos) | ||
| 183 | ,result)))))) | ||
| 184 | |||
| 185 | (defmacro deftest-overlays-at-1 (id pos result &rest ov-triple) | ||
| 186 | `(ert-deftest ,(buffer-tests--make-test-name 'overlays-at 1 id) () | ||
| 187 | (let ((pos* ,pos)) | ||
| 188 | (with-temp-buffer | ||
| 189 | (insert (make-string 100 ?\s)) | ||
| 190 | (should-not (memq nil ',result)) | ||
| 191 | (dolist (v ',ov-triple) | ||
| 192 | (cl-destructuring-bind (tag start end) | ||
| 193 | v | ||
| 194 | (overlay-put (make-overlay start end) 'tag tag))) | ||
| 195 | (let ((ovl (overlays-at pos*))) | ||
| 196 | (should (equal (length ovl) (length ',result))) | ||
| 197 | (dolist (ov ovl) | ||
| 198 | (should (memq (overlay-get ov 'tag) ',result)))))))) | ||
| 199 | |||
| 200 | (defmacro deftest-overlays-in-1 (id beg end result &rest ov-triple) | ||
| 201 | `(ert-deftest ,(buffer-tests--make-test-name 'overlays-in 1 id) () | ||
| 202 | (let ((beg* ,beg) | ||
| 203 | (end* ,end)) | ||
| 204 | (with-temp-buffer | ||
| 205 | (insert (make-string 100 ?\s)) | ||
| 206 | (should-not (memq nil ',result)) | ||
| 207 | (dolist (v ',ov-triple) | ||
| 208 | (cl-destructuring-bind (tag start end) | ||
| 209 | v | ||
| 210 | (overlay-put (make-overlay start end) 'tag tag))) | ||
| 211 | (let ((ovl (overlays-in beg* end*))) | ||
| 212 | (should (equal (length ovl) (length ',result))) | ||
| 213 | (dolist (ov ovl) | ||
| 214 | (should (memq (overlay-get ov 'tag) ',result)))))))) | ||
| 215 | |||
| 216 | (defmacro test-with-overlay-in-buffer (symbol-beg-end-fa-ra &rest body) | ||
| 217 | (declare (indent 1)) | ||
| 218 | (cl-destructuring-bind (symbol beg end &optional fa ra) | ||
| 219 | symbol-beg-end-fa-ra | ||
| 220 | `(with-temp-buffer | ||
| 221 | (insert (make-string (max 1000 (1- ,end)) ?\s)) | ||
| 222 | (goto-char 1) | ||
| 223 | (let ((,symbol (make-overlay ,beg ,end nil ,fa ,ra))) | ||
| 224 | ,@body)))) | ||
| 225 | |||
| 226 | (defmacro deftest-overlays-equal-1 (id result ov1-args ov2-args) | ||
| 227 | `(ert-deftest ,(buffer-tests--make-test-name 'overlays-equal 1 id) () | ||
| 228 | (cl-flet ((create-overlay (args) | ||
| 229 | (cl-destructuring-bind (start end &optional fa ra | ||
| 230 | &rest properties) | ||
| 231 | args | ||
| 232 | (let ((ov (make-overlay start end nil fa ra))) | ||
| 233 | (while properties | ||
| 234 | (overlay-put ov (pop properties) (pop properties))) | ||
| 235 | ov)))) | ||
| 236 | (with-temp-buffer | ||
| 237 | (insert (make-string 1024 ?\s)) | ||
| 238 | (should (,(if result 'identity 'not) | ||
| 239 | (equal (create-overlay ',ov1-args) | ||
| 240 | (create-overlay ',ov2-args)))))))) | ||
| 241 | |||
| 242 | |||
| 243 | (defun buffer-tests--find-ert-test (name) | ||
| 244 | (let ((test (buffer-tests--unmake-test-name name))) | ||
| 245 | (or (and test | ||
| 246 | (cl-destructuring-bind (fn x y) | ||
| 247 | test | ||
| 248 | (let ((regexp (format "deftest-%s-%s +%s" fn x y))) | ||
| 249 | (re-search-forward regexp nil t)))) | ||
| 250 | (let ((find-function-regexp-alist | ||
| 251 | (cl-remove #'buffer-tests--find-ert-test | ||
| 252 | find-function-regexp-alist :key #'cdr))) | ||
| 253 | (find-function-do-it name 'ert-deftest | ||
| 254 | #'switch-to-buffer-other-window))))) | ||
| 255 | |||
| 256 | (add-to-list 'find-function-regexp-alist | ||
| 257 | `(ert-deftest . ,#'buffer-tests--find-ert-test)) | ||
| 258 | |||
| 259 | |||
| 260 | ;; +==========================================================================+ | ||
| 261 | ;; | make-overlay | ||
| 262 | ;; +==========================================================================+ | ||
| 263 | |||
| 264 | ;; Test if making an overlay succeeds. | ||
| 265 | (deftest-make-overlay-1 A (1 1)) | ||
| 266 | (deftest-make-overlay-1 B (7 26)) | ||
| 267 | (deftest-make-overlay-1 C (29 7)) | ||
| 268 | (deftest-make-overlay-1 D (most-positive-fixnum 1)) | ||
| 269 | (deftest-make-overlay-1 E (most-negative-fixnum 1)) | ||
| 270 | (deftest-make-overlay-1 F (1 most-positive-fixnum)) | ||
| 271 | (deftest-make-overlay-1 G (1 most-negative-fixnum)) | ||
| 272 | (deftest-make-overlay-1 H (1 1 nil t)) | ||
| 273 | (deftest-make-overlay-1 I (1 1 nil nil)) | ||
| 274 | (deftest-make-overlay-1 J (1 1 nil nil nil)) | ||
| 275 | (deftest-make-overlay-1 K (1 1 nil nil t)) | ||
| 276 | (deftest-make-overlay-1 L (1 1 nil t t)) | ||
| 277 | (deftest-make-overlay-1 M (1 1 nil "yes" "yes")) | ||
| 278 | |||
| 279 | ;; Test if trying to make an overlay signals conditions. | ||
| 280 | (deftest-make-overlay-2 A () wrong-number-of-arguments) | ||
| 281 | (deftest-make-overlay-2 B (1) wrong-number-of-arguments) | ||
| 282 | (deftest-make-overlay-2 C (1 2 3 4 5 6) wrong-number-of-arguments) | ||
| 283 | (deftest-make-overlay-2 D ("1") wrong-number-of-arguments) | ||
| 284 | (deftest-make-overlay-2 E ("1" "2") wrong-type-argument) | ||
| 285 | (deftest-make-overlay-2 F (1 2 "b") wrong-type-argument) | ||
| 286 | (deftest-make-overlay-2 G (1 2 3.14) wrong-type-argument) | ||
| 287 | (deftest-make-overlay-2 H (3.14 3) wrong-type-argument) | ||
| 288 | (deftest-make-overlay-2 I (1 [1]) wrong-type-argument) | ||
| 289 | (deftest-make-overlay-2 J (1 1 (with-temp-buffer | ||
| 290 | (current-buffer))) | ||
| 291 | error) | ||
| 292 | |||
| 293 | |||
| 294 | ;; +==========================================================================+ | ||
| 295 | ;; | overlay-start/end | ||
| 296 | ;; +==========================================================================+ | ||
| 297 | |||
| 298 | ;; Test if the overlays return proper positions. point-max of the | ||
| 299 | ;; buffer will equal 10. ARG RESULT | ||
| 300 | (deftest-overlay-start/end-1 A (1 1) (1 1)) | ||
| 301 | (deftest-overlay-start/end-1 B (2 7) (2 7)) | ||
| 302 | (deftest-overlay-start/end-1 C (7 2) (2 7)) | ||
| 303 | (deftest-overlay-start/end-1 D (1 10) (1 10)) | ||
| 304 | (deftest-overlay-start/end-1 E (1 11) (1 10)) | ||
| 305 | (deftest-overlay-start/end-1 F (1 most-positive-fixnum) (1 10)) | ||
| 306 | (deftest-overlay-start/end-1 G (most-positive-fixnum 1) (1 10)) | ||
| 307 | (deftest-overlay-start/end-1 H (most-positive-fixnum most-positive-fixnum) | ||
| 308 | (10 10)) | ||
| 309 | (deftest-overlay-start/end-1 I (100 11) (10 10)) | ||
| 310 | (deftest-overlay-start/end-1 J (11 100) (10 10)) | ||
| 311 | (deftest-overlay-start/end-1 K (0 1) (1 1)) | ||
| 312 | (deftest-overlay-start/end-1 L (1 0) (1 1)) | ||
| 313 | (deftest-overlay-start/end-1 M (0 0) (1 1)) | ||
| 314 | |||
| 315 | (ert-deftest test-overlay-start/end-2 () | ||
| 316 | (should-not (overlay-start (with-temp-buffer (make-overlay 1 1)))) | ||
| 317 | (should-not (overlay-end (with-temp-buffer (make-overlay 1 1))))) | ||
| 318 | |||
| 319 | |||
| 320 | ;; +==========================================================================+ | ||
| 321 | ;; | overlay-buffer | ||
| 322 | ;; +==========================================================================+ | ||
| 323 | |||
| 324 | ;; Test if overlay-buffer returns appropriate values. | ||
| 325 | (deftest-overlay-buffer-1 A (current-buffer) (current-buffer)) | ||
| 326 | (deftest-overlay-buffer-1 B nil (current-buffer)) | ||
| 327 | (ert-deftest test-overlay-buffer-1-C () | ||
| 328 | (should-error (make-overlay | ||
| 329 | 1 1 (with-temp-buffer (current-buffer))))) | ||
| 330 | |||
| 331 | |||
| 332 | ;; +==========================================================================+ | ||
| 333 | ;; | overlayp | ||
| 334 | ;; +==========================================================================+ | ||
| 335 | |||
| 336 | ;; Check the overlay predicate. | ||
| 337 | (deftest-overlayp-1 A (make-overlay 1 1) t) | ||
| 338 | (deftest-overlayp-1 B (with-temp-buffer (make-overlay 1 1)) t) | ||
| 339 | (deftest-overlayp-1 C nil nil) | ||
| 340 | (deftest-overlayp-1 D 'symbol nil) | ||
| 341 | (deftest-overlayp-1 E "string" nil) | ||
| 342 | (deftest-overlayp-1 F 42 nil) | ||
| 343 | (deftest-overlayp-1 G [1 2] nil) | ||
| 344 | (deftest-overlayp-1 H (symbol-function 'car) nil) | ||
| 345 | (deftest-overlayp-1 I float-pi nil) | ||
| 346 | (deftest-overlayp-1 J (cons 1 2) nil) | ||
| 347 | (deftest-overlayp-1 K (make-hash-table) nil) | ||
| 348 | (deftest-overlayp-1 L (symbol-function 'ert-deftest) nil) | ||
| 349 | (deftest-overlayp-1 M (current-buffer) nil) | ||
| 350 | (deftest-overlayp-1 N (selected-window) nil) | ||
| 351 | (deftest-overlayp-1 O (selected-frame) nil) | ||
| 352 | |||
| 353 | |||
| 354 | ;; +==========================================================================+ | ||
| 355 | ;; | overlay equality | ||
| 356 | ;; +==========================================================================+ | ||
| 357 | |||
| 358 | (deftest-overlays-equal-1 A t (1 1) (1 1)) | ||
| 359 | (deftest-overlays-equal-1 B t (5 10) (5 10)) | ||
| 360 | (deftest-overlays-equal-1 C nil (5 11) (5 10)) | ||
| 361 | (deftest-overlays-equal-1 D t (10 20 t) (10 20)) | ||
| 362 | (deftest-overlays-equal-1 E t (10 20 nil t) (10 20)) | ||
| 363 | (deftest-overlays-equal-1 F t (10 20 t t) (10 20 nil t)) | ||
| 364 | (deftest-overlays-equal-1 G t (10 20 t t) (10 20 t nil)) | ||
| 365 | (deftest-overlays-equal-1 H t (10 20 nil nil foo 42) (10 20 nil nil foo 42)) | ||
| 366 | (deftest-overlays-equal-1 I nil (10 20 nil nil foo 42) (10 20 nil nil foo 43)) | ||
| 367 | |||
| 368 | |||
| 369 | ;; +==========================================================================+ | ||
| 370 | ;; | overlay-lists | ||
| 371 | ;; +==========================================================================+ | ||
| 372 | |||
| 373 | ;; Check whether overlay-lists returns something sensible. | ||
| 374 | (ert-deftest test-overlay-lists-1 () | ||
| 375 | (with-temp-buffer | ||
| 376 | (should (equal (cons nil nil) (overlay-lists))) | ||
| 377 | (dotimes (i 10) (make-overlay 1 i)) | ||
| 378 | (should (listp (car (overlay-lists)))) | ||
| 379 | (should (listp (cdr (overlay-lists)))) | ||
| 380 | (let ((list (append (car (overlay-lists)) | ||
| 381 | (cdr (overlay-lists))))) | ||
| 382 | (should (= 10 (length list))) | ||
| 383 | (should (seq-every-p #'overlayp list))))) | ||
| 384 | |||
| 385 | |||
| 386 | ;; +==========================================================================+ | ||
| 387 | ;; | overlay-put/get/properties | ||
| 388 | ;; +==========================================================================+ | ||
| 389 | |||
| 390 | ;; Test if overlay-put properties can be retrieved by overlay-get and | ||
| 391 | ;; overlay-properties. | ||
| 392 | (ert-deftest test-overlay-props-1 () | ||
| 393 | (with-temp-buffer | ||
| 394 | (let* ((keys '(:k1 :k2 :k3)) | ||
| 395 | (values '(1 "v2" v3)) | ||
| 396 | (ov (make-overlay 1 1)) | ||
| 397 | (n (length keys))) | ||
| 398 | (should (equal (length keys) (length values))) | ||
| 399 | (should (null (overlay-properties ov))) | ||
| 400 | ;; Insert keys and values. | ||
| 401 | (dotimes (i n) | ||
| 402 | (should (equal (overlay-put ov (nth i keys) (nth i values)) | ||
| 403 | (nth i values)))) | ||
| 404 | ;; Compare with what overlay-get says. | ||
| 405 | (dotimes (i n) | ||
| 406 | (should (equal (overlay-get ov (nth i keys)) | ||
| 407 | (nth i values)))) | ||
| 408 | ;; Test if overlay-properties is a superset. | ||
| 409 | (dotimes (i n) | ||
| 410 | (should (equal (plist-get (overlay-properties ov) | ||
| 411 | (nth i keys)) | ||
| 412 | (nth i values)))) | ||
| 413 | ;; Check if overlay-properties is a subset. | ||
| 414 | (should (= (length (overlay-properties ov)) (* n 2)))))) | ||
| 415 | |||
| 416 | |||
| 417 | ;; +==========================================================================+ | ||
| 418 | ;; | next-overlay-change | ||
| 419 | ;; +==========================================================================+ | ||
| 420 | |||
| 421 | ;; Test if next-overlay-change returns RESULT if called with POS in a | ||
| 422 | ;; buffer with overlays corresponding to OVS and point-max >= 100. | ||
| 423 | ;; (POS RESULT &rest OVS) | ||
| 424 | ;; 0 overlays | ||
| 425 | (deftest-next-overlay-change-1 A (point-min) (point-max)) | ||
| 426 | (deftest-next-overlay-change-1 B (point-max) (point-max)) | ||
| 427 | ;; 1 non-empty overlay | ||
| 428 | (deftest-next-overlay-change-1 C 1 10 (10 20)) | ||
| 429 | (deftest-next-overlay-change-1 D 10 20 (10 20)) | ||
| 430 | (deftest-next-overlay-change-1 E 15 20 (10 20)) | ||
| 431 | (deftest-next-overlay-change-1 F 20 (point-max) (10 20)) | ||
| 432 | (deftest-next-overlay-change-1 G 30 (point-max) (10 20)) | ||
| 433 | ;; 1 empty overlay | ||
| 434 | (deftest-next-overlay-change-1 H 1 10 (10 10)) | ||
| 435 | (deftest-next-overlay-change-1 I 10 (point-max) (10 10)) | ||
| 436 | (deftest-next-overlay-change-1 J 20 (point-max) (10 10)) | ||
| 437 | ;; 2 non-empty, non-intersecting | ||
| 438 | (deftest-next-overlay-change-1 D 10 20 (20 30) (40 50)) | ||
| 439 | (deftest-next-overlay-change-1 E 35 40 (20 30) (40 50)) | ||
| 440 | (deftest-next-overlay-change-1 F 60 (point-max) (20 30) (40 50)) | ||
| 441 | (deftest-next-overlay-change-1 G 30 40 (20 30) (40 50)) | ||
| 442 | (deftest-next-overlay-change-1 H 50 (point-max) (20 30) (40 50)) | ||
| 443 | ;; 2 non-empty, intersecting | ||
| 444 | (deftest-next-overlay-change-1 I 10 20 (20 30) (25 35)) | ||
| 445 | (deftest-next-overlay-change-1 J 20 25 (20 30) (25 35)) | ||
| 446 | (deftest-next-overlay-change-1 K 23 25 (20 30) (25 35)) | ||
| 447 | (deftest-next-overlay-change-1 L 25 30 (20 30) (25 35)) | ||
| 448 | (deftest-next-overlay-change-1 M 28 30 (20 30) (25 35)) | ||
| 449 | (deftest-next-overlay-change-1 N 30 35 (20 30) (25 35)) | ||
| 450 | (deftest-next-overlay-change-1 O 35 (point-max) (20 30) (25 35)) | ||
| 451 | (deftest-next-overlay-change-1 P 50 (point-max) (20 30) (25 35)) | ||
| 452 | ;; 2 non-empty, continuous | ||
| 453 | (deftest-next-overlay-change-1 Q 10 20 (20 30) (30 40)) | ||
| 454 | (deftest-next-overlay-change-1 R 20 30 (20 30) (30 40)) | ||
| 455 | (deftest-next-overlay-change-1 S 25 30 (20 30) (30 40)) | ||
| 456 | (deftest-next-overlay-change-1 T 30 40 (20 30) (30 40)) | ||
| 457 | (deftest-next-overlay-change-1 U 35 40 (20 30) (30 40)) | ||
| 458 | (deftest-next-overlay-change-1 V 40 (point-max) (20 30) (30 40)) | ||
| 459 | (deftest-next-overlay-change-1 W 50 (point-max) (20 30) (30 40)) | ||
| 460 | ;; 1 empty, 1 non-empty, non-in | ||
| 461 | (deftest-next-overlay-change-1 a 10 20 (20 20) (30 40)) | ||
| 462 | (deftest-next-overlay-change-1 b 20 30 (20 30) (30 40)) | ||
| 463 | (deftest-next-overlay-change-1 c 25 30 (20 30) (30 40)) | ||
| 464 | (deftest-next-overlay-change-1 d 30 40 (20 30) (30 40)) | ||
| 465 | (deftest-next-overlay-change-1 e 35 40 (20 30) (30 40)) | ||
| 466 | (deftest-next-overlay-change-1 f 40 (point-max) (20 30) (30 40)) | ||
| 467 | (deftest-next-overlay-change-1 g 50 (point-max) (20 30) (30 40)) | ||
| 468 | ;; 1 empty, 1 non-empty, intersecting at begin | ||
| 469 | (deftest-next-overlay-change-1 h 10 20 (20 20) (20 30)) | ||
| 470 | (deftest-next-overlay-change-1 i 20 30 (20 20) (20 30)) | ||
| 471 | (deftest-next-overlay-change-1 j 25 30 (20 20) (20 30)) | ||
| 472 | (deftest-next-overlay-change-1 k 30 (point-max) (20 20) (20 30)) | ||
| 473 | (deftest-next-overlay-change-1 l 40 (point-max) (20 20) (20 30)) | ||
| 474 | ;; 1 empty, 1 non-empty, intersecting at end | ||
| 475 | (deftest-next-overlay-change-1 h 10 20 (30 30) (20 30)) | ||
| 476 | (deftest-next-overlay-change-1 i 20 30 (30 30) (20 30)) | ||
| 477 | (deftest-next-overlay-change-1 j 25 30 (30 30) (20 30)) | ||
| 478 | (deftest-next-overlay-change-1 k 30 (point-max) (20 20) (20 30)) | ||
| 479 | (deftest-next-overlay-change-1 l 40 (point-max) (20 20) (20 30)) | ||
| 480 | ;; 1 empty, 1 non-empty, intersecting in the middle | ||
| 481 | (deftest-next-overlay-change-1 m 10 20 (25 25) (20 30)) | ||
| 482 | (deftest-next-overlay-change-1 n 20 25 (25 25) (20 30)) | ||
| 483 | (deftest-next-overlay-change-1 o 25 30 (25 25) (20 30)) | ||
| 484 | (deftest-next-overlay-change-1 p 30 (point-max) (25 25) (20 30)) | ||
| 485 | (deftest-next-overlay-change-1 q 40 (point-max) (25 25) (20 30)) | ||
| 486 | ;; 2 empty, intersecting | ||
| 487 | (deftest-next-overlay-change-1 r 10 20 (20 20) (20 20)) | ||
| 488 | (deftest-next-overlay-change-1 s 20 (point-max) (20 20) (20 20)) | ||
| 489 | (deftest-next-overlay-change-1 t 30 (point-max) (20 20) (20 20)) | ||
| 490 | ;; 2 empty, non-intersecting | ||
| 491 | (deftest-next-overlay-change-1 u 10 20 (20 20) (30 30)) | ||
| 492 | (deftest-next-overlay-change-1 v 20 30 (20 20) (30 30)) | ||
| 493 | (deftest-next-overlay-change-1 w 25 30 (20 20) (30 30)) | ||
| 494 | (deftest-next-overlay-change-1 x 30 (point-max) (20 20) (30 30)) | ||
| 495 | (deftest-next-overlay-change-1 y 50 (point-max) (20 20) (30 30)) | ||
| 496 | ;; 10 random | ||
| 497 | (deftest-next-overlay-change-1 aa 1 5 | ||
| 498 | (58 66) (41 10) (9 67) (28 88) (27 43) | ||
| 499 | (24 27) (48 36) (5 90) (61 9)) | ||
| 500 | (deftest-next-overlay-change-1 ab (point-max) (point-max) | ||
| 501 | (58 66) (41 10) (9 67) (28 88) (27 43) | ||
| 502 | (24 27) (48 36) (5 90) (61 9)) | ||
| 503 | (deftest-next-overlay-change-1 ac 67 88 | ||
| 504 | (58 66) (41 10) (9 67) (28 88) (27 43) | ||
| 505 | (24 27) (48 36) (5 90) (61 9)) | ||
| 506 | |||
| 507 | |||
| 508 | ;; +==========================================================================+ | ||
| 509 | ;; | previous-overlay-change. | ||
| 510 | ;; +==========================================================================+ | ||
| 511 | |||
| 512 | ;; Same for previous-overlay-change. | ||
| 513 | ;; 1 non-empty overlay | ||
| 514 | (deftest-previous-overlay-change-1 A (point-max) 1) | ||
| 515 | (deftest-previous-overlay-change-1 B 1 1) | ||
| 516 | (deftest-previous-overlay-change-1 C 1 1 (10 20)) | ||
| 517 | (deftest-previous-overlay-change-1 D 10 1 (10 20)) | ||
| 518 | (deftest-previous-overlay-change-1 E 15 10 (10 20)) | ||
| 519 | (deftest-previous-overlay-change-1 F 20 10 (10 20)) | ||
| 520 | (deftest-previous-overlay-change-1 G 30 20 (10 20)) | ||
| 521 | ;; 1 empty overlay | ||
| 522 | (deftest-previous-overlay-change-1 H 1 1 (10 10)) | ||
| 523 | (deftest-previous-overlay-change-1 I 10 1 (10 10)) | ||
| 524 | (deftest-previous-overlay-change-1 J 20 10 (10 10)) | ||
| 525 | ;; 2 non-empty, non-intersecting | ||
| 526 | (deftest-previous-overlay-change-1 D 10 1 (20 30) (40 50)) | ||
| 527 | (deftest-previous-overlay-change-1 E 35 30 (20 30) (40 50)) | ||
| 528 | (deftest-previous-overlay-change-1 F 60 50 (20 30) (40 50)) | ||
| 529 | (deftest-previous-overlay-change-1 G 30 20 (20 30) (40 50)) | ||
| 530 | (deftest-previous-overlay-change-1 H 50 40 (20 30) (40 50)) | ||
| 531 | ;; 2 non-empty, intersecting | ||
| 532 | (deftest-previous-overlay-change-1 I 10 1 (20 30) (25 35)) | ||
| 533 | (deftest-previous-overlay-change-1 J 20 1 (20 30) (25 35)) | ||
| 534 | (deftest-previous-overlay-change-1 K 23 20 (20 30) (25 35)) | ||
| 535 | (deftest-previous-overlay-change-1 L 25 20 (20 30) (25 35)) | ||
| 536 | (deftest-previous-overlay-change-1 M 28 25 (20 30) (25 35)) | ||
| 537 | (deftest-previous-overlay-change-1 N 30 25 (20 30) (25 35)) | ||
| 538 | (deftest-previous-overlay-change-1 O 35 30 (20 30) (25 35)) | ||
| 539 | (deftest-previous-overlay-change-1 P 50 35 (20 30) (25 35)) | ||
| 540 | ;; 2 non-empty, continuous | ||
| 541 | (deftest-previous-overlay-change-1 Q 10 1 (20 30) (30 40)) | ||
| 542 | (deftest-previous-overlay-change-1 R 20 1 (20 30) (30 40)) | ||
| 543 | (deftest-previous-overlay-change-1 S 25 20 (20 30) (30 40)) | ||
| 544 | (deftest-previous-overlay-change-1 T 30 20 (20 30) (30 40)) | ||
| 545 | (deftest-previous-overlay-change-1 U 35 30 (20 30) (30 40)) | ||
| 546 | (deftest-previous-overlay-change-1 V 40 30 (20 30) (30 40)) | ||
| 547 | (deftest-previous-overlay-change-1 W 50 40 (20 30) (30 40)) | ||
| 548 | ;; 1 empty, 1 non-empty, non-intersecting | ||
| 549 | (deftest-previous-overlay-change-1 a 10 1 (20 20) (30 40)) | ||
| 550 | (deftest-previous-overlay-change-1 b 20 1 (20 30) (30 40)) | ||
| 551 | (deftest-previous-overlay-change-1 c 25 20 (20 30) (30 40)) | ||
| 552 | (deftest-previous-overlay-change-1 d 30 20 (20 30) (30 40)) | ||
| 553 | (deftest-previous-overlay-change-1 e 35 30 (20 30) (30 40)) | ||
| 554 | (deftest-previous-overlay-change-1 f 40 30 (20 30) (30 40)) | ||
| 555 | (deftest-previous-overlay-change-1 g 50 40 (20 30) (30 40)) | ||
| 556 | ;; 1 empty, 1 non-empty, intersecting at begin | ||
| 557 | (deftest-previous-overlay-change-1 h 10 1 (20 20) (20 30)) | ||
| 558 | (deftest-previous-overlay-change-1 i 20 1 (20 20) (20 30)) | ||
| 559 | (deftest-previous-overlay-change-1 j 25 20 (20 20) (20 30)) | ||
| 560 | (deftest-previous-overlay-change-1 k 30 20 (20 20) (20 30)) | ||
| 561 | (deftest-previous-overlay-change-1 l 40 30 (20 20) (20 30)) | ||
| 562 | ;; 1 empty, 1 non-empty, intersecting at end | ||
| 563 | (deftest-previous-overlay-change-1 m 10 1 (30 30) (20 30)) | ||
| 564 | (deftest-previous-overlay-change-1 n 20 1 (30 30) (20 30)) | ||
| 565 | (deftest-previous-overlay-change-1 o 25 20 (30 30) (20 30)) | ||
| 566 | (deftest-previous-overlay-change-1 p 30 20 (20 20) (20 30)) | ||
| 567 | (deftest-previous-overlay-change-1 q 40 30 (20 20) (20 30)) | ||
| 568 | ;; 1 empty, 1 non-empty, intersectig in the middle | ||
| 569 | (deftest-previous-overlay-change-1 r 10 1 (25 25) (20 30)) | ||
| 570 | (deftest-previous-overlay-change-1 s 20 1 (25 25) (20 30)) | ||
| 571 | (deftest-previous-overlay-change-1 t 25 20 (25 25) (20 30)) | ||
| 572 | (deftest-previous-overlay-change-1 u 30 25 (25 25) (20 30)) | ||
| 573 | (deftest-previous-overlay-change-1 v 40 30 (25 25) (20 30)) | ||
| 574 | ;; 2 empty, intersecting | ||
| 575 | (deftest-previous-overlay-change-1 w 10 1 (20 20) (20 20)) | ||
| 576 | (deftest-previous-overlay-change-1 x 20 1 (20 20) (20 20)) | ||
| 577 | (deftest-previous-overlay-change-1 y 30 20 (20 20) (20 20)) | ||
| 578 | ;; 2 empty, non-intersecting | ||
| 579 | (deftest-previous-overlay-change-1 z 10 1 (20 20) (30 30)) | ||
| 580 | (deftest-previous-overlay-change-1 aa 20 1 (20 20) (30 30)) | ||
| 581 | (deftest-previous-overlay-change-1 ab 25 20 (20 20) (30 30)) | ||
| 582 | (deftest-previous-overlay-change-1 ac 30 20 (20 20) (30 30)) | ||
| 583 | (deftest-previous-overlay-change-1 ad 50 30 (20 20) (30 30)) | ||
| 584 | ;; 10 random | ||
| 585 | (deftest-previous-overlay-change-1 ae 100 90 | ||
| 586 | (58 66) (41 10) (9 67) (28 88) (27 43) | ||
| 587 | (24 27) (48 36) (5 90) (61 9)) | ||
| 588 | (deftest-previous-overlay-change-1 af (point-min) (point-min) | ||
| 589 | (58 66) (41 10) (9 67) (28 88) (27 43) | ||
| 590 | (24 27) (48 36) (5 90) (61 9)) | ||
| 591 | (deftest-previous-overlay-change-1 ag 29 28 | ||
| 592 | (58 66) (41 10) (9 67) (28 88) (27 43) | ||
| 593 | (24 27) (48 36) (5 90) (61 9)) | ||
| 594 | |||
| 595 | |||
| 596 | ;; +==========================================================================+ | ||
| 597 | ;; | overlays-at | ||
| 598 | ;; +==========================================================================+ | ||
| 599 | |||
| 600 | |||
| 601 | ;; Test whether overlay-at returns RESULT at POS after overlays OVL were | ||
| 602 | ;; created in a buffer. POS RES OVL | ||
| 603 | (deftest-overlays-at-1 A 1 ()) | ||
| 604 | ;; 1 overlay | ||
| 605 | (deftest-overlays-at-1 B 10 (a) (a 10 20)) | ||
| 606 | (deftest-overlays-at-1 C 15 (a) (a 10 20)) | ||
| 607 | (deftest-overlays-at-1 D 19 (a) (a 10 20)) | ||
| 608 | (deftest-overlays-at-1 E 20 () (a 10 20)) | ||
| 609 | (deftest-overlays-at-1 F 1 () (a 10 20)) | ||
| 610 | |||
| 611 | ;; 2 non-empty overlays non-intersecting | ||
| 612 | (deftest-overlays-at-1 G 1 () (a 10 20) (b 30 40)) | ||
| 613 | (deftest-overlays-at-1 H 10 (a) (a 10 20) (b 30 40)) | ||
| 614 | (deftest-overlays-at-1 I 15 (a) (a 10 20) (b 30 40)) | ||
| 615 | (deftest-overlays-at-1 K 20 () (a 10 20) (b 30 40)) | ||
| 616 | (deftest-overlays-at-1 L 25 () (a 10 20) (b 30 40)) | ||
| 617 | (deftest-overlays-at-1 M 30 (b) (a 10 20) (b 30 40)) | ||
| 618 | (deftest-overlays-at-1 N 35 (b) (a 10 20) (b 30 40)) | ||
| 619 | (deftest-overlays-at-1 O 40 () (a 10 20) (b 30 40)) | ||
| 620 | (deftest-overlays-at-1 P 50 () (a 10 20) (b 30 40)) | ||
| 621 | |||
| 622 | ;; 2 non-empty overlays intersecting | ||
| 623 | (deftest-overlays-at-1 G 1 () (a 10 30) (b 20 40)) | ||
| 624 | (deftest-overlays-at-1 H 10 (a) (a 10 30) (b 20 40)) | ||
| 625 | (deftest-overlays-at-1 I 15 (a) (a 10 30) (b 20 40)) | ||
| 626 | (deftest-overlays-at-1 K 20 (a b) (a 10 30) (b 20 40)) | ||
| 627 | (deftest-overlays-at-1 L 25 (a b) (a 10 30) (b 20 40)) | ||
| 628 | (deftest-overlays-at-1 M 30 (b) (a 10 30) (b 20 40)) | ||
| 629 | (deftest-overlays-at-1 N 35 (b) (a 10 30) (b 20 40)) | ||
| 630 | (deftest-overlays-at-1 O 40 () (a 10 30) (b 20 40)) | ||
| 631 | (deftest-overlays-at-1 P 50 () (a 10 30) (b 20 40)) | ||
| 632 | |||
| 633 | ;; 2 non-empty overlays continuous | ||
| 634 | (deftest-overlays-at-1 G 1 () (a 10 20) (b 20 30)) | ||
| 635 | (deftest-overlays-at-1 H 10 (a) (a 10 20) (b 20 30)) | ||
| 636 | (deftest-overlays-at-1 I 15 (a) (a 10 20) (b 20 30)) | ||
| 637 | (deftest-overlays-at-1 K 20 (b) (a 10 20) (b 20 30)) | ||
| 638 | (deftest-overlays-at-1 L 25 (b) (a 10 20) (b 20 30)) | ||
| 639 | (deftest-overlays-at-1 M 30 () (a 10 20) (b 20 30)) | ||
| 640 | |||
| 641 | ;; overlays-at never returns empty overlays. | ||
| 642 | (deftest-overlays-at-1 N 1 (a) (a 1 60) (c 1 1) (b 30 30) (d 50 50)) | ||
| 643 | (deftest-overlays-at-1 O 20 (a) (a 1 60) (c 1 1) (b 30 30) (d 50 50)) | ||
| 644 | (deftest-overlays-at-1 P 30 (a) (a 1 60) (c 1 1) (b 30 30) (d 50 50)) | ||
| 645 | (deftest-overlays-at-1 Q 40 (a) (a 1 60) (c 1 1) (b 30 30) (d 50 50)) | ||
| 646 | (deftest-overlays-at-1 R 50 (a) (a 1 60) (c 1 1) (b 30 30) (d 50 50)) | ||
| 647 | (deftest-overlays-at-1 S 60 () (a 1 60) (c 1 1) (b 30 30) (d 50 50)) | ||
| 648 | |||
| 649 | ;; behaviour at point-min and point-max | ||
| 650 | (ert-deftest test-overlays-at-2 () | ||
| 651 | (cl-macrolet ((should-length (n list) | ||
| 652 | `(should (= ,n (length ,list))))) | ||
| 653 | (with-temp-buffer | ||
| 654 | (insert (make-string 100 ?\s)) | ||
| 655 | (make-overlay 1 (point-max)) | ||
| 656 | (make-overlay 10 10) | ||
| 657 | (make-overlay 20 20) | ||
| 658 | (make-overlay (point-max) (point-max)) | ||
| 659 | (should-length 1 (overlays-at 1)) | ||
| 660 | (should-length 1 (overlays-at 10)) | ||
| 661 | (should-length 1 (overlays-at 20)) | ||
| 662 | (should-length 0 (overlays-at (point-max))) | ||
| 663 | (narrow-to-region 10 20) | ||
| 664 | (should-length 1 (overlays-at (point-min))) | ||
| 665 | (should-length 1 (overlays-at 15)) | ||
| 666 | (should-length 1 (overlays-at (point-max)))))) | ||
| 667 | |||
| 668 | |||
| 669 | ;; +==========================================================================+ | ||
| 670 | ;; | overlay-in | ||
| 671 | ;; +==========================================================================+ | ||
| 672 | |||
| 673 | |||
| 674 | ;; Test whether overlays-in returns RES in BEG,END after overlays OVL were | ||
| 675 | ;; created in a buffer. | ||
| 676 | |||
| 677 | (deftest-overlays-in-1 A 1 (point-max) ());;POS RES OVL | ||
| 678 | ;; 1 overlay | ||
| 679 | (deftest-overlays-in-1 B 1 10 () (a 10 20)) | ||
| 680 | (deftest-overlays-in-1 C 5 10 () (a 10 20)) | ||
| 681 | (deftest-overlays-in-1 D 5 15 (a) (a 10 20)) | ||
| 682 | (deftest-overlays-in-1 E 10 15 (a) (a 10 20)) | ||
| 683 | (deftest-overlays-in-1 F 10 20 (a) (a 10 20)) | ||
| 684 | (deftest-overlays-in-1 G 15 20 (a) (a 10 20)) | ||
| 685 | (deftest-overlays-in-1 H 15 25 (a) (a 10 20)) | ||
| 686 | (deftest-overlays-in-1 I 20 25 () (a 10 20)) | ||
| 687 | (deftest-overlays-in-1 J 30 50 () (a 10 20)) | ||
| 688 | |||
| 689 | ;; 2 non-empty overlays non-intersecting | ||
| 690 | (deftest-overlays-in-1 K 1 5 () (a 10 20) (b 30 40)) | ||
| 691 | (deftest-overlays-in-1 L 5 10 () (a 10 20) (b 30 40)) | ||
| 692 | (deftest-overlays-in-1 M 5 15 (a) (a 10 20) (b 30 40)) | ||
| 693 | (deftest-overlays-in-1 N 10 15 (a) (a 10 20) (b 30 40)) | ||
| 694 | (deftest-overlays-in-1 O 15 20 (a) (a 10 20) (b 30 40)) | ||
| 695 | (deftest-overlays-in-1 P 15 25 (a) (a 10 20) (b 30 40)) | ||
| 696 | (deftest-overlays-in-1 Q 20 25 () (a 10 20) (b 30 40)) | ||
| 697 | (deftest-overlays-in-1 R 20 30 () (a 10 20) (b 30 40)) | ||
| 698 | (deftest-overlays-in-1 S 25 30 () (a 10 20) (b 30 40)) | ||
| 699 | (deftest-overlays-in-1 T 25 35 (b) (a 10 20) (b 30 40)) | ||
| 700 | (deftest-overlays-in-1 U 30 35 (b) (a 10 20) (b 30 40)) | ||
| 701 | (deftest-overlays-in-1 V 40 50 () (a 10 20) (b 30 40)) | ||
| 702 | (deftest-overlays-in-1 W 50 60 () (a 10 20) (b 30 40)) | ||
| 703 | (deftest-overlays-in-1 X 1 50 (a b) (a 10 20) (b 30 40)) | ||
| 704 | (deftest-overlays-in-1 Y 10 40 (a b) (a 10 20) (b 30 40)) | ||
| 705 | (deftest-overlays-in-1 Z 10 41 (a b) (a 10 20) (b 30 40)) | ||
| 706 | |||
| 707 | ;; 2 non-empty overlays intersecting | ||
| 708 | (deftest-overlays-in-1 a 1 5 () (a 10 30) (b 20 40)) | ||
| 709 | (deftest-overlays-in-1 b 5 10 () (a 10 30) (b 20 40)) | ||
| 710 | (deftest-overlays-in-1 c 5 15 (a) (a 10 30) (b 20 40)) | ||
| 711 | (deftest-overlays-in-1 d 10 15 (a) (a 10 30) (b 20 40)) | ||
| 712 | (deftest-overlays-in-1 e 10 20 (a) (a 10 30) (b 20 40)) | ||
| 713 | (deftest-overlays-in-1 f 15 20 (a) (a 10 30) (b 20 40)) | ||
| 714 | (deftest-overlays-in-1 g 20 30 (a b) (a 10 30) (b 20 40)) | ||
| 715 | (deftest-overlays-in-1 h 20 40 (a b) (a 10 30) (b 20 40)) | ||
| 716 | (deftest-overlays-in-1 i 25 30 (a b) (a 10 30) (b 20 40)) | ||
| 717 | (deftest-overlays-in-1 j 30 30 (b) (a 10 30) (b 20 40)) | ||
| 718 | (deftest-overlays-in-1 k 30 35 (b) (a 10 30) (b 20 40)) | ||
| 719 | (deftest-overlays-in-1 l 35 40 (b) (a 10 30) (b 20 40)) | ||
| 720 | (deftest-overlays-in-1 m 40 45 () (a 10 30) (b 20 40)) | ||
| 721 | (deftest-overlays-in-1 n 41 45 () (a 10 30) (b 20 40)) | ||
| 722 | (deftest-overlays-in-1 o 50 60 () (a 10 30) (b 20 40)) | ||
| 723 | |||
| 724 | ;; 2 non-empty overlays continuous | ||
| 725 | (deftest-overlays-in-1 p 1 5 () (a 10 20) (b 20 30)) | ||
| 726 | (deftest-overlays-in-1 q 5 10 () (a 10 20) (b 20 30)) | ||
| 727 | (deftest-overlays-in-1 r 15 20 (a) (a 10 20) (b 20 30)) | ||
| 728 | (deftest-overlays-in-1 s 15 25 (a b) (a 10 20) (b 20 30)) | ||
| 729 | (deftest-overlays-in-1 t 20 25 (b) (a 10 20) (b 20 30)) | ||
| 730 | (deftest-overlays-in-1 u 25 30 (b) (a 10 20) (b 20 30)) | ||
| 731 | (deftest-overlays-in-1 v 29 35 (b) (a 10 20) (b 20 30)) | ||
| 732 | (deftest-overlays-in-1 w 30 35 () (a 10 20) (b 20 30)) | ||
| 733 | (deftest-overlays-in-1 x 35 50 () (a 10 20) (b 20 30)) | ||
| 734 | (deftest-overlays-in-1 y 1 50 (a b) (a 10 20) (b 20 30)) | ||
| 735 | (deftest-overlays-in-1 z 15 50 (a b) (a 10 20) (b 20 30)) | ||
| 736 | (deftest-overlays-in-1 aa 1 25 (a b) (a 10 20) (b 20 30)) | ||
| 737 | |||
| 738 | ;; 1 empty overlay | ||
| 739 | (deftest-overlays-in-1 ab 1 10 () (a 10 10)) | ||
| 740 | (deftest-overlays-in-1 ac 10 10 (a) (a 10 10)) | ||
| 741 | (deftest-overlays-in-1 ad 9 10 () (a 10 10)) | ||
| 742 | (deftest-overlays-in-1 ae 9 11 (a) (a 10 10)) | ||
| 743 | (deftest-overlays-in-1 af 10 11 (a) (a 10 10)) | ||
| 744 | |||
| 745 | |||
| 746 | ;; behaviour at point-max | ||
| 747 | (ert-deftest test-overlays-in-2 () | ||
| 748 | (cl-macrolet ((should-length (n list) | ||
| 749 | `(should (= ,n (length ,list))))) | ||
| 750 | (with-temp-buffer | ||
| 751 | (insert (make-string 100 ?\s)) | ||
| 752 | (make-overlay (point-max) (point-max)) | ||
| 753 | (make-overlay 50 50) | ||
| 754 | (should-length 1 (overlays-in 50 50)) | ||
| 755 | (should-length 2 (overlays-in 1 (point-max))) | ||
| 756 | (should-length 1 (overlays-in (point-max) (point-max))) | ||
| 757 | (narrow-to-region 1 50) | ||
| 758 | (should-length 0 (overlays-in 1 (point-max))) | ||
| 759 | (should-length 1 (overlays-in (point-max) (point-max)))))) | ||
| 760 | |||
| 761 | |||
| 762 | ;; +==========================================================================+ | ||
| 763 | ;; | overlay-recenter | ||
| 764 | ;; +==========================================================================+ | ||
| 765 | |||
| 766 | ;; This function is a noop in the overlay tree branch. | ||
| 767 | (ert-deftest test-overlay-recenter () | ||
| 768 | (with-temp-buffer | ||
| 769 | (should-not (overlay-recenter 1)) | ||
| 770 | (insert (make-string 100 ?\s)) | ||
| 771 | (dotimes (i 10) | ||
| 772 | (make-overlay i (1+ i)) | ||
| 773 | (should-not (overlay-recenter i))))) | ||
| 774 | |||
| 775 | |||
| 776 | ;; +==========================================================================+ | ||
| 777 | ;; | move-overlay | ||
| 778 | ;; +==========================================================================+ | ||
| 779 | |||
| 780 | ;; buffer nil with live overlay | ||
| 781 | (ert-deftest test-move-overlay-1 () | ||
| 782 | (test-with-overlay-in-buffer (ov 1 100) | ||
| 783 | (move-overlay ov 50 60) | ||
| 784 | (should (= 50 (overlay-start ov))) | ||
| 785 | (should (= 60 (overlay-end ov))) | ||
| 786 | (should (eq (current-buffer) (overlay-buffer ov))))) | ||
| 787 | |||
| 788 | ;; buffer nil, dead overlay | ||
| 789 | (ert-deftest test-move-overlay-2 () | ||
| 790 | (with-temp-buffer | ||
| 791 | (let ((ov (test-with-overlay-in-buffer (ov 1 100) ov))) | ||
| 792 | (insert (make-string 100 ?\s)) | ||
| 793 | (move-overlay ov 50 60) | ||
| 794 | (should (= 50 (overlay-start ov))) | ||
| 795 | (should (= 60 (overlay-end ov))) | ||
| 796 | (should (eq (current-buffer) (overlay-buffer ov)))))) | ||
| 797 | |||
| 798 | ;; buffer non-nil, live overlay | ||
| 799 | (ert-deftest test-move-overlay-3 () | ||
| 800 | (test-with-overlay-in-buffer (ov 10 100) | ||
| 801 | (with-temp-buffer | ||
| 802 | (move-overlay ov 1 1 (current-buffer)) | ||
| 803 | (should (= 1 (overlay-start ov))) | ||
| 804 | (should (= 1 (overlay-end ov))) | ||
| 805 | (should (eq (current-buffer) (overlay-buffer ov)))) | ||
| 806 | (should-not (overlay-start ov)) | ||
| 807 | (should-not (overlay-end ov)) | ||
| 808 | (should-not (overlay-buffer ov)))) | ||
| 809 | |||
| 810 | ;; buffer non-nil, dead overlay | ||
| 811 | (ert-deftest test-move-overlay-4 () | ||
| 812 | (let ((ov (test-with-overlay-in-buffer (ov 1 1) ov))) | ||
| 813 | (with-temp-buffer | ||
| 814 | (move-overlay ov 1 1 (current-buffer)) | ||
| 815 | (should (= 1 (overlay-start ov))) | ||
| 816 | (should (= 1 (overlay-end ov))) | ||
| 817 | (should (eq (current-buffer) (overlay-buffer ov)))) | ||
| 818 | (should-not (overlay-start ov)) | ||
| 819 | (should-not (overlay-end ov)) | ||
| 820 | (should-not (overlay-buffer ov)))) | ||
| 821 | |||
| 822 | ;; +==========================================================================+ | ||
| 823 | ;; | delete-(all-)overlay | ||
| 824 | ;; +==========================================================================+ | ||
| 825 | |||
| 826 | ;; delete live overlay | ||
| 827 | (ert-deftest test-delete-overlay-1 () | ||
| 828 | (test-with-overlay-in-buffer (ov 10 100) | ||
| 829 | (should (buffer-live-p (overlay-buffer ov))) | ||
| 830 | (delete-overlay ov) | ||
| 831 | (should-not (overlay-start ov)) | ||
| 832 | (should-not (overlay-end ov)) | ||
| 833 | (should-not (overlay-buffer ov)))) | ||
| 834 | |||
| 835 | ;; delete dead overlay | ||
| 836 | (ert-deftest test-delete-overlay-2 () | ||
| 837 | (let ((ov (test-with-overlay-in-buffer (ov 10 100) ov))) | ||
| 838 | (should-not (overlay-start ov)) | ||
| 839 | (should-not (overlay-end ov)) | ||
| 840 | (should-not (overlay-buffer ov)) | ||
| 841 | (should-not (delete-overlay ov)) | ||
| 842 | (should-not (overlay-start ov)) | ||
| 843 | (should-not (overlay-end ov)) | ||
| 844 | (should-not (overlay-buffer ov)))) | ||
| 845 | |||
| 846 | (ert-deftest test-delete-all-overlay-1 () | ||
| 847 | (with-temp-buffer | ||
| 848 | (should-not (delete-all-overlays)) | ||
| 849 | (should-not (delete-all-overlays (current-buffer))) | ||
| 850 | (insert (make-string 100 ?\s)) | ||
| 851 | (dotimes (i 10) (make-overlay i (1+ i))) | ||
| 852 | (should-not (delete-all-overlays (current-buffer))) | ||
| 853 | (should-not (delete-all-overlays)))) | ||
| 854 | |||
| 855 | |||
| 856 | ;; +==========================================================================+ | ||
| 857 | ;; | get-char-property(-and-overlay) | ||
| 858 | ;; +==========================================================================+ | ||
| 859 | |||
| 860 | ;; FIXME: TBD | ||
| 861 | |||
| 862 | |||
| 863 | ;; +==========================================================================+ | ||
| 864 | ;; | Moving by insertions | ||
| 865 | ;; +==========================================================================+ | ||
| 866 | |||
| 867 | (defmacro deftest-moving-insert-1 (id beg-end insert sbeg-send fa ra) | ||
| 868 | (cl-destructuring-bind (beg end ipos ilen sbeg send fa ra) | ||
| 869 | (append beg-end insert sbeg-send (list fa ra) nil) | ||
| 870 | `(ert-deftest ,(buffer-tests--make-test-name 'moving-insert 1 id) () | ||
| 871 | (test-with-overlay-in-buffer (ov ,beg ,end ,fa ,ra) | ||
| 872 | (should (= ,beg (overlay-start ov))) | ||
| 873 | (should (= ,end (overlay-end ov))) | ||
| 874 | (goto-char ,ipos) | ||
| 875 | (insert (make-string ,ilen ?x)) | ||
| 876 | (should (= ,sbeg (overlay-start ov))) | ||
| 877 | (should (= ,send (overlay-end ov))))))) | ||
| 878 | |||
| 879 | ;; non-empty, no fa, no ra | ||
| 880 | ;; -------------------- OV INS RESULT | ||
| 881 | (deftest-moving-insert-1 A (10 20) (15 3) (10 23) nil nil) | ||
| 882 | (deftest-moving-insert-1 B (10 20) (20 4) (10 20) nil nil) | ||
| 883 | (deftest-moving-insert-1 C (10 20) (5 5) (15 25) nil nil) | ||
| 884 | (deftest-moving-insert-1 D (10 20) (10 3) (10 23) nil nil) | ||
| 885 | (deftest-moving-insert-1 E (10 20) (20 4) (10 20) nil nil) | ||
| 886 | |||
| 887 | ;; non-empty no fa, ra | ||
| 888 | (deftest-moving-insert-1 F (10 20) (15 3) (10 23) nil t) | ||
| 889 | (deftest-moving-insert-1 G (10 20) (20 4) (10 24) nil t) | ||
| 890 | (deftest-moving-insert-1 H (10 20) (5 5) (15 25) nil t) | ||
| 891 | (deftest-moving-insert-1 I (10 20) (10 3) (10 23) nil t) | ||
| 892 | (deftest-moving-insert-1 J (10 20) (20 4) (10 24) nil t) | ||
| 893 | |||
| 894 | ;; non-empty, fa, no r | ||
| 895 | (deftest-moving-insert-1 K (10 20) (15 3) (10 23) t nil) | ||
| 896 | (deftest-moving-insert-1 L (10 20) (20 4) (10 20) t nil) | ||
| 897 | (deftest-moving-insert-1 M (10 20) (5 5) (15 25) t nil) | ||
| 898 | (deftest-moving-insert-1 N (10 20) (10 3) (13 23) t nil) | ||
| 899 | (deftest-moving-insert-1 O (10 20) (20 4) (10 20) t nil) | ||
| 900 | |||
| 901 | ;; This used to fail. | ||
| 902 | (ert-deftest test-moving-insert-2-a () | ||
| 903 | (with-temp-buffer | ||
| 904 | (insert (make-string 1 ?.)) | ||
| 905 | (let ((ov (make-overlay 1 1 nil t nil))) | ||
| 906 | (insert "()") | ||
| 907 | (should (= 1 (overlay-end ov)))))) | ||
| 908 | |||
| 909 | ;; non-empty, fa, ra | ||
| 910 | (deftest-moving-insert-1 P (10 20) (15 3) (10 23) t t) | ||
| 911 | (deftest-moving-insert-1 Q (10 20) (20 4) (10 24) t t) | ||
| 912 | (deftest-moving-insert-1 R (10 20) (5 5) (15 25) t t) | ||
| 913 | (deftest-moving-insert-1 S (10 20) (10 3) (13 23) t t) | ||
| 914 | (deftest-moving-insert-1 T (10 20) (20 4) (10 24) t t) | ||
| 915 | |||
| 916 | ;; empty, no fa, no ra | ||
| 917 | (deftest-moving-insert-1 U (15 15) (20 4) (15 15) nil nil) | ||
| 918 | (deftest-moving-insert-1 V (15 15) (5 5) (20 20) nil nil) | ||
| 919 | (deftest-moving-insert-1 W (15 15) (15 3) (15 15) nil nil) | ||
| 920 | |||
| 921 | ;; empty no fa, ra | ||
| 922 | (deftest-moving-insert-1 X (15 15) (20 4) (15 15) nil t) | ||
| 923 | (deftest-moving-insert-1 Y (15 15) (5 5) (20 20) nil t) | ||
| 924 | (deftest-moving-insert-1 Z (15 15) (15 3) (15 18) nil t) | ||
| 925 | |||
| 926 | ;; empty, fa, no ra | ||
| 927 | (deftest-moving-insert-1 a (15 15) (20 4) (15 15) t nil) | ||
| 928 | (deftest-moving-insert-1 b (15 15) (5 5) (20 20) t nil) | ||
| 929 | (deftest-moving-insert-1 c (15 15) (15 3) (15 15) t nil) | ||
| 930 | |||
| 931 | ;; empty, fa, ra | ||
| 932 | (deftest-moving-insert-1 d (15 15) (20 4) (15 15) t t) | ||
| 933 | (deftest-moving-insert-1 e (15 15) (5 5) (20 20) t t) | ||
| 934 | (deftest-moving-insert-1 f (15 15) (15 3) (18 18) t t) | ||
| 935 | |||
| 936 | ;; Try to trigger a pathological case where the tree could become | ||
| 937 | ;; unordered due to an insert operation. | ||
| 938 | |||
| 939 | (ert-deftest test-moving-insert-2 () | ||
| 940 | (with-temp-buffer | ||
| 941 | (insert (make-string 1000 ?x)) | ||
| 942 | (let ((root (make-overlay 50 75 nil nil 'rear-advance)) | ||
| 943 | (left (make-overlay 25 50 nil 'front-advance 'rear-advance)) | ||
| 944 | (right (make-overlay 75 100 nil nil nil))) | ||
| 945 | ;; [50] <--- start | ||
| 946 | ;; / \ | ||
| 947 | ;; (25) (75) | ||
| 948 | (delete-region 25 75) | ||
| 949 | ;; [25] | ||
| 950 | ;; / \ | ||
| 951 | ;; (25) (25) | ||
| 952 | (should (= 25 (overlay-start root))) | ||
| 953 | (should (= 25 (overlay-end root))) | ||
| 954 | (should (= 25 (overlay-start left))) | ||
| 955 | (should (= 25 (overlay-end left))) | ||
| 956 | (should (= 25 (overlay-start right))) | ||
| 957 | (should (= 50 (overlay-end right))) | ||
| 958 | ;; Inserting at start should make left advance while right and | ||
| 959 | ;; root stay, thus we would have left > right . | ||
| 960 | (goto-char 25) | ||
| 961 | (insert (make-string 25 ?x)) | ||
| 962 | ;; [25] | ||
| 963 | ;; / \ | ||
| 964 | ;; (50) (25) | ||
| 965 | (should (= 25 (overlay-start root))) | ||
| 966 | (should (= 50 (overlay-end root))) | ||
| 967 | (should (= 50 (overlay-start left))) | ||
| 968 | (should (= 50 (overlay-end left))) | ||
| 969 | (should (= 25 (overlay-start right))) | ||
| 970 | (should (= 75 (overlay-end right))) | ||
| 971 | ;; Try to detect the error, by removing left. The should fail | ||
| 972 | ;; an eassert, since it won't be found by a reular tree | ||
| 973 | ;; traversal - in theory. | ||
| 974 | (delete-overlay left) | ||
| 975 | (should (= 2 (length (overlays-in 1 (point-max)))))))) | ||
| 976 | |||
| 977 | |||
| 978 | |||
| 979 | ;; +==========================================================================+ | ||
| 980 | ;; | Moving by deletions | ||
| 981 | ;; +==========================================================================+ | ||
| 982 | |||
| 983 | (defmacro deftest-moving-delete-1 (id beg-end delete sbeg-send fa ra) | ||
| 984 | (cl-destructuring-bind (beg end dpos dlen sbeg send fa ra) | ||
| 985 | (append beg-end delete sbeg-send (list fa ra) nil) | ||
| 986 | `(ert-deftest ,(buffer-tests--make-test-name 'moving-delete 1 id) () | ||
| 987 | (test-with-overlay-in-buffer (ov ,beg ,end ,fa ,ra) | ||
| 988 | (should (= ,beg (overlay-start ov))) | ||
| 989 | (should (= ,end (overlay-end ov))) | ||
| 990 | (delete-region ,dpos (+ ,dpos ,dlen)) | ||
| 991 | (should (= ,sbeg (overlay-start ov))) | ||
| 992 | (should (= ,send (overlay-end ov))))))) | ||
| 993 | |||
| 994 | ;; non-empty, no fa, no ra | ||
| 995 | ;; -------------------- OV DEL RESULT | ||
| 996 | (deftest-moving-delete-1 A (10 20) (15 3) (10 17) nil nil) | ||
| 997 | (deftest-moving-delete-1 B (10 20) (20 4) (10 20) nil nil) | ||
| 998 | (deftest-moving-delete-1 C (10 20) (5 5) (5 15) nil nil) | ||
| 999 | (deftest-moving-delete-1 D (10 20) (10 3) (10 17) nil nil) | ||
| 1000 | (deftest-moving-delete-1 E (10 20) (20 4) (10 20) nil nil) | ||
| 1001 | |||
| 1002 | ;; non-empty no fa, ra | ||
| 1003 | (deftest-moving-delete-1 F (10 20) (15 3) (10 17) nil t) | ||
| 1004 | (deftest-moving-delete-1 G (10 20) (20 4) (10 20) nil t) | ||
| 1005 | (deftest-moving-delete-1 H (10 20) (5 5) (5 15) nil t) | ||
| 1006 | (deftest-moving-delete-1 I (10 20) (10 3) (10 17) nil t) | ||
| 1007 | (deftest-moving-delete-1 J (10 20) (20 4) (10 20) nil t) | ||
| 1008 | |||
| 1009 | ;; non-empty, fa, no ra | ||
| 1010 | (deftest-moving-delete-1 K (10 20) (15 3) (10 17) t nil) | ||
| 1011 | (deftest-moving-delete-1 L (10 20) (20 4) (10 20) t nil) | ||
| 1012 | (deftest-moving-delete-1 M (10 20) (5 5) (5 15) t nil) | ||
| 1013 | (deftest-moving-delete-1 N (10 20) (10 3) (10 17) t nil) | ||
| 1014 | (deftest-moving-delete-1 O (10 20) (20 4) (10 20) t nil) | ||
| 1015 | |||
| 1016 | ;; non-empty, fa, ra | ||
| 1017 | (deftest-moving-delete-1 P (10 20) (15 3) (10 17) t t) | ||
| 1018 | (deftest-moving-delete-1 Q (10 20) (20 4) (10 20) t t) | ||
| 1019 | (deftest-moving-delete-1 R (10 20) (5 5) (5 15) t t) | ||
| 1020 | (deftest-moving-delete-1 S (10 20) (10 3) (10 17) t t) | ||
| 1021 | (deftest-moving-delete-1 T (10 20) (20 4) (10 20) t t) | ||
| 1022 | |||
| 1023 | ;; empty, no fa, no ra | ||
| 1024 | (deftest-moving-delete-1 U (15 15) (20 4) (15 15) nil nil) | ||
| 1025 | (deftest-moving-delete-1 V (15 15) (5 5) (10 10) nil nil) | ||
| 1026 | (deftest-moving-delete-1 W (15 15) (15 3) (15 15) nil nil) | ||
| 1027 | |||
| 1028 | ;; empty no fa, ra | ||
| 1029 | (deftest-moving-delete-1 X (15 15) (20 4) (15 15) nil t) | ||
| 1030 | (deftest-moving-delete-1 Y (15 15) (5 5) (10 10) nil t) | ||
| 1031 | (deftest-moving-delete-1 Z (15 15) (15 3) (15 15) nil t) | ||
| 1032 | |||
| 1033 | ;; empty, fa, no ra | ||
| 1034 | (deftest-moving-delete-1 a (15 15) (20 4) (15 15) t nil) | ||
| 1035 | (deftest-moving-delete-1 b (15 15) (5 5) (10 10) t nil) | ||
| 1036 | (deftest-moving-delete-1 c (15 15) (15 3) (15 15) t nil) | ||
| 1037 | |||
| 1038 | ;; empty, fa, ra | ||
| 1039 | (deftest-moving-delete-1 d (15 15) (20 4) (15 15) t t) | ||
| 1040 | (deftest-moving-delete-1 e (15 15) (5 5) (10 10) t t) | ||
| 1041 | (deftest-moving-delete-1 f (15 15) (15 3) (15 15) t t) | ||
| 1042 | |||
| 1043 | |||
| 1044 | ;; +==========================================================================+ | ||
| 1045 | ;; | make-indirect-buffer | ||
| 1046 | ;; +==========================================================================+ | ||
| 1047 | |||
| 1048 | ;; Check if overlays are cloned/seperate from indirect buffer. | ||
| 1049 | (ert-deftest test-make-indirect-buffer-1 () | ||
| 1050 | (with-temp-buffer | ||
| 1051 | (dotimes (_ 10) (make-overlay 1 1)) | ||
| 1052 | (let (indirect clone) | ||
| 1053 | (unwind-protect | ||
| 1054 | (progn | ||
| 1055 | (setq indirect (make-indirect-buffer | ||
| 1056 | (current-buffer) "indirect")) | ||
| 1057 | (with-current-buffer indirect | ||
| 1058 | (should-not (overlays-in (point-min) (point-max))) | ||
| 1059 | (dotimes (_ 20) (make-overlay 1 1)) | ||
| 1060 | (should (= 20 (length (overlays-in (point-min) (point-max))))) | ||
| 1061 | (delete-all-overlays) | ||
| 1062 | (should-not (overlays-in (point-min) (point-max)))) | ||
| 1063 | (should (= 10 (length (overlays-in (point-min) (point-max))))) | ||
| 1064 | (setq clone (make-indirect-buffer | ||
| 1065 | (current-buffer) "clone" 'clone)) | ||
| 1066 | (with-current-buffer clone | ||
| 1067 | (should (= 10 (length (overlays-in (point-min) (point-max))))) | ||
| 1068 | (dotimes (_ 30) (make-overlay 1 1)) | ||
| 1069 | (should (= 40 (length (overlays-in (point-min) (point-max)))))) | ||
| 1070 | ;; back in temp buffer | ||
| 1071 | (should (= 10 (length (overlays-in (point-min) (point-max))))) | ||
| 1072 | (with-current-buffer clone | ||
| 1073 | (mapc #'delete-overlay | ||
| 1074 | (seq-take (overlays-in (point-min) (point-max)) 10)) | ||
| 1075 | (should (= 30 (length (overlays-in (point-min) (point-max)))))) | ||
| 1076 | (should (= 10 (length (overlays-in (point-min) (point-max))))) | ||
| 1077 | (delete-all-overlays) | ||
| 1078 | (with-current-buffer clone | ||
| 1079 | (should (= 30 (length (overlays-in (point-min) (point-max))))))) | ||
| 1080 | (when (buffer-live-p clone) | ||
| 1081 | (kill-buffer clone)) | ||
| 1082 | (when (buffer-live-p indirect) | ||
| 1083 | (kill-buffer indirect)))))) | ||
| 1084 | |||
| 1085 | |||
| 1086 | |||
| 1087 | ;; +==========================================================================+ | ||
| 1088 | ;; | buffer-swap-text | ||
| 1089 | ;; +==========================================================================+ | ||
| 1090 | |||
| 1091 | (defmacro buffer-tests--with-temp-buffers (vars &rest body) | ||
| 1092 | (declare (indent 1) (debug (sexp &rest form))) | ||
| 1093 | (if (null vars) | ||
| 1094 | `(progn ,@body) | ||
| 1095 | `(with-temp-buffer | ||
| 1096 | (let ((,(car vars) (current-buffer))) | ||
| 1097 | (buffer-tests--with-temp-buffers ,(cdr vars) ,@body))))) | ||
| 1098 | |||
| 1099 | ;; basic | ||
| 1100 | (ert-deftest test-buffer-swap-text-1 () | ||
| 1101 | (buffer-tests--with-temp-buffers (buffer other) | ||
| 1102 | (with-current-buffer buffer | ||
| 1103 | (let ((ov (make-overlay 1 1))) | ||
| 1104 | (buffer-swap-text other) | ||
| 1105 | (should-not (overlays-in 1 1)) | ||
| 1106 | (with-current-buffer other | ||
| 1107 | (should (overlays-in 1 1)) | ||
| 1108 | (should (eq ov (car (overlays-in 1 1))))))))) | ||
| 1109 | |||
| 1110 | ;; properties | ||
| 1111 | (ert-deftest test-buffer-swap-text-1 () | ||
| 1112 | (buffer-tests--with-temp-buffers (buffer other) | ||
| 1113 | (with-current-buffer other | ||
| 1114 | (overlay-put (make-overlay 1 1) 'buffer 'other)) | ||
| 1115 | (with-current-buffer buffer | ||
| 1116 | (overlay-put (make-overlay 1 1) 'buffer 'buffer) | ||
| 1117 | (buffer-swap-text other) | ||
| 1118 | (should (= 1 (length (overlays-in 1 1)))) | ||
| 1119 | (should (eq (overlay-get (car (overlays-in 1 1)) 'buffer) 'other))) | ||
| 1120 | (with-current-buffer other | ||
| 1121 | (should (= 1 (length (overlays-in 1 1)))) | ||
| 1122 | (should (eq (overlay-get (car (overlays-in 1 1)) 'buffer) 'buffer))))) | ||
| 1123 | |||
| 1124 | |||
| 1125 | ;; +==========================================================================+ | ||
| 1126 | ;; | priorities | ||
| 1127 | ;; +==========================================================================+ | ||
| 1128 | |||
| 1129 | (ert-deftest test-overlay-priorities-1 () | ||
| 1130 | (with-temp-buffer | ||
| 1131 | (insert " ") | ||
| 1132 | (dotimes (i 10) | ||
| 1133 | (let ((ov (make-overlay 1 2))) | ||
| 1134 | (overlay-put ov 'priority i) | ||
| 1135 | (overlay-put ov 'value i))) | ||
| 1136 | (should (eq 9 (get-char-property 1 'value))))) | ||
| 1137 | |||
| 1138 | (ert-deftest test-overlay-priorities-2 () | ||
| 1139 | (with-temp-buffer | ||
| 1140 | (insert " ") | ||
| 1141 | (dotimes (j 10) | ||
| 1142 | (let* ((i (- 9 j)) | ||
| 1143 | (ov (make-overlay 1 2))) | ||
| 1144 | (overlay-put ov 'priority i) | ||
| 1145 | (overlay-put ov 'value i))) | ||
| 1146 | (should (eq 9 (get-char-property 1 'value))))) | ||
| 1147 | |||
| 1148 | |||
| 1149 | ;; +==========================================================================+ | ||
| 1150 | ;; | Other | ||
| 1151 | ;; +==========================================================================+ | ||
| 1152 | |||
| 1153 | (defun test-overlay-regions () | ||
| 1154 | (sort (mapcar (lambda (ov) | ||
| 1155 | (cons (overlay-start ov) | ||
| 1156 | (overlay-end ov))) | ||
| 1157 | (overlays-in (point-min) | ||
| 1158 | (point-max))) | ||
| 1159 | (lambda (o1 o2) | ||
| 1160 | (or (< (car o1) (car o2)) | ||
| 1161 | (and (= (car o1) (car o2)) | ||
| 1162 | (< (cdr o1) (cdr o2))))))) | ||
| 1163 | |||
| 1164 | ;; This test used to fail. | ||
| 1165 | (ert-deftest overlay-complex-delete-with-offset () | ||
| 1166 | (with-temp-buffer | ||
| 1167 | (let (todelete) | ||
| 1168 | (insert (make-string 1000 ?\s)) | ||
| 1169 | (make-overlay 1 2 nil t nil) | ||
| 1170 | (make-overlay 2 3 nil t nil) | ||
| 1171 | (make-overlay 3 4 nil t nil) | ||
| 1172 | (make-overlay 4 5 nil t nil) | ||
| 1173 | (setq todelete (make-overlay 280 287 nil t nil)) | ||
| 1174 | (make-overlay 265 275 nil t nil) | ||
| 1175 | (make-overlay 329 386 nil t nil) | ||
| 1176 | (make-overlay 386 390 nil t nil) | ||
| 1177 | (goto-char 50) | ||
| 1178 | (delete-char 50) | ||
| 1179 | (goto-char 1) | ||
| 1180 | (delete-char 2) | ||
| 1181 | (delete-overlay todelete) | ||
| 1182 | (should (equal (test-overlay-regions) | ||
| 1183 | '((1 . 1) (1 . 1) (1 . 2) (2 . 3) (213 . 223) (277 . 334) (334 . 338))))))) | ||
| 1184 | |||
| 1185 | ;; This test used to fail. | ||
| 1186 | (ert-deftest overlay-complex-insert-1 () | ||
| 1187 | (with-temp-buffer | ||
| 1188 | (insert " ") | ||
| 1189 | (make-overlay 8 11 nil nil t) | ||
| 1190 | (make-overlay 2 7 nil nil nil) | ||
| 1191 | (make-overlay 2 4 nil t nil) | ||
| 1192 | (goto-char 1) | ||
| 1193 | (insert " ") | ||
| 1194 | (should (equal (test-overlay-regions) | ||
| 1195 | '((7 . 9) | ||
| 1196 | (7 . 12) | ||
| 1197 | (13 . 16)))))) | ||
| 1198 | |||
| 1199 | ;; This test used to fail. | ||
| 1200 | (ert-deftest overlay-complex-insert-2 () | ||
| 1201 | (with-temp-buffer | ||
| 1202 | (insert (make-string 100 ?\s)) | ||
| 1203 | (make-overlay 77 7 nil nil t) | ||
| 1204 | (make-overlay 21 53 nil t t) | ||
| 1205 | (make-overlay 84 14 nil nil nil) | ||
| 1206 | (make-overlay 38 69 nil t nil) | ||
| 1207 | (make-overlay 93 15 nil nil t) | ||
| 1208 | (make-overlay 73 48 nil t t) | ||
| 1209 | (make-overlay 96 51 nil t t) | ||
| 1210 | (make-overlay 6 43 nil t t) | ||
| 1211 | (make-overlay 15 100 nil t t) | ||
| 1212 | (make-overlay 22 17 nil nil nil) | ||
| 1213 | (make-overlay 72 45 nil t nil) | ||
| 1214 | (make-overlay 2 74 nil nil t) | ||
| 1215 | (make-overlay 15 29 nil t t) | ||
| 1216 | (make-overlay 17 34 nil t t) | ||
| 1217 | (make-overlay 101 66 nil t nil) | ||
| 1218 | (make-overlay 94 24 nil nil nil) | ||
| 1219 | (goto-char 78) | ||
| 1220 | (insert " ") | ||
| 1221 | (narrow-to-region 47 19) | ||
| 1222 | (goto-char 46) | ||
| 1223 | (widen) | ||
| 1224 | (narrow-to-region 13 3) | ||
| 1225 | (goto-char 9) | ||
| 1226 | (delete-char 0) | ||
| 1227 | (goto-char 11) | ||
| 1228 | (insert " ") | ||
| 1229 | (goto-char 3) | ||
| 1230 | (insert " ") | ||
| 1231 | (goto-char 8) | ||
| 1232 | (insert " ") | ||
| 1233 | (goto-char 26) | ||
| 1234 | (insert " ") | ||
| 1235 | (goto-char 14) | ||
| 1236 | (widen) | ||
| 1237 | (narrow-to-region 71 35) | ||
| 1238 | (should | ||
| 1239 | (equal (test-overlay-regions) | ||
| 1240 | '((2 . 104) | ||
| 1241 | (23 . 73) | ||
| 1242 | (24 . 107) | ||
| 1243 | (44 . 125) | ||
| 1244 | (45 . 59) | ||
| 1245 | (45 . 134) | ||
| 1246 | (45 . 141) | ||
| 1247 | (47 . 52) | ||
| 1248 | (47 . 64) | ||
| 1249 | (51 . 83) | ||
| 1250 | (54 . 135) | ||
| 1251 | (68 . 99)))))) | ||
| 1252 | |||
| 1253 | (ert-deftest test-overlay-multibyte-transition-1 () | ||
| 1254 | (with-temp-buffer | ||
| 1255 | (set-buffer-multibyte t) | ||
| 1256 | (insert "ääää") | ||
| 1257 | ;; aeaeaeae | ||
| 1258 | ;; 1 2 3 4 5 | ||
| 1259 | ;; 123456789 | ||
| 1260 | (let ((nonempty-bob (make-overlay 1 2)) | ||
| 1261 | (empty-bob (make-overlay 1 1)) | ||
| 1262 | (empty (make-overlay 2 2)) | ||
| 1263 | (nonempty (make-overlay 2 4)) | ||
| 1264 | (nonempty-eob (make-overlay 4 5)) | ||
| 1265 | (empty-eob (make-overlay 5 5))) | ||
| 1266 | (set-buffer-multibyte nil) | ||
| 1267 | (cl-macrolet | ||
| 1268 | ((ovshould (ov begin end) | ||
| 1269 | `(should (equal (list (overlay-start ,ov) (overlay-end ,ov)) | ||
| 1270 | (list ,begin ,end))))) | ||
| 1271 | (ovshould nonempty-bob 1 3) | ||
| 1272 | (ovshould empty-bob 1 1) | ||
| 1273 | (ovshould empty 3 3) | ||
| 1274 | (ovshould nonempty 3 7) | ||
| 1275 | (ovshould nonempty-eob 7 9) | ||
| 1276 | (ovshould empty-eob 9 9))))) | ||
| 1277 | |||
| 1278 | (ert-deftest test-overlay-multibyte-transition-2 () | ||
| 1279 | (with-temp-buffer | ||
| 1280 | (set-buffer-multibyte t) | ||
| 1281 | (insert "ääää") | ||
| 1282 | (set-buffer-multibyte nil) | ||
| 1283 | ;; aeaeaeae | ||
| 1284 | ;; 1 2 3 4 5 | ||
| 1285 | ;; 123456789 | ||
| 1286 | (let ((nonempty-bob-end (make-overlay 1 2)) | ||
| 1287 | (nonempty-bob-beg (make-overlay 1 3)) | ||
| 1288 | (empty-bob (make-overlay 1 1)) | ||
| 1289 | (empty-beg (make-overlay 3 3)) | ||
| 1290 | (empty-end (make-overlay 2 2)) | ||
| 1291 | (nonempty-beg-beg (make-overlay 3 7)) | ||
| 1292 | (nonempty-beg-end (make-overlay 3 8)) | ||
| 1293 | (nonempty-end-beg (make-overlay 4 7)) | ||
| 1294 | (nonempty-end-end (make-overlay 4 8)) | ||
| 1295 | (nonempty-eob-beg (make-overlay 5 9)) | ||
| 1296 | (nonempty-eob-end (make-overlay 6 9)) | ||
| 1297 | (empty-eob (make-overlay 9 9))) | ||
| 1298 | (set-buffer-multibyte t) | ||
| 1299 | (cl-macrolet | ||
| 1300 | ((ovshould (ov begin end) | ||
| 1301 | `(should (equal (list (overlay-start ,ov) (overlay-end ,ov)) | ||
| 1302 | (list ,begin ,end))))) | ||
| 1303 | (ovshould nonempty-bob-end 1 2) | ||
| 1304 | (ovshould nonempty-bob-beg 1 2) | ||
| 1305 | (ovshould empty-bob 1 1) | ||
| 1306 | (ovshould empty-beg 2 2) | ||
| 1307 | (ovshould empty-end 2 2) | ||
| 1308 | (ovshould nonempty-beg-beg 2 4) | ||
| 1309 | (ovshould nonempty-beg-end 2 5) | ||
| 1310 | (ovshould nonempty-end-beg 3 4) | ||
| 1311 | (ovshould nonempty-end-end 3 5) | ||
| 1312 | (ovshould nonempty-eob-beg 3 5) | ||
| 1313 | (ovshould nonempty-eob-end 4 5) | ||
| 1314 | (ovshould empty-eob 5 5))))) | ||
| 1315 | |||
| 97 | ;;; buffer-tests.el ends here | 1316 | ;;; buffer-tests.el ends here |