File: debase-gen--test.el

package info (click to toggle)
emacs-debase 0.7%2Bgit.20231216.b7b007acca%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 128 kB
  • sloc: lisp: 724; makefile: 5
file content (339 lines) | stat: -rw-r--r-- 17,929 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
;;; debase-gen--test.el --- Tests for DEBASE-GEN     -*- lexical-binding: t; -*-

;; Copyright (C) 2021  Ian Eure

;; Author: Ian Eure <ian@retrospec.tv>
;; Keywords: extensions

;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <https://www.gnu.org/licenses/>.

;;; Commentary:

;; Tests.

;;; Code:

(require 'ert)
(require 'debase-gen)

(defconst debase-gen--test--xml '(node nil "\n  "
                                       (interface
                                        ((name . "org.freedesktop.DBus.Properties"))
                                        "\n    "
                                        (method
                                         ((name . "Get"))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "interface_name")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "property_name")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "v")
                                           (name . "value")
                                           (direction . "out")))
                                         "\n    ")
                                        "\n    "
                                        (method
                                         ((name . "GetAll"))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "interface_name")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "a{sv}")
                                           (name . "properties")
                                           (direction . "out")))
                                         "\n    ")
                                        "\n    "
                                        (method
                                         ((name . "Set"))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "interface_name")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "property_name")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "v")
                                           (name . "value")
                                           (direction . "in")))
                                         "\n    ")
                                        "\n    "
                                        (signal
                                         ((name . "PropertiesChanged"))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "interface_name")))
                                         "\n      "
                                         (arg
                                          ((type . "a{sv}")
                                           (name . "changed_properties")))
                                         "\n      "
                                         (arg
                                          ((type . "as")
                                           (name . "invalidated_properties")))
                                         "\n    ")
                                        "\n  ")
                                       "\n  "
                                       (interface
                                        ((name . "org.freedesktop.DBus.Introspectable"))
                                        "\n    "
                                        (method
                                         ((name . "Introspect"))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "xml_data")
                                           (direction . "out")))
                                         "\n    ")
                                        "\n  ")
                                       "\n  "
                                       (interface
                                        ((name . "org.freedesktop.DBus.Peer"))
                                        "\n    "
                                        (method
                                         ((name . "Ping")))
                                        "\n    "
                                        (method
                                         ((name . "GetMachineId"))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "machine_uuid")
                                           (direction . "out")))
                                         "\n    ")
                                        "\n  ")
                                       "\n  "
                                       (interface
                                        ((name . "org.freedesktop.UDisks2.Manager"))
                                        "\n    "
                                        (method
                                         ((name . "CanFormat"))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "type")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "(bs)")
                                           (name . "available")
                                           (direction . "out")))
                                         "\n    ")
                                        "\n    "
                                        (method
                                         ((name . "CanResize"))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "type")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "(bts)")
                                           (name . "available")
                                           (direction . "out")))
                                         "\n    ")
                                        "\n    "
                                        (method
                                         ((name . "CanCheck"))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "type")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "(bs)")
                                           (name . "available")
                                           (direction . "out")))
                                         "\n    ")
                                        "\n    "
                                        (method
                                         ((name . "CanRepair"))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "type")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "(bs)")
                                           (name . "available")
                                           (direction . "out")))
                                         "\n    ")
                                        "\n    "
                                        (method
                                         ((name . "LoopSetup"))
                                         "\n      "
                                         (arg
                                          ((type . "h")
                                           (name . "fd")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "a{sv}")
                                           (name . "options")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "o")
                                           (name . "resulting_device")
                                           (direction . "out")))
                                         "\n    ")
                                        "\n    "
                                        (method
                                         ((name . "MDRaidCreate"))
                                         "\n      "
                                         (arg
                                          ((type . "ao")
                                           (name . "blocks")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "level")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "s")
                                           (name . "name")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "t")
                                           (name . "chunk")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "a{sv}")
                                           (name . "options")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "o")
                                           (name . "resulting_array")
                                           (direction . "out")))
                                         "\n    ")
                                        "\n    "
                                        (method
                                         ((name . "EnableModules"))
                                         "\n      "
                                         (arg
                                          ((type . "b")
                                           (name . "enable")
                                           (direction . "in")))
                                         "\n    ")
                                        "\n    "
                                        (method
                                         ((name . "GetBlockDevices"))
                                         "\n      "
                                         (arg
                                          ((type . "a{sv}")
                                           (name . "options")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "ao")
                                           (name . "block_objects")
                                           (direction . "out")))
                                         "\n    ")
                                        "\n    "
                                        (method
                                         ((name . "ResolveDevice"))
                                         "\n      "
                                         (arg
                                          ((type . "a{sv}")
                                           (name . "devspec")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "a{sv}")
                                           (name . "options")
                                           (direction . "in")))
                                         "\n      "
                                         (arg
                                          ((type . "ao")
                                           (name . "devices")
                                           (direction . "out")))
                                         "\n    ")
                                        "\n    "
                                        (property
                                         ((type . "s")
                                          (name . "Version")
                                          (access . "read")))
                                        "\n    "
                                        (property
                                         ((type . "as")
                                          (name . "SupportedFilesystems")
                                          (access . "read")))
                                        "\n  ")
                                       "\n"))

(ert-deftest debase-gen-method--test ()
  (let* ((cgen (debase-gen-class :class-name 'foo :interface "org.freedesktop.UDisks2.Manager"))
         (method '(method
                   ((name . "Get"))
                   "\n      "
                   (arg
                    ((type . "s")
                     (name . "interface_name")
                     (direction . "in")))
                   "\n      "
                   (arg
                    ((type . "s")
                     (name . "property_name")
                     (direction . "in")))
                   "\n      "
                   (arg
                    ((type . "v")
                     (name . "value")
                     (direction . "out")))
                   "\n    "))
         (gen (debase-gen-method :class-generator cgen :xml method)))

    (should (equal (debase-gen-method-->arglist gen)
                   '(interface_name property_name)))

    (should (equal (debase-gen-code gen)
                   '(cl-defmethod Get ((obj foo) interface_name property_name)
                      "Return the results of calling D-Bus interface \"org.freedesktop.UDisks2.Manager\" method \"Get\" on a `DEBASE-OBJECT' OBJ."
                      (dbus-call-method this "Get" interface_name property_name))))))

(ert-deftest debase-test--property-readable? ()
  (should (debase--property-readable? '(property ((type . "ao") (name . "Devices") (access . "read")))))
  (should (debase--property-readable? '(property ((type . "ao") (name . "Devices") (access . "readwrite")))))
  (should (null (debase--property-readable? '(property ((type . "ao") (name . "Devices") (access . "write")))))))

(ert-deftest debase-test--property-writeable? ()
  (should (null (debase--property-writeable? '(property ((type . "ao") (name . "Devices") (access . "read"))))))
  (should (eq t (debase--property-writeable? '(property ((type . "ao") (name . "Devices") (access . "write"))))))
  (should (eq t (debase--property-writeable? '(property ((type . "ao") (name . "Devices") (access . "readwrite")))))))

(provide 'debase-gen--test)
;;; debase-gen--test.el ends here