DarwinAwardWinner/with-simulated-input

Tests fail with GNU Emacs 27.1 from Debian

dogsleg opened this issue · 7 comments

Hi,

Not sure why, but I'm getting the following errors while running with-simulated-imput tests against GNU Emacs 27.1 from the Debian archive:

$ LC_ALL=C.UTF-8 buttercup -L .
Loading /etc/emacs/site-start.d/00debian.el (source)...
Loading /etc/emacs/site-start.d/50asymptote.el (source)...
Loading /etc/emacs/site-start.d/50auctex.el (source)...
Loading /usr/share/emacs/site-lisp/auctex.el (source)...
Loading /usr/share/emacs/site-lisp/preview-latex.el (source)...
Loading /etc/emacs/site-start.d/50autoconf.el (source)...
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...
Loading /etc/emacs/site-start.d/50latex-cjk-common.el (source)...
Loading /usr/share/emacs/site-lisp/latex-cjk-common/cjk-enc.el (source)...
Loading /etc/emacs/site-start.d/50latex-cjk-thai.el (source)...
Loading /etc/emacs/site-start.d/50latexmk.el (source)...
Loading /etc/emacs/site-start.d/50texlive-lang-english.el (source)...
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello" "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '(104 101 108 108 111 10)
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '((insert "hello") (exit-minibuffer))
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '((insert "hello") "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello" (exit-minibuffer))
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello SPC" (insert "world") "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello SPC" (insert "wor") 108 100 10)
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list "hello" "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list (list 'insert my-input) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (concat "hello" " " "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list my-key-sequence my-lisp-form "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '((execute-kbd-macro my-key-sequence) (eval my-lisp-form) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list `(execute-kbd-macro ,my-key-sequence) `(eval ,my-lisp-form) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: `((execute-kbd-macro ,my-key-sequence) (eval ,my-lisp-form) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: `((insert ,my-input) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list greeting "SPC" (list 'insert target) "RET")
Warning (with-simulated-input-1): Non-string forms in KEYS are evaluated for side effects only. Variables in KEYS have no effect: undesired-input
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: 'nil
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: 'nil
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '(nil)
Warning (with-simulated-input): BODY is empty; KEYS will be ignored.
Warning (with-simulated-input): BODY consists of only constant expressions; KEYS will be ignored.
Warning (with-simulated-input): BODY consists of only constant expressions; KEYS will be ignored.
Warning (with-simulated-input): BODY does not read input; KEYS will be ignored.
Running 49 specs.

The `with-simulated-input' library
  should be able to load (109.12ms)
  should apply the idle time advice when loading (14.33ms)
  should be able to unload (75.19ms)
  should remove the idle time advice when unloading (28.12ms)

`wsi-get-unbound-key'
  should find an unbound key (162.52ms)
  should report an error if it fails to find an unbound key (26.29ms)
  should find a new key when its previously chosen key becomes bound (298.90ms)

`with-simulated-input'
  should work when KEYS
    is a literal string (58.16ms)
    is a literal characterChoose your character: 
    is a literal character (38.27ms)
    is a quoted list of literal strings (deprecated)  Expected #'display-warning :to-have-been-called  (58.64ms)
    is a quoted list of characters (deprecated)  Expected #'display-warning :to-have-been-called  (58.68ms)
    is a quoted list of lisp forms (deprecated)  Expected #'display-warning :to-have-been-called  (59.14ms)
    is a quoted list of strings, characters, and lisp forms (deprecated)  Expected #'display-warning :to-have-been-called  (39.37ms)
    is an un-quoted list of literal strings (59.36ms)
    is a quoted list of characters (58.64ms)
    is an un-quoted list of lisp forms (58.48ms)
    is an un-quoted list of strings and lisp forms (213.56ms)
    is a variable containing any of the aboveChoose your character: 
    is a variable containing any of the above (369.75ms)
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
    is an arbitrary expression evaluating to any of the above (deprecated)  Expected #'display-warning :to-have-been-called  (59.03ms)
    is evaluated at run time in a lexical environment  Expected #'display-warning :to-have-been-called  (39.11ms)
    is evaluated at run time in a non-lexical environment (58.41ms)
  should throw an error when KEYS
    is an invalid literal expression (0.55ms)
    is a variable with an invalid value (0.48ms)
  should correctly propagate an error when it
    is thrown directly from expressions in KEYS (58.96ms)
    is caused indirectly by the inputs in KEYS (60.11ms)
    is thrown by BODY (97.06ms)
    is caused by C-g in KEYS (58.49ms)
  should ignore the return value of non-literal expressions in KEYS  Expected #'display-warning :to-have-been-called  (39.43ms)
  should throw an error if the input is incomplete (59.14ms)
  should throw an error if the input is empty and BODY reads input  Expected #'display-warning :to-have-been-called  (214.70ms)
  should not throw an error if the input is empty unless BODY reads input  Expected #'display-warning :to-have-been-called  (211.80ms)
  should discard any extra input after BODY has completed (116.73ms)
  should allow multiple functions in BODY to read input (39.76ms)
  should allow an empty/constant BODY, with a warning  Expected #'display-warning :to-have-been-called  (0.22ms)
  should work when `overriding-terminal-local-map' is bound (234.24ms)
  used with `completing-read'
    should work with unambiguous tab completion (58.64ms)
    should work with ambiguous tab completion (38.77ms)
    should fail to exit with ambiguous completion and `require-match' (59.19ms)
  should not reproduce past issues:
    Issue #4: simulating input should not switch buffers (58.37ms)
    Issue #6: `with-simulated-input' should work in byte-compiled code (59.84ms)

`wsi-simulate-idle-time'
  should run idle timers (0.14ms)
  should not run idle timers with longer times even when called multiple times (0.11ms)
  should run idle timers added by other idle timers (0.12ms)
  should run idle timers added by other idle timers when the new timer is in the past (0.20ms)
  should run all idle timers when called with SECS = nil (0.14ms)
  should simulate the appropriate value for `(current-idle-time)' (0.26ms)
  should not interfere with the normal operation of `current-idle-time' (0.30ms)
  should actually wait the specified time when `actually-wait' is non-nil (52.23ms)
  used within `with-simulated-input'
    should allow idle timers to trigger during simulated input (63.79ms)

========================================
`with-simulated-input' should work when KEYS is a quoted list of literal strings (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is a quoted list of characters (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is a quoted list of lisp forms (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is a quoted list of strings, characters, and lisp forms (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is an arbitrary expression evaluating to any of the above (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is evaluated at run time in a lexical environment

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should ignore the return value of non-literal expressions in KEYS

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should throw an error if the input is empty and BODY reads input

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should not throw an error if the input is empty unless BODY reads input

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should allow an empty/constant BODY, with a warning

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

Ran 49 specs, 10 failed, in 3.62s.

Weird. These test failures all appear to be failures to record a call to display-warning, so I suspect some kind of weird interaction between the test harness and Debian's copy of 27.1.

I tried testing against GNU Emacs 28.1 from the Debian unstable repository and got almost the same result:

$ LC_ALL=C.UTF-8 buttercup -L .
Loading /etc/emacs/site-start.d/00debian.el (source)...
Loading /etc/emacs/site-start.d/20apel.el (source)...
Loading /etc/emacs/site-start.d/50asymptote.el (source)...
Loading /etc/emacs/site-start.d/50auctex.el (source)...
Loading /usr/share/emacs/site-lisp/auctex.el (source)...
Loading /usr/share/emacs/site-lisp/preview-latex.el (source)...
Loading /etc/emacs/site-start.d/50autoconf.el (source)...
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell (native compiled elisp)...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...
Loading /etc/emacs/site-start.d/50latex-cjk-common.el (source)...
Loading /usr/share/emacs/site-lisp/latex-cjk-common/cjk-enc.el (source)...
Loading /etc/emacs/site-start.d/50latex-cjk-thai.el (source)...
Loading /etc/emacs/site-start.d/50latexmk.el (source)...
Loading /etc/emacs/site-start.d/50libperl-critic-perl.el (source)...
Loading /etc/emacs/site-start.d/50pylint.el (source)...
Loading /etc/emacs/site-start.d/50texlive-lang-english.el (source)...
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello" "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '(104 101 108 108 111 10)
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '((insert "hello") (exit-minibuffer))
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '((insert "hello") "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello" (exit-minibuffer))
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello SPC" (insert "world") "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello SPC" (insert "wor") 108 100 10)
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list "hello" "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list (list 'insert my-input) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (concat "hello" " " "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list my-key-sequence my-lisp-form "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '((execute-kbd-macro my-key-sequence) (eval my-lisp-form) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list `(execute-kbd-macro ,my-key-sequence) `(eval ,my-lisp-form) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: `((execute-kbd-macro ,my-key-sequence) (eval ,my-lisp-form) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: `((insert ,my-input) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list greeting "SPC" (list 'insert target) "RET")
Warning (with-simulated-input-1): Non-string forms in KEYS are evaluated for side effects only. Variables in KEYS have no effect: undesired-input
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: 'nil
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: 'nil
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '(nil)
Warning (with-simulated-input): BODY is empty; KEYS will be ignored.
Warning (with-simulated-input): BODY consists of only constant expressions; KEYS will be ignored.
Warning (with-simulated-input): BODY consists of only constant expressions; KEYS will be ignored.
Warning (with-simulated-input): BODY does not read input; KEYS will be ignored.
Running 49 specs.

The `with-simulated-input' library
  should be able to load (34.56ms)
  should apply the idle time advice when loading (9.74ms)
  should be able to unload (65.90ms)
  should remove the idle time advice when unloading (20.79ms)

`wsi-get-unbound-key'
  should find an unbound key (185.64ms)
  should report an error if it fails to find an unbound key (32.19ms)
  should find a new key when its previously chosen key becomes bound (494.10ms)

`with-simulated-input'
  should work when KEYS
    is a literal string (72.30ms)
    is a literal characterChoose your character: 
    is a literal character (71.07ms)
    is a quoted list of literal strings (deprecated)  Expected #'display-warning :to-have-been-called  (70.80ms)
    is a quoted list of characters (deprecated)  Expected #'display-warning :to-have-been-called  (72.66ms)
    is a quoted list of lisp forms (deprecated)  Expected #'display-warning :to-have-been-called  (45.79ms)
    is a quoted list of strings, characters, and lisp forms (deprecated)  Expected #'display-warning :to-have-been-called  (71.53ms)
    is an un-quoted list of literal strings (71.72ms)
    is a quoted list of characters (70.86ms)
    is an un-quoted list of lisp forms (71.52ms)
    is an un-quoted list of strings and lisp forms (285.13ms)
    is a variable containing any of the aboveChoose your character: 
    is a variable containing any of the above (473.45ms)
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
    is an arbitrary expression evaluating to any of the above (deprecated)  Expected #'display-warning :to-have-been-called  (71.78ms)
    is evaluated at run time in a lexical environment  Expected #'display-warning :to-have-been-called  (73.90ms)
    is evaluated at run time in a non-lexical environment (71.26ms)
  should throw an error when KEYS
    is an invalid literal expression (0.36ms)
    is a variable with an invalid value (0.32ms)
  should correctly propagate an error when it
    is thrown directly from expressions in KEYS (71.45ms)
    is caused indirectly by the inputs in KEYS (46.57ms)
    is thrown by BODY (140.71ms)
    is caused by C-g in KEYS  FAILED (71.08ms)
  should ignore the return value of non-literal expressions in KEYS  Expected #'display-warning :to-have-been-called  (71.27ms)
  should throw an error if the input is incomplete (74.04ms)
  should throw an error if the input is empty and BODY reads input  Expected #'display-warning :to-have-been-called  (284.26ms)
  should not throw an error if the input is empty unless BODY reads input  Expected #'display-warning :to-have-been-called  (254.37ms)
  should discard any extra input after BODY has completed (143.52ms)
  should allow multiple functions in BODY to read input (71.62ms)
  should allow an empty/constant BODY, with a warning  Expected #'display-warning :to-have-been-called  (0.25ms)
  should work when `overriding-terminal-local-map' is bound (322.93ms)
  used with `completing-read'
    should work with unambiguous tab completion (71.26ms)
    should work with ambiguous tab completion (73.61ms)
    should fail to exit with ambiguous completion and `require-match' (72.84ms)
  should not reproduce past issues:
    Issue #4: simulating input should not switch buffers (71.57ms)
    Issue #6: `with-simulated-input' should work in byte-compiled code (71.45ms)

`wsi-simulate-idle-time'
  should run idle timers (0.30ms)
  should not run idle timers with longer times even when called multiple times (0.11ms)
  should run idle timers added by other idle timers (0.14ms)
  should run idle timers added by other idle timers when the new timer is in the past (0.20ms)
  should run all idle timers when called with SECS = nil (0.13ms)
  should simulate the appropriate value for `(current-idle-time)' (0.25ms)
  should not interfere with the normal operation of `current-idle-time' (0.20ms)
  should actually wait the specified time when `actually-wait' is non-nil (52.61ms)
  used within `with-simulated-input'
    should allow idle timers to trigger during simulated input (86.72ms)

========================================
`with-simulated-input' should work when KEYS is a quoted list of literal strings (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is a quoted list of characters (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is a quoted list of lisp forms (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is a quoted list of strings, characters, and lisp forms (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is an arbitrary expression evaluating to any of the above (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is evaluated at run time in a lexical environment

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should correctly propagate an error when it is caused by C-g in KEYS

Traceback (most recent call last):
  (condition-case nil (with-simulated-input-1 #'(lambda nil (read-string "En...
  with-simulated-input-1((closure (my-non-lexical-var my-collection t) nil (...
  (let* ((next-action-key (wsi-get-unbound-key)) (result-sym (make-symbol "r...
  (catch result-sym (let ((err (catch error-sym (execute-kbd-macro (kbd (map...
  (let ((err (catch error-sym (execute-kbd-macro (kbd (mapconcat #'identity ...
  signal(error ("Aborted evaluation of BODY after reaching end of KEYS witho...
error: (error "Aborted evaluation of BODY after reaching end of KEYS without returning")

========================================
`with-simulated-input' should ignore the return value of non-literal expressions in KEYS

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should throw an error if the input is empty and BODY reads input

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should not throw an error if the input is empty unless BODY reads input

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should allow an empty/constant BODY, with a warning

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

Ran 49 specs, 11 failed, in 4.55s.

Debugger entered--Lisp error: (error "")
  error("")
  buttercup--run-suites((#s(buttercup-suite :description "The `with-simulated-input'..." :parent nil :status passed :failure-description nil :failure-stack nil :time-started (25356 34025 7478 148000) :time-ended (25356 34025 190103 799000) :children (... ... ... ...) :before-each (...) :after-each (...) :before-all nil :after-all nil) #s(buttercup-suite :description "`wsi-get-unbound-key'" :parent nil :status passed :failure-description nil :failure-stack nil :time-started (25356 34025 190113 173000) :time-ended (25356 34025 902237 222000) :children (... ... ...) :before-each nil :after-each nil :before-all nil :after-all nil) #s(buttercup-suite :description "`with-simulated-input'" :parent nil :status passed :failure-description nil :failure-stack nil :time-started (25356 34025 902244 845000) :time-ended (25356 34029 412115 871000) :children (... ... ... ... ... ... ... ... ... ... ... ... ...) :before-each (...) :after-each nil :before-all nil :after-all nil) #s(buttercup-suite :description "`wsi-simulate-idle-time'" :parent nil :status passed :failure-description nil :failure-stack nil :time-started (25356 34029 412122 991000) :time-ended (25356 34029 553153 736000) :children (... ... ... ... ... ... ... ... ...) :before-each (...) :after-each (...) :before-all nil :after-all nil)) nil)
  buttercup-run()
  buttercup-run-discover()
  command-line-1(("-L" "." "-l" "buttercup" "-f" "buttercup-run-discover" "--"))
  command-line()
  normal-top-level()

Is it possible that Debian is applying some patches to Emacs that change how warnings work, such that display-warning is no longer used? Unfortunately I don't have any easy way to debug this since I don't run Debian. Can you try randomly running one of the offending tests and see if it produces a warning?

Here are all the patches applied in Debian. I don't see any changes to display-warning there. And 00debian.el loaded at the startup just sets the default mail server and news server.

I installed with-simulated-input 3.0 and tried to run the following:

(with-simulated-input "Is SPC anybody SPC listening? RET")
(with-simulated-input "Is SPC anybody SPC listening? RET" t)
(with-simulated-input "Is SPC anybody SPC listening? RET" 1 2 3)
(let ((x (+ 1 2))) (with-simulated-input "Is SPC anybody SPC listening? RET" x))

I've got these warnings:

Warning (with-simulated-input): BODY is empty; KEYS will be ignored. Disable showing Disable logging
Warning (with-simulated-input): BODY consists of only constant expressions; KEYS will be ignored. Disable showing Disable logging
Warning (with-simulated-input): BODY consists of only constant expressions; KEYS will be ignored. Disable showing Disable logging
Warning (with-simulated-input): BODY does not read input; KEYS will be ignored. Disable showing Disable logging

Hi, is this still a problem? Based on your latest comment, the latest version does not seem to throw any errors?

Hi, with GNU Emacs 28.2 I'm still getting some errors related to #'display-warning:

$ buttercup -L .
Loading /etc/emacs/site-start.d/00debian.el (source)...
Loading /etc/emacs/site-start.d/20apel.el (source)...
Loading /etc/emacs/site-start.d/50asymptote.el (source)...
Loading /etc/emacs/site-start.d/50auctex.el (source)...
Loading /usr/share/emacs/site-lisp/auctex.el (source)...
Loading /usr/share/emacs/site-lisp/preview-latex.el (source)...
Loading /etc/emacs/site-start.d/50autoconf.el (source)...
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell (native compiled elisp)...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...
Loading /etc/emacs/site-start.d/50latex-cjk-common.el (source)...
Loading /usr/share/emacs/site-lisp/latex-cjk-common/cjk-enc.el (source)...
Loading /etc/emacs/site-start.d/50latex-cjk-thai.el (source)...
Loading /etc/emacs/site-start.d/50latexmk.el (source)...
Loading /etc/emacs/site-start.d/50libperl-critic-perl.el (source)...
Loading /etc/emacs/site-start.d/50pylint.el (source)...
Loading /etc/emacs/site-start.d/50texlive-lang-english.el (source)...
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello" "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '(104 101 108 108 111 10)
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '((insert "hello") (exit-minibuffer))
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '((insert "hello") "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello" (exit-minibuffer))
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello SPC" (insert "world") "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello SPC" (insert "wor") 108 100 10)
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list "hello" "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list (list 'insert my-input) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (concat "hello" " " "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list my-key-sequence my-lisp-form "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '((execute-kbd-macro my-key-sequence) (eval my-lisp-form) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list `(execute-kbd-macro ,my-key-sequence) `(eval ,my-lisp-form) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: `((execute-kbd-macro ,my-key-sequence) (eval ,my-lisp-form) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: `((insert ,my-input) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list greeting "SPC" (list 'insert target) "RET")
Warning (with-simulated-input-1): Non-string forms in KEYS are evaluated for side effects only. Variables in KEYS have no effect: undesired-input
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: 'nil
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: 'nil
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '(nil)
Warning (with-simulated-input): BODY is empty; KEYS will be ignored.
Warning (with-simulated-input): BODY consists of only constant expressions; KEYS will be ignored.
Warning (with-simulated-input): BODY consists of only constant expressions; KEYS will be ignored.
Warning (with-simulated-input): BODY does not read input; KEYS will be ignored.
Running 49 specs.

The `with-simulated-input' library
  should be able to load (93.76ms)
  should apply the idle time advice when loading (9.54ms)
  should be able to unload (64.69ms)
  should remove the idle time advice when unloading (19.63ms)

`wsi-get-unbound-key'
  should find an unbound key (213.33ms)
  should report an error if it fails to find an unbound key (5.58ms)
  should find a new key when its previously chosen key becomes bound (483.13ms)

`with-simulated-input'
  should work when KEYS
    is a literal string (69.90ms)
    is a literal characterChoose your character: 
    is a literal character (70.56ms)
    is a quoted list of literal strings (deprecated)  Expected #'display-warning :to-have-been-called  (69.84ms)
    is a quoted list of characters (deprecated)  Expected #'display-warning :to-have-been-called  (69.39ms)
    is a quoted list of lisp forms (deprecated)  Expected #'display-warning :to-have-been-called  (69.22ms)
    is a quoted list of strings, characters, and lisp forms (deprecated)  Expected #'display-warning :to-have-been-called  (69.61ms)
    is an un-quoted list of literal strings (69.87ms)
    is a quoted list of characters (69.99ms)
    is an un-quoted list of lisp forms (44.79ms)
    is an un-quoted list of strings and lisp forms (277.92ms)
    is a variable containing any of the aboveChoose your character: 
    is a variable containing any of the above (1.80s)
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
    is an arbitrary expression evaluating to any of the above (deprecated)  Expected #'display-warning :to-have-been-called  (69.89ms)
    is evaluated at run time in a lexical environment  Expected #'display-warning :to-have-been-called  (69.84ms)
    is evaluated at run time in a non-lexical environment (71.52ms)
  should throw an error when KEYS
    is an invalid literal expression (0.36ms)
    is a variable with an invalid value (0.31ms)
  should correctly propagate an error when it
    is thrown directly from expressions in KEYS (69.51ms)
    is caused indirectly by the inputs in KEYS (70.59ms)
    is thrown by BODY (112.75ms)
    is caused by C-g in KEYS  FAILED (70.25ms)
  should ignore the return value of non-literal expressions in KEYS  Expected #'display-warning :to-have-been-called  (70.40ms)
  should throw an error if the input is incomplete (69.88ms)
  should throw an error if the input is empty and BODY reads input  Expected #'display-warning :to-have-been-called  (276.17ms)
  should not throw an error if the input is empty unless BODY reads input  Expected #'display-warning :to-have-been-called  (250.08ms)
  should discard any extra input after BODY has completed (138.99ms)
  should allow multiple functions in BODY to read input (70.40ms)
  should allow an empty/constant BODY, with a warning  Expected #'display-warning :to-have-been-called  (0.21ms)
  should work when `overriding-terminal-local-map' is bound (346.23ms)
  used with `completing-read'
    should work with unambiguous tab completion (70.30ms)
    should work with ambiguous tab completion (75.02ms)
    should fail to exit with ambiguous completion and `require-match' (71.31ms)
  should not reproduce past issues:
    Issue #4: simulating input should not switch buffers (69.75ms)
    Issue #6: `with-simulated-input' should work in byte-compiled code (70.49ms)

`wsi-simulate-idle-time'
  should run idle timers (0.23ms)
  should not run idle timers with longer times even when called multiple times (0.11ms)
  should run idle timers added by other idle timers (0.12ms)
  should run idle timers added by other idle timers when the new timer is in the past (0.18ms)
  should run all idle timers when called with SECS = nil (0.12ms)
  should simulate the appropriate value for `(current-idle-time)' (0.23ms)
  should not interfere with the normal operation of `current-idle-time' (0.19ms)
  should actually wait the specified time when `actually-wait' is non-nil (1.34s)
  used within `with-simulated-input'
    should allow idle timers to trigger during simulated input (70.06ms)

========================================
`with-simulated-input' should work when KEYS is a quoted list of literal strings (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is a quoted list of characters (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is a quoted list of lisp forms (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is a quoted list of strings, characters, and lisp forms (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is an arbitrary expression evaluating to any of the above (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is evaluated at run time in a lexical environment

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should correctly propagate an error when it is caused by C-g in KEYS

Traceback (most recent call last):
  (condition-case nil (with-simulated-input-1 #'(lambda nil (read-string "En...
  with-simulated-input-1((closure (my-non-lexical-var my-collection t) nil (...
  (let* ((next-action-key (wsi-get-unbound-key)) (result-sym (make-symbol "r...
  (catch result-sym (let ((err (catch error-sym (execute-kbd-macro (kbd (map...
  (let ((err (catch error-sym (execute-kbd-macro (kbd (mapconcat #'identity ...
  signal(error ("Aborted evaluation of BODY after reaching end of KEYS witho...
error: (error "Aborted evaluation of BODY after reaching end of KEYS without returning")

========================================
`with-simulated-input' should ignore the return value of non-literal expressions in KEYS

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should throw an error if the input is empty and BODY reads input

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should not throw an error if the input is empty unless BODY reads input

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should allow an empty/constant BODY, with a warning

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

Ran 49 specs, 11 failed, in 7.10s.
buttercup-run failed: ""
15:42:02-dogsleg@shakva:~/freedom/packaging/elpa/with-simulated-input-el/with-simulated-input$ emacs -v
15:42:40-dogsleg@shakva:~/freedom/packaging/elpa/with-simulated-input-el/with-simulated-input$ apt-cache show emacs
15:42:47-dogsleg@shakva:~/freedom/packaging/elpa/with-simulated-input-el/with-simulated-input$ buttercup -L .
Loading /etc/emacs/site-start.d/00debian.el (source)...
Loading /etc/emacs/site-start.d/20apel.el (source)...
Loading /etc/emacs/site-start.d/50asymptote.el (source)...
Loading /etc/emacs/site-start.d/50auctex.el (source)...
Loading /usr/share/emacs/site-lisp/auctex.el (source)...
Loading /usr/share/emacs/site-lisp/preview-latex.el (source)...
Loading /etc/emacs/site-start.d/50autoconf.el (source)...
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell (native compiled elisp)...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...
Loading /etc/emacs/site-start.d/50latex-cjk-common.el (source)...
Loading /usr/share/emacs/site-lisp/latex-cjk-common/cjk-enc.el (source)...
Loading /etc/emacs/site-start.d/50latex-cjk-thai.el (source)...
Loading /etc/emacs/site-start.d/50latexmk.el (source)...
Loading /etc/emacs/site-start.d/50libperl-critic-perl.el (source)...
Loading /etc/emacs/site-start.d/50pylint.el (source)...
Loading /etc/emacs/site-start.d/50texlive-lang-english.el (source)...
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello" "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '(104 101 108 108 111 10)
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '((insert "hello") (exit-minibuffer))
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '((insert "hello") "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello" (exit-minibuffer))
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello SPC" (insert "world") "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '("hello SPC" (insert "wor") 108 100 10)
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list "hello" "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list (list 'insert my-input) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (concat "hello" " " "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list my-key-sequence my-lisp-form "RET")
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '((execute-kbd-macro my-key-sequence) (eval my-lisp-form) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list `(execute-kbd-macro ,my-key-sequence) `(eval ,my-lisp-form) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: `((execute-kbd-macro ,my-key-sequence) (eval ,my-lisp-form) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: `((insert ,my-input) "RET")
Warning (with-simulated-input): Passing a function call as KEYS is deprecated and will not be supported in future releases: (list greeting "SPC" (list 'insert target) "RET")
Warning (with-simulated-input-1): Non-string forms in KEYS are evaluated for side effects only. Variables in KEYS have no effect: undesired-input
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: 'nil
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: 'nil
Warning (with-simulated-input): Passing a quoted list as KEYS is deprecated and will not be supported in future releases: '(nil)
Warning (with-simulated-input): BODY is empty; KEYS will be ignored.
Warning (with-simulated-input): BODY consists of only constant expressions; KEYS will be ignored.
Warning (with-simulated-input): BODY consists of only constant expressions; KEYS will be ignored.
Warning (with-simulated-input): BODY does not read input; KEYS will be ignored.
Running 49 specs.

The `with-simulated-input' library
  should be able to load (61.95ms)
  should apply the idle time advice when loading (9.64ms)
  should be able to unload (63.58ms)
  should remove the idle time advice when unloading (19.37ms)

`wsi-get-unbound-key'
  should find an unbound key (210.70ms)
  should report an error if it fails to find an unbound key (5.53ms)
  should find a new key when its previously chosen key becomes bound (480.68ms)

`with-simulated-input'
  should work when KEYS
    is a literal string (69.68ms)
    is a literal characterChoose your character: 
    is a literal character (68.27ms)
    is a quoted list of literal strings (deprecated)  Expected #'display-warning :to-have-been-called  (69.69ms)
    is a quoted list of characters (deprecated)  Expected #'display-warning :to-have-been-called  (68.77ms)
    is a quoted list of lisp forms (deprecated)  Expected #'display-warning :to-have-been-called  (70.73ms)
    is a quoted list of strings, characters, and lisp forms (deprecated)  Expected #'display-warning :to-have-been-called  (73.39ms)
    is an un-quoted list of literal strings (69.82ms)
    is a quoted list of characters (69.41ms)
    is an un-quoted list of lisp forms (44.22ms)
    is an un-quoted list of strings and lisp forms (274.55ms)
    is a variable containing any of the aboveChoose your character: 
    is a variable containing any of the above (459.50ms)
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
Warning (with-simulated-input): Passing a variable with a list value as KEYS is deprecated and will not be supported in future releases.
    is an arbitrary expression evaluating to any of the above (deprecated)  Expected #'display-warning :to-have-been-called  (73.64ms)
    is evaluated at run time in a lexical environment  Expected #'display-warning :to-have-been-called  (70.64ms)
    is evaluated at run time in a non-lexical environment (69.13ms)
  should throw an error when KEYS
    is an invalid literal expression (0.34ms)
    is a variable with an invalid value (0.34ms)
  should correctly propagate an error when it
    is thrown directly from expressions in KEYS (69.41ms)
    is caused indirectly by the inputs in KEYS (70.64ms)
    is thrown by BODY (137.42ms)
    is caused by C-g in KEYS  FAILED (69.32ms)
  should ignore the return value of non-literal expressions in KEYS  Expected #'display-warning :to-have-been-called  (44.43ms)
  should throw an error if the input is incomplete (69.67ms)
  should throw an error if the input is empty and BODY reads input  Expected #'display-warning :to-have-been-called  (274.20ms)
  should not throw an error if the input is empty unless BODY reads input  Expected #'display-warning :to-have-been-called  (272.98ms)
  should discard any extra input after BODY has completed (112.99ms)
  should allow multiple functions in BODY to read input (71.21ms)
  should allow an empty/constant BODY, with a warning  Expected #'display-warning :to-have-been-called  (0.23ms)
  should work when `overriding-terminal-local-map' is bound (341.06ms)
  used with `completing-read'
    should work with unambiguous tab completion (69.68ms)
    should work with ambiguous tab completion (70.19ms)
    should fail to exit with ambiguous completion and `require-match' (70.84ms)
  should not reproduce past issues:
    Issue #4: simulating input should not switch buffers (44.10ms)
    Issue #6: `with-simulated-input' should work in byte-compiled code (70.09ms)

`wsi-simulate-idle-time'
  should run idle timers (0.24ms)
  should not run idle timers with longer times even when called multiple times (0.11ms)
  should run idle timers added by other idle timers (0.12ms)
  should run idle timers added by other idle timers when the new timer is in the past (0.18ms)
  should run all idle timers when called with SECS = nil (0.12ms)
  should simulate the appropriate value for `(current-idle-time)' (0.23ms)
  should not interfere with the normal operation of `current-idle-time' (0.19ms)
  should actually wait the specified time when `actually-wait' is non-nil (52.24ms)
  used within `with-simulated-input'
    should allow idle timers to trigger during simulated input (69.94ms)

========================================
`with-simulated-input' should work when KEYS is a quoted list of literal strings (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is a quoted list of characters (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is a quoted list of lisp forms (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is a quoted list of strings, characters, and lisp forms (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is an arbitrary expression evaluating to any of the above (deprecated)

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should work when KEYS is evaluated at run time in a lexical environment

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should correctly propagate an error when it is caused by C-g in KEYS

Traceback (most recent call last):
  (condition-case nil (with-simulated-input-1 #'(lambda nil (read-string "En...
  with-simulated-input-1((closure (my-non-lexical-var my-collection t) nil (...
  (let* ((next-action-key (wsi-get-unbound-key)) (result-sym (make-symbol "r...
  (catch result-sym (let ((err (catch error-sym (execute-kbd-macro (kbd (map...
  (let ((err (catch error-sym (execute-kbd-macro (kbd (mapconcat #'identity ...
  signal(error ("Aborted evaluation of BODY after reaching end of KEYS witho...
error: (error "Aborted evaluation of BODY after reaching end of KEYS without returning")

========================================
`with-simulated-input' should ignore the return value of non-literal expressions in KEYS

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should throw an error if the input is empty and BODY reads input

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should not throw an error if the input is empty unless BODY reads input

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

========================================
`with-simulated-input' should allow an empty/constant BODY, with a warning

Traceback (most recent call last):
  buttercup-fail("Expected %S %S %s" #'display-warning :to-have-been-called "")
  signal(buttercup-failed "Expected #'display-warning :to-have-been-called ")
FAILED: Expected #'display-warning :to-have-been-called 

Ran 49 specs, 11 failed, in 4.42s.
buttercup-run failed: ""