diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/lisp/emacs-lisp/backtrace-tests.el | 60 | ||||
| -rw-r--r-- | test/lisp/emacs-lisp/cl-print-tests.el | 36 |
2 files changed, 87 insertions, 9 deletions
diff --git a/test/lisp/emacs-lisp/backtrace-tests.el b/test/lisp/emacs-lisp/backtrace-tests.el index ba2d33a9d5c..ff26112ab9a 100644 --- a/test/lisp/emacs-lisp/backtrace-tests.el +++ b/test/lisp/emacs-lisp/backtrace-tests.el | |||
| @@ -349,32 +349,74 @@ digit and replace with #[0-9]." | |||
| 349 | (buffer-string))) | 349 | (buffer-string))) |
| 350 | 350 | ||
| 351 | (ert-deftest backtrace-tests--expand-ellipsis () | 351 | (ert-deftest backtrace-tests--expand-ellipsis () |
| 352 | "Backtrace buffers ellipsify large forms and can expand the ellipses." | 352 | "Backtrace buffers ellipsify large forms as buttons which expand the ellipses." |
| 353 | ;; make a backtrace with an ellipsis | 353 | ;; make a backtrace with an ellipsis |
| 354 | ;; expand the ellipsis | 354 | ;; expand the ellipsis |
| 355 | (ert-with-test-buffer (:name "variables") | 355 | (ert-with-test-buffer (:name "variables") |
| 356 | (let* ((print-level nil) | 356 | (let* ((print-level nil) |
| 357 | (print-length nil) | 357 | (print-length nil) |
| 358 | (arg (let ((long (make-list 100 'a)) | 358 | (backtrace-line-length 300) |
| 359 | (deep '(0 (1 (2 (3 (4 (5 (6 (7 (8 (9)))))))))))) | 359 | (arg (make-list 40 (make-string 10 ?a))) |
| 360 | (setf (nth 1 long) deep) | ||
| 361 | long)) | ||
| 362 | (results (backtrace-tests--result arg))) | 360 | (results (backtrace-tests--result arg))) |
| 363 | (backtrace-tests--make-backtrace arg) | 361 | (backtrace-tests--make-backtrace arg) |
| 364 | (backtrace-print) | 362 | (backtrace-print) |
| 365 | 363 | ||
| 366 | ;; There should be two ellipses. Find and expand them. | 364 | ;; There should be an ellipsis. Find and expand it. |
| 367 | (goto-char (point-min)) | 365 | (goto-char (point-min)) |
| 368 | (search-forward "...") | 366 | (search-forward "...") |
| 369 | (backward-char) | 367 | (backward-char) |
| 370 | (push-button) | 368 | (push-button) |
| 371 | (search-forward "...") | ||
| 372 | (backward-char) | ||
| 373 | (push-button) | ||
| 374 | 369 | ||
| 375 | (should (string= (backtrace-tests--get-substring (point-min) (point-max)) | 370 | (should (string= (backtrace-tests--get-substring (point-min) (point-max)) |
| 376 | results))))) | 371 | results))))) |
| 377 | 372 | ||
| 373 | (ert-deftest backtrace-tests--expand-ellipses () | ||
| 374 | "Backtrace buffers ellipsify large forms and can expand the ellipses." | ||
| 375 | (ert-with-test-buffer (:name "variables") | ||
| 376 | (let* ((print-level nil) | ||
| 377 | (print-length nil) | ||
| 378 | (backtrace-line-length 300) | ||
| 379 | (arg (let ((outer (make-list 40 (make-string 10 ?a))) | ||
| 380 | (nested (make-list 40 (make-string 10 ?b)))) | ||
| 381 | (setf (nth 39 nested) (make-list 40 (make-string 10 ?c))) | ||
| 382 | (setf (nth 39 outer) nested) | ||
| 383 | outer)) | ||
| 384 | (results (backtrace-tests--result-with-locals arg))) | ||
| 385 | |||
| 386 | ;; Make a backtrace with local variables visible. | ||
| 387 | (backtrace-tests--make-backtrace arg) | ||
| 388 | (backtrace-print) | ||
| 389 | (backtrace-toggle-locals '(4)) | ||
| 390 | |||
| 391 | ;; There should be two ellipses. | ||
| 392 | (goto-char (point-min)) | ||
| 393 | (should (search-forward "...")) | ||
| 394 | (should (search-forward "...")) | ||
| 395 | (should-error (search-forward "...")) | ||
| 396 | |||
| 397 | ;; Expanding the last frame without argument should expand both | ||
| 398 | ;; ellipses, but the expansions will contain one ellipsis each. | ||
| 399 | (let ((buffer-len (- (point-max) (point-min)))) | ||
| 400 | (goto-char (point-max)) | ||
| 401 | (backtrace-backward-frame) | ||
| 402 | (backtrace-expand-ellipses) | ||
| 403 | (should (> (- (point-max) (point-min)) buffer-len)) | ||
| 404 | (goto-char (point-min)) | ||
| 405 | (should (search-forward "...")) | ||
| 406 | (should (search-forward "...")) | ||
| 407 | (should-error (search-forward "..."))) | ||
| 408 | |||
| 409 | ;; Expanding with argument should remove all ellipses. | ||
| 410 | (goto-char (point-max)) | ||
| 411 | (backtrace-backward-frame) | ||
| 412 | (backtrace-expand-ellipses '(4)) | ||
| 413 | (goto-char (point-min)) | ||
| 414 | |||
| 415 | (should-error (search-forward "...")) | ||
| 416 | (should (string= (backtrace-tests--get-substring (point-min) (point-max)) | ||
| 417 | results))))) | ||
| 418 | |||
| 419 | |||
| 378 | (ert-deftest backtrace-tests--to-string () | 420 | (ert-deftest backtrace-tests--to-string () |
| 379 | "Backtraces can be produced as strings." | 421 | "Backtraces can be produced as strings." |
| 380 | (let ((frames (ert-with-test-buffer (:name nil) | 422 | (let ((frames (ert-with-test-buffer (:name nil) |
diff --git a/test/lisp/emacs-lisp/cl-print-tests.el b/test/lisp/emacs-lisp/cl-print-tests.el index 7594d2466b5..a469b5526c0 100644 --- a/test/lisp/emacs-lisp/cl-print-tests.el +++ b/test/lisp/emacs-lisp/cl-print-tests.el | |||
| @@ -233,5 +233,41 @@ | |||
| 233 | (let ((print-circle t)) | 233 | (let ((print-circle t)) |
| 234 | (should (equal "(0 . #1=(0 . #1#))" (cl-prin1-to-string x)))))) | 234 | (should (equal "(0 . #1=(0 . #1#))" (cl-prin1-to-string x)))))) |
| 235 | 235 | ||
| 236 | (ert-deftest cl-print-tests-print-to-string-with-limit () | ||
| 237 | (let* ((thing10 (make-list 10 'a)) | ||
| 238 | (thing100 (make-list 100 'a)) | ||
| 239 | (thing10x10 (make-list 10 thing10)) | ||
| 240 | (nested-thing (let ((val 'a)) | ||
| 241 | (dotimes (_i 20) | ||
| 242 | (setq val (list val))) | ||
| 243 | val)) | ||
| 244 | ;; Make a consistent environment for this test. | ||
| 245 | (print-circle nil) | ||
| 246 | (print-level nil) | ||
| 247 | (print-length nil)) | ||
| 248 | |||
| 249 | ;; Print something that fits in the space given. | ||
| 250 | (should (string= (cl-prin1-to-string thing10) | ||
| 251 | (cl-print-to-string-with-limit #'cl-prin1 thing10 100))) | ||
| 252 | |||
| 253 | ;; Print something which needs to be abbreviated and which can be. | ||
| 254 | (should (< (length (cl-print-to-string-with-limit #'cl-prin1 thing100 100)) | ||
| 255 | 100 | ||
| 256 | (length (cl-prin1-to-string thing100)))) | ||
| 257 | |||
| 258 | ;; Print something resistant to easy abbreviation. | ||
| 259 | (should (string= (cl-prin1-to-string thing10x10) | ||
| 260 | (cl-print-to-string-with-limit #'cl-prin1 thing10x10 100))) | ||
| 261 | |||
| 262 | ;; Print something which should be abbreviated even if the limit is large. | ||
| 263 | (should (< (length (cl-print-to-string-with-limit #'cl-prin1 nested-thing 1000)) | ||
| 264 | (length (cl-prin1-to-string nested-thing)))) | ||
| 265 | |||
| 266 | ;; Print with no limits. | ||
| 267 | (dolist (thing (list thing10 thing100 thing10x10 nested-thing)) | ||
| 268 | (let ((rep (cl-prin1-to-string thing))) | ||
| 269 | (should (string= rep (cl-print-to-string-with-limit #'cl-prin1 thing 0))) | ||
| 270 | (should (string= rep (cl-print-to-string-with-limit #'cl-prin1 thing nil))))))) | ||
| 271 | |||
| 236 | 272 | ||
| 237 | ;;; cl-print-tests.el ends here. | 273 | ;;; cl-print-tests.el ends here. |