(require 'ert) (require 'ert-x) (require 'dbus) (defvar dbus-debug nil) (declare-function dbus-get-unique-name "dbusbind.c" (bus)) (defconst dbus--test-enabled-session-bus (and (featurep 'dbusbind) (dbus-ignore-errors (dbus-get-unique-name :session))) "Check, whether we are registered at the session bus.") (defconst dbus--test-service "org.gnu.Emacs.TestDBus" "Test service.") (defconst dbus--test-path "/org/gnu/Emacs/TestDBus" "Test object path.") (defconst dbus--test-interface "org.gnu.Emacs.TestDBus.Interface" "Test interface.") (defvar dbus--test-signal-received nil "Received signal value in `dbus--test-signal-handler'.") (defun dbus--test-signal-handler (&rest args) "Signal handler for `dbus-test*-signal' and `dbus-test08-register-monitor'." (setq dbus--test-signal-received args)) (defun dbus--test-timeout-handler (&rest _ignore) "Timeout handler, reporting a failed test." (ert-fail (format "`%s' timed out" (ert-test-name (ert-running-test))))) (ert-deftest dbus-test05b-register-signal-with-nils () "SERVICE, PATH, INTERFACE and SIGNAL can be ‘nil’. This is interpreted as a wildcard for the respective argument." (skip-unless dbus--test-enabled-session-bus) (dbus-ignore-errors (dbus-unregister-service :session dbus--test-service)) (unwind-protect (let ((member "Member") (handler #'dbus--test-signal-handler) registered) ;; Register signal handler. (should (equal (setq registered (dbus-register-signal :session nil nil nil nil handler)) `((:signal :session nil nil) (nil nil ,handler)))) ;; Send one argument, basic type. (setq dbus--test-signal-received nil) (dbus-send-signal :session dbus--test-service dbus--test-path dbus--test-interface member "foo") (with-timeout (1 (dbus--test-timeout-handler)) (while (null dbus--test-signal-received) (read-event nil nil 0.1))) (should (equal dbus--test-signal-received '("foo"))) ;; Unregister signal. (should (dbus-unregister-object registered)) (should-not (dbus-unregister-object registered))) ;; Cleanup. (dbus-unregister-service :session dbus--test-service)))