aboutsummaryrefslogtreecommitdiff
path: root/tests/test-wttrin--display-weather-focus.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-wttrin--display-weather-focus.el')
-rw-r--r--tests/test-wttrin--display-weather-focus.el45
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/test-wttrin--display-weather-focus.el b/tests/test-wttrin--display-weather-focus.el
new file mode 100644
index 0000000..cc08fdd
--- /dev/null
+++ b/tests/test-wttrin--display-weather-focus.el
@@ -0,0 +1,45 @@
+;;; test-wttrin--display-weather-focus.el --- Async render doesn't steal focus -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2024-2026 Craig Jennings
+
+;;; Commentary:
+;; wttrin--display-weather runs from an async callback. If the user moved to
+;; another buffer while the fetch was in flight, rendering the result must not
+;; select *wttr.in* and steal the window.
+
+;;; Code:
+
+(require 'ert)
+(require 'wttrin)
+(require 'testutil-wttrin)
+
+(ert-deftest test-wttrin--display-weather-error-does-not-steal-focus ()
+ "Error: rendering an async response does not select *wttr.in*.
+If the user moved to another buffer while the fetch was in flight, displaying
+the result must leave the selected window on that other buffer."
+ (let ((other (get-buffer-create "*wttrin-other*")))
+ (unwind-protect
+ (progn
+ (set-window-buffer (selected-window) other)
+ (wttrin--display-weather "Paris" "Weather report: paris\n+10 C\n"
+ nil nil nil)
+ (should (eq (window-buffer (selected-window)) other)))
+ (when (get-buffer "*wttr.in*") (kill-buffer "*wttr.in*"))
+ (when (buffer-live-p other) (kill-buffer other)))))
+
+(ert-deftest test-wttrin--display-weather-normal-populates-buffer ()
+ "Normal: rendering still fills *wttr.in* with the weather content."
+ (let ((other (get-buffer-create "*wttrin-other*")))
+ (unwind-protect
+ (progn
+ (set-window-buffer (selected-window) other)
+ (wttrin--display-weather "Paris" "Weather report: paris\n+10 C\n"
+ nil nil nil)
+ (with-current-buffer "*wttr.in*"
+ (should (string-match-p "Weather report: Paris"
+ (buffer-string)))))
+ (when (get-buffer "*wttr.in*") (kill-buffer "*wttr.in*"))
+ (when (buffer-live-p other) (kill-buffer other)))))
+
+(provide 'test-wttrin--display-weather-focus)
+;;; test-wttrin--display-weather-focus.el ends here