unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Hugh Daschbach <hugh@ccss.com>
To: Michael Albinus <michael.albinus@gmx.de>
Cc: 43252@debbugs.gnu.org
Subject: bug#43252: 27.1; DBus properties lack type hints or overrides
Date: Tue, 22 Sep 2020 20:30:47 -0700	[thread overview]
Message-ID: <87wo0l8908.fsf@ccss.com> (raw)
In-Reply-To: <87eemt67eg.fsf@gmx.de>

Michael Albinus writes:

> Hugh Daschbach <hugh@ccss.com> writes:
>
> Hi Hugh,
>
> Thanks for this. AFAICS, there's nothing left open for 
> bug#43252; I'd
> like to close it. Is this OK for you?

Yes.  I was about to suggest this.  The issue is resoled.

>> And, of course, let me know what you think should be reworked.
>
> There are only some nits left to comment.

Good.  Nits promote quality and consistency.

>> Add DBus tests to validate property handling.  Includes cycling
>
> We call this beast D-Bus, with a hyphen. Here and everywhere in 
> the
> docstrings and comments.

Good.  Fixed.

>
> We add also a ChangeLog style entry to the commit message, see 
> the git
> log of dbus-tests.el.

I've taken a shot at this.  I'm not sure I got the ChangeLog style
correct.  Let me know if I'm still off the beaten path.

> `dbus-register' (if SELECTOR is `register') or

Fixed.

>> +(ert-deftest dbus-test06-test-property-types ()
>
> The "-test" part of the name seems to be superfluous; I'd call 
> it
> dbus-test06-property-types. (You see, just nitpicks :-)

You say that as if were a bad thing :-).

Fixed.

>> +        (dbus--test-property
>> +         "Dictionary"
>> +         '((:array
>> +            :dict-entry (:string "four" (:variant :string 
>> "value of four"))
>> +            :dict-entry ("five" (:variant :object-path 
>> "/nodex"))
>> +            :dict-entry ("six"  (:variant (:array :byte 4 
>> :byte 5 :byte 6))))
>
> This is one possibility to declare a :dict-entry. The other 
> possibility,
> with the same result, is
>
> '((:array
>    (:dict-entry :string "four" (:variant :string "value of 
>    four"))
>    (:dict-entry "five" (:variant :object-path "/nodex"))
>    (:dict-entry "six"  (:variant (:array :byte 4 :byte 5 :byte 
>    6))))
> ...
>
> Do you mind to test both?

I seem to consistently stumble over compound type syntax.  Thanks 
for
point this out.  Both forms are now tested.

>> +        (should-error                   ; Cannot set property 
>> with :read access
>> +         (equal ...))
>
> The error happens in dbus-set-property. No need to test further 
> for
> equal. So you could do
>
> (should-error                   ; Cannot set property with :read 
> access
>  (dbus-set-property
>   :session dbus--test-service dbus--test-path
>   dbus--test-interface "StringArray"
>   '(:array "seven" "eight" :string "nine")))
>
> Furthermore, you could test which error is raised (should-error 
> allows
> this). Something like
>
> (should-error                   ; Cannot set property with :read 
> access
>  (dbus-set-property
>   :session dbus--test-service dbus--test-path
>   dbus--test-interface "StringArray"
>   '(:array "seven" "eight" :string "nine"))
>  :type 'dbus-error)
>
> Similar approach for your other should-error forms.

Got it.  I think I've fixed each should-error test.

>> +        ;; Test integer overflow
>
> I don't see any integer *overflow* in the following tests.

Yes, really botched that.  I had a byte truncation test that I 
only now
realize isn't treated as an integer.  And that wasn't near the 
comment.
Sigh.

I've added conforming and overflow tests.  The overflow test,
appropriately, error on register.

> OTOH, I don't mind to give this test the :expensive-test 
> tag. Then it
> doesn't matter how long it runs.

Done.

> Given the time it consumes, there might be a need to cache 
> introspection
> data. Either the result of dbus-introspect or 
> dbus--parse-xml-buffer, I
> guess rather the latter. Do you want to investigate it in 
> dbus.el?

Sure.  I'll have a look.  If I find something useful, I'll open 
another
bug.

>> And, of course, let me know what you think should be reworked.
>
> Here we are. I don't repeat general comments I have given the 
> other review.
>
>> +(defun dbus--test-introspect ()
>> +  "Return test introspection string."
>> +  "<?xml version=\"1.0\"?>
>
> ...
>
> Well, this is one approach. Alternatively, we could regard the
> introspection file as test data, which is located in a file 
> called
> .../test/lisp/net/dbus-tests/org.gnu.Emacs.TestDBus.xml. This 
> function
> (the handler for the Introspect method) would read the file, and 
> return
> its contents.

Makes sense.  Done.

>> +(defsubst dbus--test-examine-interface (iface-name
>> +                                        expected-properties
>> +                                        expected-methods
>> +                                        expected-signals
>> +                                        expected-annotations)
>
> This is rather C-style of argument indentation. In ELisp, we do
> something like

Guilty as charged.  I'm still working on developing idiomatic 
elisp.

> (defsubst dbus--test-examine-interface
>   (iface-name expected-properties expected-methods
>    expected-signals expected-annotations)
> ...)
>
>> +  (let ((interface (dbus-introspect-get-interface
>> +                    :session
>> +                    dbus--test-service
>> +                    dbus--test-path
>> +                    iface-name)))
>
> A similar comment applies.

Is:

(let* ((property
          (dbus-introspect-get-property
           :session
           dbus--test-service
           dbus--test-path interface
           property-name))) ...)

preferred over:

(let* ((property
          (dbus-introspect-get-property :session 
          dbus--test-service
           dbus--test-path interface property-name)))
    ...)

If not, I'll take another bite at the apple.

>> +    (should-not (equal expected nil))
>
> This is (should expected)

Yes, I should read what I write.  Fixed.  Thanks.

>> +  (unwind-protect
>> +      ;; dbus-introspect-get-node-names
>> +      (should
>> +       (equal
>> +        (dbus-introspect-get-node-names :session 
>> dbus--test-service dbus--test-path)
>> +        '("node0" "node1")))
> A (progn ... is missing after unwind-protect.

I really should be more careful when I rip out instrumentation. 
Thanks
for catching this.

>> +       '("org.freedesktop.DBus.Deprecated")))
>
> Hmm. Maybe we shall give "org.freedesktop.DBus.Deprecated" a 
> defconst in
> dbus.el?

Done.  ’dbus-annotation-deprecated’.  Let me know if you think 
this should be
‘dbus--annotation-deprecated’ instead.

>> Thanks,
>> Hugh
>
> Best regards, Michael.

In other news, this test:

  (should-error
   (dbus-check-arguments :session dbus--test-service :unix-fd 10)
   :type 'dbus-error)

works for me in batch mode, but not interactive mode.

On GNU/Linux, (dired (format "/proc/%s/fd" (emacs-pid))) indicates 
I
have 14 open file descriptors on a test instance (emacs -q -Q). 
On my
development instance, I've got 27 open file descriptors.

Cheers,
Hugh





  reply	other threads:[~2020-09-23  3:30 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-07  0:54 bug#43252: 27.1; DBus properties lack type hints or overrides Hugh Daschbach
2020-09-07  7:48 ` Michael Albinus
2020-09-07 17:35   ` Hugh Daschbach
2020-09-07 18:00     ` Michael Albinus
2020-09-07 19:18       ` Hugh Daschbach
2020-09-08 14:36         ` Michael Albinus
2020-09-09  4:10           ` Hugh Daschbach
2020-09-09  4:25             ` Hugh Daschbach
2020-09-09 13:25             ` Michael Albinus
2020-09-09 16:12               ` Hugh Daschbach
2020-09-09 17:43                 ` Michael Albinus
     [not found]                 ` <874ko6979w.fsf@gmx.de>
     [not found]                   ` <87v9gm9x9i.fsf@ccss.com>
2020-09-10 14:59                     ` Michael Albinus
2020-09-10 16:57                       ` Michael Albinus
2020-09-10 19:09                         ` Hugh Daschbach
2020-09-11  8:46                           ` Michael Albinus
2020-09-10 22:53                         ` Hugh Daschbach
2020-09-11  9:57                           ` Michael Albinus
2020-09-11 14:19                           ` Michael Albinus
2020-09-15  4:05                             ` Hugh Daschbach
2020-09-16 12:47                               ` Michael Albinus
2020-09-16 22:23                                 ` Hugh Daschbach
2020-09-17 12:58                                   ` Michael Albinus
2020-09-17 18:42                                     ` Hugh Daschbach
2020-09-18  6:28                                       ` Hugh Daschbach
2020-09-18  9:55                                         ` Michael Albinus
2020-09-18 13:42                                         ` Michael Albinus
2020-09-18 15:50                                           ` Michael Albinus
2020-09-18  9:36                                       ` Michael Albinus
2020-09-19  3:32                                         ` Hugh Daschbach
2020-09-20 15:05                                           ` Michael Albinus
2020-09-21 11:50                                             ` Michael Albinus
2020-09-22  3:48                                               ` Hugh Daschbach
2020-09-22 16:09                                                 ` Michael Albinus
2020-09-22 17:36                                                 ` Michael Albinus
2020-09-23  3:30                                                   ` Hugh Daschbach [this message]
2020-09-23  3:34                                                     ` Hugh Daschbach
2020-09-23  7:44                                                     ` Michael Albinus
2020-09-23 17:32                                                     ` Michael Albinus
2020-09-24  3:02                                                       ` Hugh Daschbach
2020-09-24  8:48                                                         ` Michael Albinus
2020-09-25  4:16                                                           ` Hugh Daschbach
2020-09-26  1:27                                                             ` Hugh Daschbach
2020-09-26  9:51                                                               ` Michael Albinus
2020-09-28  3:00                                                                 ` Hugh Daschbach
2020-09-28 12:55                                                                   ` Michael Albinus
2020-09-28 23:17                                                                     ` Hugh Daschbach
2020-09-29 12:22                                                                       ` Michael Albinus
2020-09-29 21:51                                                                         ` Hugh Daschbach
2020-09-30  9:34                                                                           ` Michael Albinus
2020-09-30 10:42                                                                             ` Michael Albinus
2020-09-30 16:39                                                                               ` Hugh Daschbach
2020-09-10  8:00 ` bug#43252: Fwd: " Michael Albinus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87wo0l8908.fsf@ccss.com \
    --to=hugh@ccss.com \
    --cc=43252@debbugs.gnu.org \
    --cc=michael.albinus@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).