;;; test-pearl-surface.el --- Tests for surfacing the active buffer -*- lexical-binding: t; -*- ;; Copyright (C) 2026 Craig Jennings ;; Author: Craig Jennings ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Tests for `pearl--surface-buffer': bring the active org buffer to a window ;; after a command updates it, gated on `pearl-surface-buffer', focus-following ;; gated on `pearl-surface-select-window', and skipped when the buffer is dead ;; or already visible. ;;; Code: (require 'test-bootstrap (expand-file-name "test-bootstrap.el")) (require 'cl-lib) (ert-deftest test-pearl-surface-buffer-disabled-is-noop () "With `pearl-surface-buffer' nil, nothing is displayed." (let ((pearl-surface-buffer nil) (shown nil)) (cl-letf (((symbol-function 'display-buffer) (lambda (&rest _) (setq shown t))) ((symbol-function 'pop-to-buffer) (lambda (&rest _) (setq shown t)))) (with-temp-buffer (pearl--surface-buffer (current-buffer)) (should-not shown))))) (ert-deftest test-pearl-surface-buffer-shows-when-buried () "A live, un-displayed buffer is shown via `display-buffer' by default." (let ((pearl-surface-buffer t) (pearl-surface-select-window nil) (shown nil)) (cl-letf (((symbol-function 'get-buffer-window) (lambda (&rest _) nil)) ((symbol-function 'display-buffer) (lambda (b &rest _) (setq shown b))) ((symbol-function 'pop-to-buffer) (lambda (&rest _) (setq shown 'pop)))) (with-temp-buffer (pearl--surface-buffer (current-buffer)) (should (eq shown (current-buffer))))))) (ert-deftest test-pearl-surface-buffer-skips-when-already-shown () "A buffer already visible in some window is left alone." (let ((pearl-surface-buffer t) (shown nil)) (cl-letf (((symbol-function 'get-buffer-window) (lambda (&rest _) 'a-window)) ((symbol-function 'display-buffer) (lambda (&rest _) (setq shown t))) ((symbol-function 'pop-to-buffer) (lambda (&rest _) (setq shown t)))) (with-temp-buffer (pearl--surface-buffer (current-buffer)) (should-not shown))))) (ert-deftest test-pearl-surface-buffer-select-window-uses-pop-to-buffer () "With `pearl-surface-select-window' non-nil, focus follows via `pop-to-buffer'." (let ((pearl-surface-buffer t) (pearl-surface-select-window t) (how nil)) (cl-letf (((symbol-function 'get-buffer-window) (lambda (&rest _) nil)) ((symbol-function 'display-buffer) (lambda (&rest _) (setq how 'display))) ((symbol-function 'pop-to-buffer) (lambda (&rest _) (setq how 'pop)))) (with-temp-buffer (pearl--surface-buffer (current-buffer)) (should (eq how 'pop)))))) (ert-deftest test-pearl-surface-buffer-dead-buffer-is-noop () "A killed buffer is never surfaced." (let ((pearl-surface-buffer t) (shown nil) (buf (generate-new-buffer "x"))) (kill-buffer buf) (cl-letf (((symbol-function 'display-buffer) (lambda (&rest _) (setq shown t))) ((symbol-function 'pop-to-buffer) (lambda (&rest _) (setq shown t)))) (pearl--surface-buffer buf) (should-not shown)))) (provide 'test-pearl-surface) ;;; test-pearl-surface.el ends here