aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorF. Jason Park2025-03-10 19:02:48 -0700
committerF. Jason Park2025-03-11 18:28:38 -0700
commit3db65ff5cb3d6f58b83052760b4ce04eb77db1bc (patch)
tree79b9103447914a44968ed56ab6ddd98d9d79c475 /test
parent261205dbb57f77e3426df9f27fcc5429aae48c05 (diff)
downloademacs-3db65ff5cb3d6f58b83052760b4ce04eb77db1bc.tar.gz
emacs-3db65ff5cb3d6f58b83052760b4ce04eb77db1bc.zip
Suppress log module when inserting date stamps in ERC
* lisp/erc/erc-log.el (erc-truncate-buffer-on-save): Use `make-obsolete-variable' because `erc-truncate-buffer-on-save' is an option, not a function. Already mentioned in etc/ERC-NEWS. (erc-logging-enabled): Return nil if `log' appears in the `erc--skip' msg prop. * lisp/erc/erc-stamp.el (erc-stamp--defer-date-insertion-on-post-modify): Add `log' to `erc--skip' msg prop. This tells the log module to defer advancing the `erc-last-saved-position' marker until after stamps have been inserted, thus ensuring they're included in logs when `erc-log-write-after-insert' is non-nil. * test/lisp/erc/erc-scenarios-log.el (erc-scenarios-log--save-buffer-in-logs/truncate-on-save): Suppress warning for `erc-truncate-buffer-on-save'. (erc-scenarios-log--write-after-insert): New test. (Bug#76875)
Diffstat (limited to 'test')
-rw-r--r--test/lisp/erc/erc-scenarios-log.el116
1 files changed, 97 insertions, 19 deletions
diff --git a/test/lisp/erc/erc-scenarios-log.el b/test/lisp/erc/erc-scenarios-log.el
index 1e95e98e073..3c95018dd26 100644
--- a/test/lisp/erc/erc-scenarios-log.el
+++ b/test/lisp/erc/erc-scenarios-log.el
@@ -332,18 +332,78 @@
332 332
333(ert-deftest erc-scenarios-log--save-buffer-in-logs/truncate-on-save () 333(ert-deftest erc-scenarios-log--save-buffer-in-logs/truncate-on-save ()
334 :tags '(:expensive-test) 334 :tags '(:expensive-test)
335 (with-suppressed-warnings ((obsolete erc-truncate-buffer-on-save))
336 (erc-scenarios-common-with-cleanup
337 ((erc-scenarios-common-dialog "base/assoc/bouncer-history")
338 (dumb-server (erc-d-run "localhost" t 'foonet))
339 (tempdir (make-temp-file "erc-tests-log." t nil nil))
340 (erc-log-channels-directory tempdir)
341 (erc-modules (cons 'log erc-modules))
342 (port (process-contact dumb-server :service))
343 (erc-truncate-buffer-on-save t)
344 (logchan (expand-file-name (format "#chan!tester@127.0.0.1:%d.txt"
345 port)
346 tempdir))
347 (erc-server-flood-penalty 0.1)
348 (erc-insert-timestamp-function #'erc-insert-timestamp-left)
349 (expect (erc-d-t-make-expecter)))
350
351 (unless noninteractive
352 (add-hook 'kill-emacs-hook
353 (lambda () (delete-directory tempdir :recursive))))
354
355 (ert-info ("Connect to foonet")
356 (with-current-buffer (erc :server "127.0.0.1"
357 :port port
358 :nick "tester"
359 :password "foonet:changeme"
360 :full-name "tester")
361 (should (string= (buffer-name) (format "127.0.0.1:%d" port)))))
362
363 (with-current-buffer (erc-d-t-wait-for 5 (get-buffer "#chan"))
364 (funcall expect 10 "<someone> [07:04:10] hi everyone")
365 (should-not (file-exists-p logchan))
366 ;; Simulate an M-x erc-save-buffer-in-logs RET
367 (cl-letf (((symbol-function 'called-interactively-p) #'always))
368 (call-interactively #'erc-save-buffer-in-logs))
369 (should (file-exists-p logchan))
370 (funcall expect 10 "<alice> bob: As't please your lordship")
371 (erc-save-buffer-in-logs)
372 ;; Not truncated when called by lisp code.
373 (should (> (buffer-size) 400)))
374
375 (ert-info ("No double entries")
376 (with-temp-buffer
377 (insert-file-contents logchan)
378 (funcall expect 0.1 "hi everyone")
379 (funcall expect -0.1 "hi everyone")
380 (funcall expect 0.1 "Playback Complete")
381 (funcall expect -0.1 "Playback Complete")
382 (funcall expect 10 "<alice> bob: As't")))
383
384 (erc-log-mode -1)
385 (when noninteractive (delete-directory tempdir :recursive)))))
386
387(ert-deftest erc-scenarios-log--write-after-insert ()
388 :tags '(:expensive-test :unstable)
389
335 (erc-scenarios-common-with-cleanup 390 (erc-scenarios-common-with-cleanup
336 ((erc-scenarios-common-dialog "base/assoc/bouncer-history") 391 ((erc-scenarios-common-dialog "base/assoc/bouncer-history")
337 (dumb-server (erc-d-run "localhost" t 'foonet)) 392 (dumb-server (erc-d-run "localhost" t 'foonet))
338 (tempdir (make-temp-file "erc-tests-log." t nil nil)) 393 (tempdir (make-temp-file "erc-tests-log." t nil nil))
339 (erc-log-channels-directory tempdir) 394 (erc-log-channels-directory tempdir)
340 (erc-modules (cons 'log erc-modules)) 395 (erc-modules `(truncate log ,@erc-modules))
396 (erc-max-buffer-size 512)
397 (erc-log-write-after-insert t)
398 (erc-timestamp-format-left "\n[@@DATE__STAMP@@]\n")
399 (erc-truncate-padding-size 512)
341 (port (process-contact dumb-server :service)) 400 (port (process-contact dumb-server :service))
342 (erc-truncate-buffer-on-save t)
343 (logchan (expand-file-name (format "#chan!tester@127.0.0.1:%d.txt" port) 401 (logchan (expand-file-name (format "#chan!tester@127.0.0.1:%d.txt" port)
344 tempdir)) 402 tempdir))
403 (logserv (expand-file-name
404 (format "127.0.0.1:%d!tester@127.0.0.1:%d.txt" port port)
405 tempdir))
345 (erc-server-flood-penalty 0.1) 406 (erc-server-flood-penalty 0.1)
346 (erc-insert-timestamp-function #'erc-insert-timestamp-left)
347 (expect (erc-d-t-make-expecter))) 407 (expect (erc-d-t-make-expecter)))
348 408
349 (unless noninteractive 409 (unless noninteractive
@@ -356,30 +416,48 @@
356 :nick "tester" 416 :nick "tester"
357 :password "foonet:changeme" 417 :password "foonet:changeme"
358 :full-name "tester") 418 :full-name "tester")
359 (should (string= (buffer-name) (format "127.0.0.1:%d" port))))) 419 (should (string= (buffer-name) (format "127.0.0.1:%d" port)))
420 ;; File already exists because `erc-log-write-after-insert' is
421 ;; non-nil.
422 (should (file-exists-p logserv))
423 (should-not (file-exists-p logchan))
424 ;; Verify that truncation actually happens where it should.
425 (funcall expect 10 "*** MAXLIST=beI:60")
426 (should (= (pos-bol) 22))
427 ;; Exactly two + 1 (for date stamp) newlines preserved.
428 (should (string-prefix-p "\n\n\n[" (buffer-string)))))
429
430 (ert-info ("Log file ahead of truncation point")
431 ;; Log contains lines still present in buffer.
432 (with-temp-buffer
433 (insert-file-contents logserv)
434 (funcall expect 10 "@@DATE__STAMP@@")
435 (funcall expect 10 "*** MAXLIST=beI:60")))
360 436
361 (with-current-buffer (erc-d-t-wait-for 5 (get-buffer "#chan")) 437 (with-current-buffer (erc-d-t-wait-for 5 (get-buffer "#chan"))
362 (funcall expect 10 "<someone> [07:04:10] hi everyone") 438 (funcall expect 10 "@@DATE__STAMP@@")
363 (should-not (file-exists-p logchan)) 439 (funcall expect 10 "please your lordship")
364 ;; Simulate an M-x erc-save-buffer-in-logs RET
365 (cl-letf (((symbol-function 'called-interactively-p) #'always))
366 (call-interactively #'erc-save-buffer-in-logs))
367 (should (file-exists-p logchan)) 440 (should (file-exists-p logchan))
368 (funcall expect 10 "<alice> bob: As't please your lordship") 441 (funcall expect -0.1 "[07:04:37] alice: Here," (point-min)))
369 (erc-save-buffer-in-logs)
370 ;; Not truncated when called by lisp code.
371 (should (> (buffer-size) 400)))
372 442
373 (ert-info ("No double entries") 443 (ert-info ("Log ahead of truncation point")
374 (with-temp-buffer 444 (with-temp-buffer
375 (insert-file-contents logchan) 445 (insert-file-contents logchan)
376 (funcall expect 0.1 "hi everyone") 446 (funcall expect 10 "@@DATE__STAMP@@")
377 (funcall expect -0.1 "hi everyone") 447 (funcall expect 1 "You have joined")
378 (funcall expect 0.1 "Playback Complete") 448 ;; No unwanted duplicates.
379 (funcall expect -0.1 "Playback Complete") 449 (funcall expect 1 "<bob> [07:04:37] alice: Here,")
380 (funcall expect 10 "<alice> bob: As't"))) 450 (funcall expect -0.001 "<bob> [07:04:37] alice: Here,")
451 (funcall expect 1 "<alice> [07:04:42] bob: By my troth")
452 (funcall expect -0.001 "<alice> [07:04:42] bob: By my troth")
453 (funcall expect 1 "I will grant it")
454
455 ;; Writes happen instantly because `erc-log-write-after-insert'
456 ;; is non-nil. Compare to `erc-scenarios-log--truncate' above.
457 (funcall expect 1 "loathed enemy")))
381 458
382 (erc-log-mode -1) 459 (erc-log-mode -1)
460 (erc-truncate-mode -1)
383 (when noninteractive (delete-directory tempdir :recursive)))) 461 (when noninteractive (delete-directory tempdir :recursive))))
384 462
385;;; erc-scenarios-log.el ends here 463;;; erc-scenarios-log.el ends here