aboutsummaryrefslogtreecommitdiff
path: root/tests/test-host-environment--detect-system-timezone.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-21 03:19:08 -0400
committerCraig Jennings <c@cjennings.net>2026-06-21 03:19:08 -0400
commit0aa85dd219f4be8dbf3383661fd2b42370945b87 (patch)
tree0ba557d43691666ad181c6ec3718a7d5e2a0cdee /tests/test-host-environment--detect-system-timezone.el
parent4a8c572ba6a64be997be072b44ef5ff62674d820 (diff)
downloaddotemacs-0aa85dd219f4be8dbf3383661fd2b42370945b87.tar.gz
dotemacs-0aa85dd219f4be8dbf3383661fd2b42370945b87.zip
test: make subr mocks variadic for native-comp, add arity meta-test
Re-enabling native-comp surfaced a suite-wide fragility. When a test redefines a C primitive (or a native-compiled function), native-comp routes native callers through a trampoline that calls the mock with the primitive's maximum arity. A fixed-arity mock narrower than the primitive then throws wrong-number-of-arguments, intermittently, as the eln-cache fills. I swept every arity-narrow subr mock to append &rest _ (188 sites, preserving any named args the body uses), and added tests/test-meta-subr-mock-arity.el, which fails make test on any subr mock too narrow for the primitive's arity. The rule isn't "never mock a subr". The suite mocks message and completing-read freely. It's "a subr mock must accept the primitive's arity." Background, the three failure modes, and the research are in docs/native-comp-subr-mocking.org.
Diffstat (limited to 'tests/test-host-environment--detect-system-timezone.el')
-rw-r--r--tests/test-host-environment--detect-system-timezone.el18
1 files changed, 9 insertions, 9 deletions
diff --git a/tests/test-host-environment--detect-system-timezone.el b/tests/test-host-environment--detect-system-timezone.el
index 1b5e61081..209283d1e 100644
--- a/tests/test-host-environment--detect-system-timezone.el
+++ b/tests/test-host-environment--detect-system-timezone.el
@@ -22,7 +22,7 @@
(cl-letf (((symbol-function 'cj/match-localtime-to-zoneinfo)
(lambda () "America/Los_Angeles"))
((symbol-function 'getenv)
- (lambda (_) (error "TZ should not have been consulted"))))
+ (lambda (_ &rest _) (error "TZ should not have been consulted"))))
(should (equal (cj/detect-system-timezone) "America/Los_Angeles"))))
(ert-deftest test-host-environment-detect-tz-env-var-wins-when-match-nil ()
@@ -30,7 +30,7 @@
(cl-letf (((symbol-function 'cj/match-localtime-to-zoneinfo)
(lambda () nil))
((symbol-function 'getenv)
- (lambda (name) (when (string= name "TZ") "Europe/Berlin"))))
+ (lambda (name &rest _) (when (string= name "TZ") "Europe/Berlin"))))
(should (equal (cj/detect-system-timezone) "Europe/Berlin"))))
(ert-deftest test-host-environment-detect-tz-falls-through-to-etc-timezone ()
@@ -41,7 +41,7 @@ contents primitives."
(cl-letf (((symbol-function 'cj/match-localtime-to-zoneinfo)
(lambda () nil))
((symbol-function 'getenv)
- (lambda (_) nil))
+ (lambda (_ &rest _) nil))
((symbol-function 'file-exists-p)
(lambda (path) (string= path "/etc/timezone")))
((symbol-function 'insert-file-contents)
@@ -55,7 +55,7 @@ contents primitives."
(cl-letf (((symbol-function 'cj/match-localtime-to-zoneinfo)
(lambda () nil))
((symbol-function 'getenv)
- (lambda (_) nil))
+ (lambda (_ &rest _) nil))
((symbol-function 'file-exists-p)
(lambda (path) (string= path "/etc/timezone")))
((symbol-function 'insert-file-contents)
@@ -69,7 +69,7 @@ contents primitives."
(cl-letf (((symbol-function 'cj/match-localtime-to-zoneinfo)
(lambda () nil))
((symbol-function 'getenv)
- (lambda (_) nil))
+ (lambda (_ &rest _) nil))
((symbol-function 'file-exists-p) (lambda (_) nil))
((symbol-function 'file-symlink-p) (lambda (_) nil)))
(should-not (cj/detect-system-timezone))))
@@ -79,24 +79,24 @@ contents primitives."
yields the zone after the /zoneinfo/ segment."
(cl-letf (((symbol-function 'cj/match-localtime-to-zoneinfo)
(lambda () nil))
- ((symbol-function 'getenv) (lambda (_) nil))
+ ((symbol-function 'getenv) (lambda (_ &rest _) nil))
((symbol-function 'file-exists-p) (lambda (_) nil))
((symbol-function 'file-symlink-p)
(lambda (path) (string= path "/etc/localtime")))
((symbol-function 'file-truename)
- (lambda (_) "/usr/share/zoneinfo/America/Denver")))
+ (lambda (_ &rest _) "/usr/share/zoneinfo/America/Denver")))
(should (equal (cj/detect-system-timezone) "America/Denver"))))
(ert-deftest test-host-environment-detect-tz-symlink-without-zoneinfo-is-nil ()
"Error: a symlink target with no /zoneinfo/ segment yields nil."
(cl-letf (((symbol-function 'cj/match-localtime-to-zoneinfo)
(lambda () nil))
- ((symbol-function 'getenv) (lambda (_) nil))
+ ((symbol-function 'getenv) (lambda (_ &rest _) nil))
((symbol-function 'file-exists-p) (lambda (_) nil))
((symbol-function 'file-symlink-p)
(lambda (path) (string= path "/etc/localtime")))
((symbol-function 'file-truename)
- (lambda (_) "/var/lib/elsewhere/localtime")))
+ (lambda (_ &rest _) "/var/lib/elsewhere/localtime")))
(should-not (cj/detect-system-timezone))))
(provide 'test-host-environment--detect-system-timezone)