From e8ea03ecc8c1a2499046b34f785bca4f871531df Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 28 Jun 2026 03:20:12 -0400 Subject: feat: fit and center the weather buffer in its window Centering and auto-fit share one resize hook (wttrin--update-layout on window-configuration-change-hook). Centering is always on. The block centers via the window's left margin, measured in pixels from the buffer font so it stays exact under a font-height remap. It centers against the available width including the current margin, so the margin shrinking the body can't make the value oscillate. Auto-fit is opt-in (wttrin-auto-fit-font, off by default). When on, the font is sized so the whole buffer fits top to bottom (down to the row past the footer's last menu item) without the widest line truncating, clamped to wttrin-font-height-min and -max. The pixel-exact measurement needs window-font-width and window-font-height, so the minimum is now Emacs 25.1. --- tests/test-wttrin--fit-font-height.el | 64 +++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 tests/test-wttrin--fit-font-height.el (limited to 'tests/test-wttrin--fit-font-height.el') diff --git a/tests/test-wttrin--fit-font-height.el b/tests/test-wttrin--fit-font-height.el new file mode 100644 index 0000000..2952fc6 --- /dev/null +++ b/tests/test-wttrin--fit-font-height.el @@ -0,0 +1,64 @@ +;;; test-wttrin--fit-font-height.el --- Tests for font auto-fit math -*- lexical-binding: t; -*- + +;; Copyright (C) 2024-2026 Craig Jennings + +;;; Commentary: +;; Unit tests for wttrin--fit-font-height, the pure helper that scales the +;; weather font so the fixed-width block fills the window, clamped to a floor +;; and cap. + +;;; Code: + +(require 'ert) +(require 'wttrin) +(require 'testutil-wttrin) + +;;; Normal + +(ert-deftest test-wttrin--fit-font-height-normal-exact-fit-keeps-height () + "Normal: a block that already fills the width keeps the current height. +50 cols x 12 px = 600 px = avail, ratio 1.0, so 130 stays 130." + (should (= 130 (wttrin--fit-font-height 50 600 12 130 100 200)))) + +(ert-deftest test-wttrin--fit-font-height-normal-wider-window-grows-height () + "Normal: a wider window grows the height proportionally. +avail 900 / block-px 600 = 1.5, so 130 -> 195, within [100,200]." + (should (= 195 (wttrin--fit-font-height 50 900 12 130 100 200)))) + +(ert-deftest test-wttrin--fit-font-height-normal-narrower-window-shrinks-height () + "Normal: a narrower window shrinks the height proportionally. +avail 480 / block-px 600 = 0.8, so 130 -> 104, within [100,200]." + (should (= 104 (wttrin--fit-font-height 50 480 12 130 100 200)))) + +;;; Boundary + +(ert-deftest test-wttrin--fit-font-height-boundary-clamps-to-cap () + "Boundary: a very wide window clamps the height to the cap." + ;; avail 1800 / 600 = 3 -> 390 -> capped at 200. + (should (= 200 (wttrin--fit-font-height 50 1800 12 130 100 200)))) + +(ert-deftest test-wttrin--fit-font-height-boundary-clamps-to-floor () + "Boundary: a very narrow window clamps the height to the floor." + ;; avail 120 / 600 = 0.2 -> 26 -> floored at 100. + (should (= 100 (wttrin--fit-font-height 50 120 12 130 100 200)))) + +(ert-deftest test-wttrin--fit-font-height-boundary-floor-equals-cap () + "Boundary: when floor equals cap, that value is forced." + (should (= 150 (wttrin--fit-font-height 50 900 12 130 150 150)))) + +;;; Error + +(ert-deftest test-wttrin--fit-font-height-error-zero-block-returns-clamped-current () + "Error: a zero block width returns the current height, clamped." + (should (= 130 (wttrin--fit-font-height 0 900 12 130 100 200)))) + +(ert-deftest test-wttrin--fit-font-height-error-zero-char-px-returns-clamped-current () + "Error: a zero per-character width returns the current height, clamped." + (should (= 130 (wttrin--fit-font-height 50 900 0 130 100 200)))) + +(ert-deftest test-wttrin--fit-font-height-error-nil-avail-returns-clamped-current () + "Error: a nil available width returns the current height, clamped." + (should (= 130 (wttrin--fit-font-height 50 nil 12 130 100 200)))) + +(provide 'test-wttrin--fit-font-height) +;;; test-wttrin--fit-font-height.el ends here -- cgit v1.2.3