diff options
Diffstat (limited to 'tests/test-wttrin--center.el')
| -rw-r--r-- | tests/test-wttrin--center.el | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/tests/test-wttrin--center.el b/tests/test-wttrin--center.el new file mode 100644 index 0000000..2da639c --- /dev/null +++ b/tests/test-wttrin--center.el @@ -0,0 +1,109 @@ +;;; test-wttrin--center.el --- Tests for weather-buffer centering -*- lexical-binding: t; -*- + +;; Copyright (C) 2024-2026 Craig Jennings + +;;; Commentary: +;; Unit tests for the block-centering helpers: wttrin--block-width, +;; wttrin--center-margin, and the wttrin--center-buffer applier. + +;;; Code: + +(require 'ert) +(require 'wttrin) +(require 'testutil-wttrin) + +;;; wttrin--block-width — Normal + +(ert-deftest test-wttrin--block-width-normal-returns-widest-line () + "Normal: returns the display width of the widest line." + (should (= 4 (wttrin--block-width "ab\nabcd\nabc")))) + +(ert-deftest test-wttrin--block-width-normal-counts-wide-chars () + "Normal: wide (double-width) characters count as two columns." + ;; "你好" is two double-width chars = 4 columns, wider than the "a" line. + (should (= 4 (wttrin--block-width "a\n你好")))) + +(ert-deftest test-wttrin--block-width-normal-ignores-text-properties () + "Normal: text properties do not affect the measured width." + (should (= 4 (wttrin--block-width (propertize "abcd" 'face 'bold))))) + +;;; wttrin--block-width — Boundary + +(ert-deftest test-wttrin--block-width-boundary-single-line () + "Boundary: a single line returns its own width." + (should (= 5 (wttrin--block-width "hello")))) + +(ert-deftest test-wttrin--block-width-boundary-empty-string-is-zero () + "Boundary: the empty string has width 0." + (should (= 0 (wttrin--block-width "")))) + +(ert-deftest test-wttrin--block-width-boundary-trailing-newline () + "Boundary: a trailing newline's empty final line does not inflate the width." + (should (= 3 (wttrin--block-width "abc\n")))) + +;;; wttrin--block-width — Error + +(ert-deftest test-wttrin--block-width-error-nil-is-zero () + "Error: nil input returns 0 rather than signaling." + (should (= 0 (wttrin--block-width nil)))) + +;;; wttrin--center-margin — Normal + +(ert-deftest test-wttrin--center-margin-normal-centers-block () + "Normal: a block narrower than the window gets half the slack as margin." + (should (= 30 (wttrin--center-margin 20 80)))) + +;;; wttrin--center-margin — Boundary + +(ert-deftest test-wttrin--center-margin-boundary-equal-widths-zero () + "Boundary: a block exactly as wide as the window gets no margin." + (should (= 0 (wttrin--center-margin 40 40)))) + +(ert-deftest test-wttrin--center-margin-boundary-block-wider-than-window-zero () + "Boundary: a block wider than the window gets no margin (never negative)." + (should (= 0 (wttrin--center-margin 50 40)))) + +(ert-deftest test-wttrin--center-margin-boundary-odd-slack-floors () + "Boundary: an odd amount of slack floors to a whole column." + (should (= 30 (wttrin--center-margin 20 81)))) + +(ert-deftest test-wttrin--center-margin-boundary-one-column-slack-zero () + "Boundary: one column of slack floors to 0." + (should (= 0 (wttrin--center-margin 20 21)))) + +;;; wttrin--center-margin — Error + +(ert-deftest test-wttrin--center-margin-error-non-integer-is-zero () + "Error: non-integer inputs return 0 rather than signaling." + (should (= 0 (wttrin--center-margin nil 80))) + (should (= 0 (wttrin--center-margin 20 nil)))) + +;;; wttrin--center-buffer — applier + +(ert-deftest test-wttrin--center-buffer-normal-is-idempotent () + "Normal: centering a displayed buffer is stable — a second call does not move +the margin (the margin-shrinks-the-body feedback is handled)." + (let ((buf (get-buffer-create "*wttrin-center-test*"))) + (unwind-protect + (save-window-excursion + (with-current-buffer buf + (let ((inhibit-read-only t)) + (erase-buffer) + (insert "hi\nthere"))) + (set-window-buffer (selected-window) buf) + (with-current-buffer buf + (wttrin--center-buffer) + (let* ((win (get-buffer-window buf)) + (first (or (car (window-margins win)) 0))) + (wttrin--center-buffer) + (should (= first (or (car (window-margins win)) 0)))))) + (kill-buffer buf)))) + +(ert-deftest test-wttrin--center-buffer-boundary-no-window-is-noop () + "Boundary: with no window for the buffer, centering is a no-op, no error." + (with-temp-buffer + (insert "content") + (should-not (wttrin--center-buffer)))) + +(provide 'test-wttrin--center) +;;; test-wttrin--center.el ends here |
