]> code.delx.au - gnu-emacs/blobdiff - test/automated/dbus-tests.el
* test/automated/data/flymake/Makefile: Comment.
[gnu-emacs] / test / automated / dbus-tests.el
index c9d9c72ec1d480e78d57a22512d3014b8e23f076..b157a365a4c128810feff58a0c9efcbc26c810c3 100644 (file)
 
   ;; Register an own service.
   (should (eq (dbus-register-service bus dbus-service-emacs) :primary-owner))
-  (should (dbus-ping bus dbus-service-emacs 100))
+  (should (member dbus-service-emacs (dbus-list-known-names bus)))
   (should (eq (dbus-register-service bus dbus-service-emacs) :already-owner))
-  (should (dbus-ping bus dbus-service-emacs 100))
+  (should (member dbus-service-emacs (dbus-list-known-names bus)))
 
   ;; Unregister the service.
   (should (eq (dbus-unregister-service bus dbus-service-emacs) :released))
-  (should-not (dbus-ping bus dbus-service-emacs 100))
+  (should-not (member dbus-service-emacs (dbus-list-known-names bus)))
   (should (eq (dbus-unregister-service bus dbus-service-emacs) :non-existent))
-  (should-not (dbus-ping bus dbus-service-emacs 100))
+  (should-not (member dbus-service-emacs (dbus-list-known-names bus)))
 
   ;; `dbus-service-dbus' is reserved for the BUS itself.
   (should-error (dbus-register-service bus dbus-service-dbus))
   (should-error (dbus-unregister-service bus dbus-service-dbus)))
 
 (ert-deftest dbus-test02-register-service-session ()
-  "Check service registration at `:session'."
+  "Check service registration at `:session' bus."
   (skip-unless (and dbus--test-enabled-session-bus
                    (dbus-register-service :session dbus-service-emacs)))
   (dbus--test-register-service :session)
 
   (let ((service "org.freedesktop.Notifications"))
-    (when (dbus-ping :session service 100)
+    (when (member service (dbus-list-known-names :session))
       ;; Cleanup.
       (dbus-ignore-errors (dbus-unregister-service :session service))
 
       (should (eq (dbus-unregister-service :session service) :not-owner)))))
 
 (ert-deftest dbus-test02-register-service-system ()
-  "Check service registration at `:system'."
+  "Check service registration at `:system' bus."
   (skip-unless (and dbus--test-enabled-system-bus
                    (dbus-register-service :system dbus-service-emacs)))
   (dbus--test-register-service :system))
 
+(ert-deftest dbus-test02-register-service-own-bus ()
+  "Check service registration with an own bus.
+This includes initialization and closing the bus."
+  ;; Start bus.
+  (let ((output
+        (ignore-errors
+          (shell-command-to-string "dbus-launch --sh-syntax")))
+       bus pid)
+    (skip-unless (stringp output))
+    (when (string-match "DBUS_SESSION_BUS_ADDRESS='\\(.+\\)';" output)
+      (setq bus (match-string 1 output)))
+    (when (string-match "DBUS_SESSION_BUS_PID=\\([[:digit:]]+\\);" output)
+      (setq pid (match-string 1 output)))
+    (unwind-protect
+       (progn
+         (skip-unless
+          (dbus-ignore-errors
+            (and bus pid
+                 (featurep 'dbusbind)
+                 (dbus-init-bus bus)
+                 (dbus-get-unique-name bus)
+                 (dbus-register-service bus dbus-service-emacs))))
+         ;; Run the test.
+         (dbus--test-register-service bus))
+
+      ;; Save exit.
+      (when pid (call-process "kill" nil nil nil pid)))))
+
+(ert-deftest dbus-test03-peer-interface ()
+  "Check `dbus-interface-peer' methods."
+  (skip-unless
+   (and dbus--test-enabled-session-bus
+       (dbus-register-service :session dbus-service-emacs)
+       ;; "GetMachineId" is not implemented (yet).  When it returns a
+       ;; value, another D-Bus client like dbus-monitor is reacting
+       ;; on `dbus-interface-peer'.  We cannot test then.
+       (not
+        (dbus-ignore-errors
+          (dbus-call-method
+           :session dbus-service-emacs dbus-path-dbus
+           dbus-interface-peer "GetMachineId" :timeout 100)))))
+
+  (should (dbus-ping :session dbus-service-emacs 100))
+  (dbus-unregister-service :session dbus-service-emacs)
+  (should-not (dbus-ping :session dbus-service-emacs 100)))
+
 (defun dbus-test-all (&optional interactive)
   "Run all tests for \\[dbus]."
   (interactive "p")