t_ppath.c revision 1.2 1 1.2 msaitoh /* $Id: t_ppath.c,v 1.2 2020/05/14 08:34:18 msaitoh Exp $ */
2 1.1 dyoung
3 1.1 dyoung /* Copyright (c) 2010 David Young. All rights reserved. */
4 1.1 dyoung
5 1.1 dyoung #include <sys/cdefs.h>
6 1.2 msaitoh __RCSID("$Id: t_ppath.c,v 1.2 2020/05/14 08:34:18 msaitoh Exp $");
7 1.1 dyoung
8 1.1 dyoung #include <assert.h>
9 1.1 dyoung #include <atf-c.h>
10 1.1 dyoung #include <errno.h>
11 1.1 dyoung #include <stdlib.h>
12 1.1 dyoung #include <string.h>
13 1.1 dyoung
14 1.1 dyoung #include <ppath/ppath.h>
15 1.1 dyoung #include "personnel.h"
16 1.1 dyoung
17 1.1 dyoung void test_ppath_extant_inc(void);
18 1.1 dyoung void test_ppath_extant_dec(void);
19 1.1 dyoung void test_ppath_component_extant_inc(void);
20 1.1 dyoung void test_ppath_component_extant_dec(void);
21 1.1 dyoung
22 1.1 dyoung __strong_alias(ppath_extant_inc, test_ppath_extant_inc);
23 1.1 dyoung __strong_alias(ppath_extant_dec, test_ppath_extant_dec);
24 1.1 dyoung __strong_alias(ppath_component_extant_inc, test_ppath_component_extant_inc);
25 1.1 dyoung __strong_alias(ppath_component_extant_dec, test_ppath_component_extant_dec);
26 1.1 dyoung
27 1.1 dyoung static uint64_t nppath = 0, nppath_component = 0;
28 1.1 dyoung
29 1.1 dyoung static bool
30 1.1 dyoung dictionary_equals(prop_dictionary_t ld, prop_dictionary_t rd)
31 1.1 dyoung {
32 1.1 dyoung bool eq;
33 1.1 dyoung char *lt, *rt;
34 1.1 dyoung
35 1.1 dyoung lt = prop_dictionary_externalize(ld);
36 1.1 dyoung rt = prop_dictionary_externalize(rd);
37 1.1 dyoung
38 1.1 dyoung assert(lt != NULL && rt != NULL);
39 1.1 dyoung
40 1.1 dyoung eq = (strcmp(lt, rt) == 0);
41 1.1 dyoung
42 1.1 dyoung free(lt);
43 1.1 dyoung free(rt);
44 1.1 dyoung
45 1.1 dyoung return eq;
46 1.1 dyoung }
47 1.1 dyoung
48 1.1 dyoung static void
49 1.1 dyoung assert_no_ppath_extant(void)
50 1.1 dyoung {
51 1.1 dyoung ATF_CHECK_EQ(nppath, 0);
52 1.1 dyoung }
53 1.1 dyoung
54 1.1 dyoung static void
55 1.1 dyoung assert_no_ppath_component_extant(void)
56 1.1 dyoung {
57 1.1 dyoung ATF_CHECK_EQ(nppath_component, 0);
58 1.1 dyoung }
59 1.1 dyoung
60 1.1 dyoung void
61 1.1 dyoung test_ppath_extant_inc(void)
62 1.1 dyoung {
63 1.1 dyoung if (++nppath == 0)
64 1.1 dyoung atf_tc_fail("count of extant paths overflowed");
65 1.1 dyoung }
66 1.1 dyoung
67 1.1 dyoung void
68 1.1 dyoung test_ppath_extant_dec(void)
69 1.1 dyoung {
70 1.1 dyoung if (nppath-- == 0)
71 1.1 dyoung atf_tc_fail("count of extant path underflowed");
72 1.1 dyoung }
73 1.1 dyoung
74 1.1 dyoung void
75 1.1 dyoung test_ppath_component_extant_inc(void)
76 1.1 dyoung {
77 1.1 dyoung if (++nppath_component == 0)
78 1.1 dyoung atf_tc_fail("count of extant path components overflowed");
79 1.1 dyoung }
80 1.1 dyoung
81 1.1 dyoung void
82 1.1 dyoung test_ppath_component_extant_dec(void)
83 1.1 dyoung {
84 1.1 dyoung if (nppath_component-- == 0)
85 1.1 dyoung atf_tc_fail("count of extant path components underflowed");
86 1.1 dyoung }
87 1.1 dyoung
88 1.1 dyoung ATF_TC(push_until_full);
89 1.1 dyoung
90 1.1 dyoung ATF_TC_HEAD(push_until_full, tc)
91 1.1 dyoung {
92 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_push() returns error "
93 1.1 dyoung "after ppath_t reaches maximum length");
94 1.1 dyoung }
95 1.1 dyoung
96 1.1 dyoung ATF_TC_BODY(push_until_full, tc)
97 1.1 dyoung {
98 1.1 dyoung ppath_t *p, *rp;
99 1.1 dyoung ppath_component_t *pc;
100 1.1 dyoung int i;
101 1.1 dyoung
102 1.1 dyoung assert_no_ppath_extant();
103 1.1 dyoung assert_no_ppath_component_extant();
104 1.1 dyoung
105 1.1 dyoung if ((p = ppath_create()) == NULL)
106 1.1 dyoung atf_tc_fail("ppath_create failed");
107 1.1 dyoung
108 1.1 dyoung if ((pc = ppath_idx(0)) == NULL)
109 1.1 dyoung atf_tc_fail("ppath_idx failed");
110 1.1 dyoung
111 1.1 dyoung for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
112 1.1 dyoung rp = ppath_push(p, pc);
113 1.1 dyoung ATF_CHECK_EQ(rp, p);
114 1.1 dyoung }
115 1.1 dyoung
116 1.1 dyoung rp = ppath_push(p, pc);
117 1.1 dyoung ATF_CHECK_EQ(rp, NULL);
118 1.1 dyoung
119 1.1 dyoung rp = ppath_push(p, pc);
120 1.1 dyoung ATF_CHECK_EQ(rp, NULL);
121 1.1 dyoung
122 1.1 dyoung ppath_component_release(pc);
123 1.1 dyoung ppath_release(p);
124 1.1 dyoung
125 1.1 dyoung assert_no_ppath_extant();
126 1.1 dyoung assert_no_ppath_component_extant();
127 1.1 dyoung }
128 1.1 dyoung
129 1.1 dyoung ATF_TC(pop_until_empty);
130 1.1 dyoung ATF_TC_HEAD(pop_until_empty, tc)
131 1.1 dyoung {
132 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_pop() returns error "
133 1.1 dyoung "after ppath_t is empty");
134 1.1 dyoung }
135 1.1 dyoung
136 1.1 dyoung ATF_TC_BODY(pop_until_empty, tc)
137 1.1 dyoung {
138 1.1 dyoung ppath_t *p, *rp;
139 1.1 dyoung ppath_component_t *pc, *rpc;
140 1.1 dyoung int i;
141 1.1 dyoung
142 1.1 dyoung assert_no_ppath_extant();
143 1.1 dyoung assert_no_ppath_component_extant();
144 1.1 dyoung
145 1.1 dyoung if ((p = ppath_create()) == NULL)
146 1.1 dyoung atf_tc_fail("ppath_create failed");
147 1.1 dyoung
148 1.1 dyoung if ((pc = ppath_idx(0)) == NULL)
149 1.1 dyoung atf_tc_fail("ppath_idx failed");
150 1.1 dyoung
151 1.1 dyoung for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
152 1.1 dyoung rp = ppath_push(p, pc);
153 1.1 dyoung ATF_CHECK_EQ(rp, p);
154 1.1 dyoung }
155 1.1 dyoung
156 1.1 dyoung for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
157 1.1 dyoung rp = ppath_pop(p, &rpc);
158 1.1 dyoung ATF_CHECK_EQ(rp, p);
159 1.1 dyoung ATF_CHECK_EQ(rpc, pc);
160 1.1 dyoung ppath_component_release(rpc);
161 1.1 dyoung }
162 1.1 dyoung
163 1.1 dyoung rp = ppath_pop(p, &rpc);
164 1.1 dyoung ATF_CHECK_EQ(rp, NULL);
165 1.1 dyoung rp = ppath_pop(p, &rpc);
166 1.1 dyoung ATF_CHECK_EQ(rp, NULL);
167 1.1 dyoung
168 1.1 dyoung ppath_component_release(pc);
169 1.1 dyoung ppath_release(p);
170 1.1 dyoung
171 1.1 dyoung assert_no_ppath_extant();
172 1.1 dyoung assert_no_ppath_component_extant();
173 1.1 dyoung }
174 1.1 dyoung
175 1.1 dyoung ATF_TC(length);
176 1.1 dyoung
177 1.1 dyoung ATF_TC_HEAD(length, tc)
178 1.1 dyoung {
179 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check that ppath_push() "
180 1.1 dyoung "and ppath_pop() affect ppath_length() correctly");
181 1.1 dyoung }
182 1.1 dyoung
183 1.1 dyoung ATF_TC_BODY(length, tc)
184 1.1 dyoung {
185 1.1 dyoung ppath_t *p, *rp;
186 1.1 dyoung ppath_component_t *pc;
187 1.1 dyoung unsigned int i, len;
188 1.1 dyoung
189 1.1 dyoung assert_no_ppath_extant();
190 1.1 dyoung assert_no_ppath_component_extant();
191 1.1 dyoung
192 1.1 dyoung if ((p = ppath_create()) == NULL)
193 1.1 dyoung atf_tc_fail("ppath_create failed");
194 1.1 dyoung
195 1.1 dyoung if ((pc = ppath_idx(0)) == NULL)
196 1.1 dyoung atf_tc_fail("ppath_idx failed");
197 1.1 dyoung
198 1.1 dyoung for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
199 1.1 dyoung len = ppath_length(p);
200 1.1 dyoung ATF_CHECK_EQ(len, i);
201 1.1 dyoung rp = ppath_push(p, pc);
202 1.1 dyoung ATF_CHECK_EQ(rp, p);
203 1.1 dyoung }
204 1.1 dyoung
205 1.1 dyoung for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
206 1.1 dyoung len = ppath_length(p);
207 1.1 dyoung ATF_CHECK_EQ(len, PPATH_MAX_COMPONENTS - i);
208 1.1 dyoung rp = ppath_pop(p, NULL);
209 1.1 dyoung ATF_CHECK_EQ(rp, p);
210 1.1 dyoung }
211 1.1 dyoung ppath_component_release(pc);
212 1.1 dyoung ppath_release(p);
213 1.1 dyoung
214 1.1 dyoung assert_no_ppath_extant();
215 1.1 dyoung assert_no_ppath_component_extant();
216 1.1 dyoung }
217 1.1 dyoung
218 1.1 dyoung ATF_TC(component_at);
219 1.1 dyoung
220 1.1 dyoung ATF_TC_HEAD(component_at, tc)
221 1.1 dyoung {
222 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check that ppath_component_at() "
223 1.1 dyoung "returns the expected component");
224 1.1 dyoung }
225 1.1 dyoung
226 1.1 dyoung ATF_TC_BODY(component_at, tc)
227 1.1 dyoung {
228 1.1 dyoung ppath_t *p, *rp;
229 1.1 dyoung ppath_component_t *pc;
230 1.1 dyoung unsigned int i;
231 1.1 dyoung
232 1.1 dyoung assert_no_ppath_extant();
233 1.1 dyoung assert_no_ppath_component_extant();
234 1.1 dyoung
235 1.1 dyoung if ((p = ppath_create()) == NULL)
236 1.1 dyoung atf_tc_fail("ppath_create failed");
237 1.1 dyoung
238 1.1 dyoung for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
239 1.1 dyoung if ((pc = ppath_idx(i)) == NULL)
240 1.1 dyoung atf_tc_fail("ppath_idx failed");
241 1.1 dyoung rp = ppath_push(p, pc);
242 1.1 dyoung ppath_component_release(pc);
243 1.1 dyoung ATF_CHECK_EQ(rp, p);
244 1.1 dyoung }
245 1.1 dyoung
246 1.1 dyoung for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
247 1.1 dyoung pc = ppath_component_at(p, i);
248 1.1 dyoung ATF_CHECK_EQ(ppath_component_idx(pc), (int)i);
249 1.1 dyoung ppath_component_release(pc);
250 1.1 dyoung }
251 1.1 dyoung ppath_release(p);
252 1.1 dyoung
253 1.1 dyoung assert_no_ppath_extant();
254 1.1 dyoung assert_no_ppath_component_extant();
255 1.1 dyoung }
256 1.1 dyoung
257 1.1 dyoung ATF_TC(get_idx_key);
258 1.1 dyoung
259 1.1 dyoung ATF_TC_HEAD(get_idx_key, tc)
260 1.1 dyoung {
261 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check that ppath_component_idx() "
262 1.1 dyoung "and ppath_component_key() return -1 and NULL, respectively, if "
263 1.1 dyoung "the component is a key or an index, respectively.");
264 1.1 dyoung }
265 1.1 dyoung
266 1.1 dyoung ATF_TC_BODY(get_idx_key, tc)
267 1.1 dyoung {
268 1.1 dyoung ppath_component_t *idx, *key;
269 1.1 dyoung
270 1.1 dyoung assert_no_ppath_extant();
271 1.1 dyoung assert_no_ppath_component_extant();
272 1.1 dyoung
273 1.1 dyoung if ((idx = ppath_idx(0)) == NULL)
274 1.1 dyoung atf_tc_fail("ppath_idx failed");
275 1.1 dyoung if ((key = ppath_key("key")) == NULL)
276 1.1 dyoung atf_tc_fail("ppath_idx failed");
277 1.1 dyoung
278 1.1 dyoung ATF_CHECK_EQ(ppath_component_key(idx), NULL);
279 1.1 dyoung ATF_CHECK_EQ(ppath_component_idx(key), -1);
280 1.1 dyoung
281 1.1 dyoung ppath_component_release(idx);
282 1.1 dyoung ppath_component_release(key);
283 1.1 dyoung
284 1.1 dyoung assert_no_ppath_extant();
285 1.1 dyoung assert_no_ppath_component_extant();
286 1.1 dyoung }
287 1.1 dyoung
288 1.1 dyoung ATF_TC(ppath_copy);
289 1.1 dyoung
290 1.1 dyoung ATF_TC_HEAD(ppath_copy, tc)
291 1.1 dyoung {
292 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check that ppath_copy() "
293 1.1 dyoung "creates an exact replica of a path, and that no "
294 1.1 dyoung "resources are leaked.");
295 1.1 dyoung }
296 1.1 dyoung
297 1.1 dyoung ATF_TC_BODY(ppath_copy, tc)
298 1.1 dyoung {
299 1.1 dyoung ppath_component_t *pc, *cpc;
300 1.1 dyoung ppath_t *p, *cp, *rp;
301 1.1 dyoung unsigned int i;
302 1.1 dyoung
303 1.1 dyoung assert_no_ppath_extant();
304 1.1 dyoung assert_no_ppath_component_extant();
305 1.1 dyoung
306 1.1 dyoung if ((p = ppath_create()) == NULL)
307 1.1 dyoung atf_tc_fail("ppath_create failed");
308 1.1 dyoung
309 1.1 dyoung for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
310 1.1 dyoung if ((pc = ppath_idx(i)) == NULL)
311 1.1 dyoung atf_tc_fail("ppath_idx failed");
312 1.1 dyoung rp = ppath_push(p, pc);
313 1.1 dyoung ppath_component_release(pc);
314 1.1 dyoung ATF_CHECK_EQ(rp, p);
315 1.1 dyoung }
316 1.1 dyoung
317 1.1 dyoung if ((cp = ppath_copy(p)) == NULL)
318 1.1 dyoung atf_tc_fail("ppath_copy failed");
319 1.1 dyoung
320 1.1 dyoung for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
321 1.1 dyoung pc = ppath_component_at(p, i);
322 1.1 dyoung cpc = ppath_component_at(cp, i);
323 1.1 dyoung ATF_CHECK_EQ(pc, cpc);
324 1.1 dyoung ppath_component_release(pc);
325 1.1 dyoung ppath_component_release(cpc);
326 1.1 dyoung }
327 1.1 dyoung
328 1.1 dyoung ppath_release(cp);
329 1.1 dyoung ppath_release(p);
330 1.1 dyoung
331 1.1 dyoung assert_no_ppath_extant();
332 1.1 dyoung assert_no_ppath_component_extant();
333 1.1 dyoung }
334 1.1 dyoung
335 1.1 dyoung ATF_TC(replace);
336 1.1 dyoung
337 1.1 dyoung ATF_TC_HEAD(replace, tc)
338 1.1 dyoung {
339 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check that ppath_replace_idx() "
340 1.1 dyoung "and ppath_replace_key() produce the paths we expect without "
341 1.1 dyoung "leaking resources.");
342 1.1 dyoung }
343 1.1 dyoung
344 1.1 dyoung ATF_TC_BODY(replace, tc)
345 1.1 dyoung {
346 1.1 dyoung ppath_component_t *pc;
347 1.1 dyoung ppath_t *p, *cp, *rp;
348 1.1 dyoung unsigned int i;
349 1.1 dyoung
350 1.1 dyoung assert_no_ppath_extant();
351 1.1 dyoung assert_no_ppath_component_extant();
352 1.1 dyoung
353 1.1 dyoung if ((p = ppath_create()) == NULL)
354 1.1 dyoung atf_tc_fail("ppath_create failed");
355 1.1 dyoung
356 1.1 dyoung /* index replacement fails on an empty path */
357 1.1 dyoung rp = ppath_replace_idx(p, 0);
358 1.1 dyoung ATF_CHECK_EQ(rp, NULL);
359 1.1 dyoung
360 1.1 dyoung /* key replacement fails on an empty path */
361 1.1 dyoung rp = ppath_replace_key(p, "key");
362 1.1 dyoung ATF_CHECK_EQ(rp, NULL);
363 1.1 dyoung
364 1.1 dyoung for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
365 1.1 dyoung if ((pc = ppath_idx(i)) == NULL)
366 1.1 dyoung atf_tc_fail("ppath_idx failed");
367 1.1 dyoung rp = ppath_push(p, pc);
368 1.1 dyoung ppath_component_release(pc);
369 1.1 dyoung ATF_CHECK_EQ(rp, p);
370 1.1 dyoung }
371 1.1 dyoung
372 1.1 dyoung if ((cp = ppath_copy(p)) == NULL)
373 1.1 dyoung atf_tc_fail("ppath_copy failed");
374 1.1 dyoung
375 1.1 dyoung rp = ppath_pop(cp, NULL);
376 1.1 dyoung ATF_CHECK_EQ(rp, cp);
377 1.1 dyoung rp = ppath_push_key(cp, "key");
378 1.1 dyoung ATF_CHECK_EQ(rp, cp);
379 1.1 dyoung
380 1.1 dyoung ppath_replace_idx(p, 0);
381 1.1 dyoung
382 1.1 dyoung if ((pc = ppath_component_at(p, PPATH_MAX_COMPONENTS - 1)) == NULL)
383 1.1 dyoung atf_tc_fail("ppath_idx failed");
384 1.1 dyoung ATF_CHECK_EQ(ppath_component_idx(pc), 0);
385 1.1 dyoung ppath_component_release(pc);
386 1.1 dyoung
387 1.1 dyoung for (i = 0; i < PPATH_MAX_COMPONENTS - 1; i++) {
388 1.1 dyoung if ((pc = ppath_component_at(p, i)) == NULL)
389 1.1 dyoung atf_tc_fail("ppath_idx failed");
390 1.1 dyoung ATF_CHECK_EQ(ppath_component_idx(pc), (int)i);
391 1.1 dyoung ppath_component_release(pc);
392 1.1 dyoung }
393 1.1 dyoung
394 1.1 dyoung for (i = 0; i < PPATH_MAX_COMPONENTS - 1; i++) {
395 1.1 dyoung if ((pc = ppath_component_at(cp, i)) == NULL)
396 1.1 dyoung atf_tc_fail("ppath_idx failed");
397 1.1 dyoung ATF_CHECK_EQ(ppath_component_idx(pc), (int)i);
398 1.1 dyoung ppath_component_release(pc);
399 1.1 dyoung }
400 1.1 dyoung
401 1.1 dyoung if ((pc = ppath_component_at(cp, PPATH_MAX_COMPONENTS - 1)) == NULL)
402 1.1 dyoung atf_tc_fail("ppath_idx failed");
403 1.1 dyoung if (ppath_component_key(pc) == NULL ||
404 1.1 dyoung strcmp(ppath_component_key(pc), "key") != 0)
405 1.1 dyoung atf_tc_fail("last path component expected to be \"key\"");
406 1.1 dyoung ppath_component_release(pc);
407 1.1 dyoung ppath_release(p);
408 1.1 dyoung ppath_release(cp);
409 1.1 dyoung
410 1.1 dyoung assert_no_ppath_extant();
411 1.1 dyoung assert_no_ppath_component_extant();
412 1.1 dyoung }
413 1.1 dyoung
414 1.1 dyoung ATF_TC(copyset_object_twice_success);
415 1.1 dyoung
416 1.1 dyoung ATF_TC_HEAD(copyset_object_twice_success, tc)
417 1.1 dyoung {
418 1.1 dyoung atf_tc_set_md_var(tc, "descr",
419 1.1 dyoung "check that after back-to-back ppath_copyset_object() calls, "
420 1.1 dyoung "changing the \"u.s. citizen\" property and the first property "
421 1.1 dyoung "in \"children\" in the \"John Doe\" record in the "
422 1.1 dyoung "\"personnel\" property list, the properties are changed "
423 1.1 dyoung "in the new dictionary and unchanged in the old dictionary");
424 1.1 dyoung }
425 1.1 dyoung
426 1.1 dyoung ATF_TC_BODY(copyset_object_twice_success, tc)
427 1.1 dyoung {
428 1.1 dyoung const char *s;
429 1.1 dyoung char *oext, *next;
430 1.1 dyoung int rc;
431 1.1 dyoung bool v = false;
432 1.1 dyoung prop_dictionary_t d, od;
433 1.1 dyoung prop_object_t nd = NULL, ond;
434 1.1 dyoung prop_object_t r, or;
435 1.1 dyoung ppath_t *p, *p2, *p3;
436 1.1 dyoung
437 1.1 dyoung assert_no_ppath_extant();
438 1.1 dyoung assert_no_ppath_component_extant();
439 1.1 dyoung
440 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
441 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
442 1.1 dyoung od = prop_dictionary_copy(d);
443 1.1 dyoung
444 1.1 dyoung if (!dictionary_equals(od, d)) {
445 1.1 dyoung oext = prop_dictionary_externalize(od);
446 1.1 dyoung next = prop_dictionary_externalize(d);
447 1.1 dyoung atf_tc_fail("dictionaries are unequal from the outset, argh! "
448 1.1 dyoung "original\n%s\nnew\n%s", oext, next);
449 1.1 dyoung free(oext);
450 1.1 dyoung free(next);
451 1.1 dyoung }
452 1.1 dyoung
453 1.1 dyoung if ((p = ppath_create()) == NULL || (p2 = ppath_create()) == NULL ||
454 1.1 dyoung (p3 = ppath_create()) == NULL)
455 1.1 dyoung atf_tc_fail("ppath_create failed");
456 1.1 dyoung
457 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
458 1.1 dyoung atf_tc_fail("ppath_push_key failed");
459 1.1 dyoung if (ppath_push_key(p, "u.s. citizen") == NULL)
460 1.1 dyoung atf_tc_fail("ppath_push_key failed");
461 1.1 dyoung
462 1.1 dyoung if (ppath_push_key(p2, "John Doe") == NULL)
463 1.1 dyoung atf_tc_fail("ppath_push_key failed");
464 1.1 dyoung if (ppath_push_key(p2, "children") == NULL)
465 1.1 dyoung atf_tc_fail("ppath_push_key failed");
466 1.1 dyoung if (ppath_push_idx(p2, 0) == NULL)
467 1.1 dyoung atf_tc_fail("ppath_push_idx failed");
468 1.1 dyoung
469 1.1 dyoung if (ppath_push_key(p3, "John Doe") == NULL)
470 1.1 dyoung atf_tc_fail("ppath_push_key failed");
471 1.1 dyoung
472 1.1 dyoung v = false;
473 1.1 dyoung rc = ppath_get_bool(d, p, &v);
474 1.1 dyoung ATF_CHECK_EQ(rc, 0);
475 1.1 dyoung ATF_CHECK_EQ(v, true);
476 1.1 dyoung
477 1.1 dyoung s = "";
478 1.1 dyoung rc = ppath_get_string(d, p2, &s);
479 1.1 dyoung ATF_CHECK_EQ(rc, 0);
480 1.1 dyoung ATF_CHECK_STREQ(s, "Jane Doe");
481 1.1 dyoung
482 1.1 dyoung rc = ppath_copyset_bool(d, &nd, p, false);
483 1.1 dyoung ATF_CHECK_EQ(rc, 0);
484 1.1 dyoung
485 1.1 dyoung rc = ppath_get_object(nd, p3, &r);
486 1.1 dyoung ATF_CHECK_EQ(rc, 0);
487 1.1 dyoung
488 1.1 dyoung ond = nd;
489 1.1 dyoung
490 1.1 dyoung rc = ppath_copyset_string(d, &nd, p2, "Martha Doe");
491 1.1 dyoung ATF_CHECK_EQ(rc, 0);
492 1.1 dyoung
493 1.1 dyoung ATF_CHECK_EQ(nd, ond);
494 1.1 dyoung
495 1.1 dyoung rc = ppath_get_object(nd, p3, &or);
496 1.1 dyoung ATF_CHECK_EQ(rc, 0);
497 1.1 dyoung
498 1.1 dyoung ATF_CHECK_EQ(r, or);
499 1.1 dyoung
500 1.1 dyoung v = true;
501 1.1 dyoung rc = ppath_get_bool(nd, p, &v);
502 1.1 dyoung ATF_CHECK_EQ(rc, 0);
503 1.1 dyoung ATF_CHECK_EQ(v, false);
504 1.1 dyoung
505 1.1 dyoung s = "";
506 1.1 dyoung rc = ppath_get_string(nd, p2, &s);
507 1.1 dyoung ATF_CHECK_EQ(rc, 0);
508 1.1 dyoung ATF_CHECK_STREQ(s, "Martha Doe");
509 1.1 dyoung
510 1.1 dyoung if (!dictionary_equals(od, d)) {
511 1.1 dyoung oext = prop_dictionary_externalize(od);
512 1.1 dyoung next = prop_dictionary_externalize(d);
513 1.1 dyoung atf_tc_fail("copydel modified original dictionary, "
514 1.1 dyoung "original\n%s\nnew\n%s", oext, next);
515 1.1 dyoung free(oext);
516 1.1 dyoung free(next);
517 1.1 dyoung }
518 1.1 dyoung
519 1.1 dyoung if (dictionary_equals(od, nd)) {
520 1.1 dyoung oext = prop_dictionary_externalize(od);
521 1.1 dyoung next = prop_dictionary_externalize(nd);
522 1.1 dyoung atf_tc_fail("copydel made no change to the new "
523 1.1 dyoung "dictionary, original\n%s\nnew\n%s", oext, next);
524 1.1 dyoung free(oext);
525 1.1 dyoung free(next);
526 1.1 dyoung }
527 1.1 dyoung
528 1.1 dyoung rc = ppath_set_bool(od, p, false);
529 1.1 dyoung ATF_CHECK_EQ(rc, 0);
530 1.1 dyoung
531 1.1 dyoung rc = ppath_set_string(od, p2, "Martha Doe");
532 1.1 dyoung ATF_CHECK_EQ(rc, 0);
533 1.1 dyoung
534 1.1 dyoung if (!dictionary_equals(od, nd)) {
535 1.1 dyoung oext = prop_dictionary_externalize(od);
536 1.1 dyoung next = prop_dictionary_externalize(nd);
537 1.1 dyoung atf_tc_fail("copydel made an out-of-bounds change to the new "
538 1.1 dyoung "dictionary, original\n%s\nnew\n%s", oext, next);
539 1.1 dyoung free(oext);
540 1.1 dyoung free(next);
541 1.1 dyoung }
542 1.1 dyoung
543 1.1 dyoung ppath_release(p);
544 1.1 dyoung ppath_release(p2);
545 1.1 dyoung ppath_release(p3);
546 1.1 dyoung prop_object_release(d);
547 1.1 dyoung prop_object_release(od);
548 1.1 dyoung prop_object_release(nd);
549 1.1 dyoung assert_no_ppath_extant();
550 1.1 dyoung assert_no_ppath_component_extant();
551 1.1 dyoung }
552 1.1 dyoung
553 1.1 dyoung ATF_TC(copydel_object_twice_success);
554 1.1 dyoung
555 1.1 dyoung ATF_TC_HEAD(copydel_object_twice_success, tc)
556 1.1 dyoung {
557 1.1 dyoung atf_tc_set_md_var(tc, "descr",
558 1.1 dyoung "check that after back-to-back ppath_copydel_object() calls, "
559 1.1 dyoung "removing the \"u.s. citizen\" property and the first property "
560 1.1 dyoung "in \"children\" from the \"John Doe\" record in the "
561 1.1 dyoung "\"personnel\" property list, the properties are missing "
562 1.1 dyoung "from the new dictionary and unchanged in the old dictionary");
563 1.1 dyoung }
564 1.1 dyoung
565 1.1 dyoung ATF_TC_BODY(copydel_object_twice_success, tc)
566 1.1 dyoung {
567 1.1 dyoung const char *s;
568 1.1 dyoung char *oext, *next;
569 1.1 dyoung int rc;
570 1.1 dyoung bool v = false;
571 1.1 dyoung prop_dictionary_t d, od;
572 1.1 dyoung prop_object_t nd = NULL, ond;
573 1.1 dyoung prop_object_t r, or;
574 1.1 dyoung ppath_t *p, *p2, *p3;
575 1.1 dyoung
576 1.1 dyoung assert_no_ppath_extant();
577 1.1 dyoung assert_no_ppath_component_extant();
578 1.1 dyoung
579 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
580 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
581 1.1 dyoung od = prop_dictionary_copy(d);
582 1.1 dyoung
583 1.1 dyoung if (!dictionary_equals(od, d)) {
584 1.1 dyoung oext = prop_dictionary_externalize(od);
585 1.1 dyoung next = prop_dictionary_externalize(d);
586 1.1 dyoung atf_tc_fail("dictionaries are unequal from the outset, argh! "
587 1.1 dyoung "original\n%s\nnew\n%s", oext, next);
588 1.1 dyoung free(oext);
589 1.1 dyoung free(next);
590 1.1 dyoung }
591 1.1 dyoung
592 1.1 dyoung if ((p = ppath_create()) == NULL || (p2 = ppath_create()) == NULL ||
593 1.1 dyoung (p3 = ppath_create()) == NULL)
594 1.1 dyoung atf_tc_fail("ppath_create failed");
595 1.1 dyoung
596 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
597 1.1 dyoung atf_tc_fail("ppath_push_key failed");
598 1.1 dyoung if (ppath_push_key(p, "u.s. citizen") == NULL)
599 1.1 dyoung atf_tc_fail("ppath_push_key failed");
600 1.1 dyoung
601 1.1 dyoung if (ppath_push_key(p2, "John Doe") == NULL)
602 1.1 dyoung atf_tc_fail("ppath_push_key failed");
603 1.1 dyoung if (ppath_push_key(p2, "children") == NULL)
604 1.1 dyoung atf_tc_fail("ppath_push_key failed");
605 1.1 dyoung if (ppath_push_idx(p2, 0) == NULL)
606 1.1 dyoung atf_tc_fail("ppath_push_idx failed");
607 1.1 dyoung
608 1.1 dyoung if (ppath_push_key(p3, "John Doe") == NULL)
609 1.1 dyoung atf_tc_fail("ppath_push_key failed");
610 1.1 dyoung
611 1.1 dyoung v = false;
612 1.1 dyoung rc = ppath_get_bool(d, p, &v);
613 1.1 dyoung ATF_CHECK_EQ(rc, 0);
614 1.1 dyoung ATF_CHECK_EQ(v, true);
615 1.1 dyoung
616 1.1 dyoung s = "";
617 1.1 dyoung rc = ppath_get_string(d, p2, &s);
618 1.1 dyoung ATF_CHECK_EQ(rc, 0);
619 1.1 dyoung ATF_CHECK_STREQ(s, "Jane Doe");
620 1.1 dyoung
621 1.1 dyoung rc = ppath_copydel_bool(d, &nd, p);
622 1.1 dyoung ATF_CHECK_EQ(rc, 0);
623 1.1 dyoung
624 1.1 dyoung ond = nd;
625 1.1 dyoung
626 1.1 dyoung rc = ppath_get_object(nd, p3, &r);
627 1.1 dyoung ATF_CHECK_EQ(rc, 0);
628 1.1 dyoung
629 1.1 dyoung rc = ppath_copydel_string(d, &nd, p2);
630 1.1 dyoung ATF_CHECK_EQ(rc, 0);
631 1.1 dyoung
632 1.1 dyoung ATF_CHECK_EQ(nd, ond);
633 1.1 dyoung
634 1.1 dyoung rc = ppath_get_object(nd, p3, &or);
635 1.1 dyoung ATF_CHECK_EQ(rc, 0);
636 1.1 dyoung
637 1.1 dyoung ATF_CHECK_EQ(r, or);
638 1.1 dyoung
639 1.1 dyoung v = true;
640 1.1 dyoung rc = ppath_get_bool(nd, p, &v);
641 1.1 dyoung ATF_CHECK_EQ(rc, ENOENT);
642 1.1 dyoung ATF_CHECK_EQ(v, true);
643 1.1 dyoung
644 1.1 dyoung if (!dictionary_equals(od, d)) {
645 1.1 dyoung oext = prop_dictionary_externalize(od);
646 1.1 dyoung next = prop_dictionary_externalize(d);
647 1.1 dyoung atf_tc_fail("copydel modified original dictionary, "
648 1.1 dyoung "original\n%s\nnew\n%s", oext, next);
649 1.1 dyoung free(oext);
650 1.1 dyoung free(next);
651 1.1 dyoung }
652 1.1 dyoung
653 1.1 dyoung if (dictionary_equals(od, nd)) {
654 1.1 dyoung oext = prop_dictionary_externalize(od);
655 1.1 dyoung next = prop_dictionary_externalize(nd);
656 1.1 dyoung atf_tc_fail("copydel made no change to the new "
657 1.1 dyoung "dictionary, original\n%s\nnew\n%s", oext, next);
658 1.1 dyoung free(oext);
659 1.1 dyoung free(next);
660 1.1 dyoung }
661 1.1 dyoung
662 1.1 dyoung rc = ppath_delete_bool(od, p);
663 1.1 dyoung ATF_CHECK_EQ(rc, 0);
664 1.1 dyoung
665 1.1 dyoung rc = ppath_delete_string(od, p2);
666 1.1 dyoung ATF_CHECK_EQ(rc, 0);
667 1.1 dyoung
668 1.1 dyoung if (!dictionary_equals(od, nd)) {
669 1.1 dyoung oext = prop_dictionary_externalize(od);
670 1.1 dyoung next = prop_dictionary_externalize(nd);
671 1.1 dyoung atf_tc_fail("copydel made an out-of-bounds change to the new "
672 1.1 dyoung "dictionary, original\n%s\nnew\n%s", oext, next);
673 1.1 dyoung free(oext);
674 1.1 dyoung free(next);
675 1.1 dyoung }
676 1.1 dyoung
677 1.1 dyoung ppath_release(p);
678 1.1 dyoung ppath_release(p2);
679 1.1 dyoung ppath_release(p3);
680 1.1 dyoung prop_object_release(d);
681 1.1 dyoung prop_object_release(od);
682 1.1 dyoung prop_object_release(nd);
683 1.1 dyoung assert_no_ppath_extant();
684 1.1 dyoung assert_no_ppath_component_extant();
685 1.1 dyoung }
686 1.1 dyoung
687 1.1 dyoung ATF_TC(copydel_bool_success);
688 1.1 dyoung
689 1.1 dyoung ATF_TC_HEAD(copydel_bool_success, tc)
690 1.1 dyoung {
691 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_copydel_bool() deletes "
692 1.1 dyoung "the \"u.s. citizen\" property in the \"John Doe\" record in the "
693 1.1 dyoung "\"personnel\" property list and verifies the value is missing "
694 1.1 dyoung "from the new dictionary and unchanged in the old dictionary");
695 1.1 dyoung }
696 1.1 dyoung
697 1.1 dyoung ATF_TC_BODY(copydel_bool_success, tc)
698 1.1 dyoung {
699 1.1 dyoung char *oext, *next;
700 1.1 dyoung int rc;
701 1.1 dyoung bool v = false;
702 1.1 dyoung prop_dictionary_t d, od;
703 1.1 dyoung prop_object_t nd = NULL;
704 1.1 dyoung ppath_t *p;
705 1.1 dyoung
706 1.1 dyoung assert_no_ppath_extant();
707 1.1 dyoung assert_no_ppath_component_extant();
708 1.1 dyoung
709 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
710 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
711 1.1 dyoung od = prop_dictionary_copy(d);
712 1.1 dyoung
713 1.1 dyoung if (!dictionary_equals(od, d)) {
714 1.1 dyoung oext = prop_dictionary_externalize(od);
715 1.1 dyoung next = prop_dictionary_externalize(d);
716 1.1 dyoung atf_tc_fail("dictionaries are unequal from the outset, argh! "
717 1.1 dyoung "original\n%s\nnew\n%s", oext, next);
718 1.1 dyoung free(oext);
719 1.1 dyoung free(next);
720 1.1 dyoung }
721 1.1 dyoung
722 1.1 dyoung if ((p = ppath_create()) == NULL)
723 1.1 dyoung atf_tc_fail("ppath_create failed");
724 1.1 dyoung
725 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
726 1.1 dyoung atf_tc_fail("ppath_push_key failed");
727 1.1 dyoung if (ppath_push_key(p, "u.s. citizen") == NULL)
728 1.1 dyoung atf_tc_fail("ppath_push_key failed");
729 1.1 dyoung
730 1.1 dyoung v = false;
731 1.1 dyoung rc = ppath_get_bool(d, p, &v);
732 1.1 dyoung ATF_CHECK_EQ(rc, 0);
733 1.1 dyoung ATF_CHECK_EQ(v, true);
734 1.1 dyoung
735 1.1 dyoung rc = ppath_copydel_bool(d, &nd, p);
736 1.1 dyoung ATF_CHECK_EQ(rc, 0);
737 1.1 dyoung
738 1.1 dyoung v = true;
739 1.1 dyoung rc = ppath_get_bool(nd, p, &v);
740 1.1 dyoung ATF_CHECK_EQ(rc, ENOENT);
741 1.1 dyoung ATF_CHECK_EQ(v, true);
742 1.1 dyoung
743 1.1 dyoung if (!dictionary_equals(od, d)) {
744 1.1 dyoung oext = prop_dictionary_externalize(od);
745 1.1 dyoung next = prop_dictionary_externalize(d);
746 1.1 dyoung atf_tc_fail("copydel modified original dictionary, "
747 1.1 dyoung "original\n%s\nnew\n%s", oext, next);
748 1.1 dyoung free(oext);
749 1.1 dyoung free(next);
750 1.1 dyoung }
751 1.1 dyoung
752 1.1 dyoung if (dictionary_equals(od, nd)) {
753 1.1 dyoung oext = prop_dictionary_externalize(od);
754 1.1 dyoung next = prop_dictionary_externalize(nd);
755 1.1 dyoung atf_tc_fail("copydel made no change to the new "
756 1.1 dyoung "dictionary, original\n%s\nnew\n%s", oext, next);
757 1.1 dyoung free(oext);
758 1.1 dyoung free(next);
759 1.1 dyoung }
760 1.1 dyoung
761 1.1 dyoung rc = ppath_delete_bool(od, p);
762 1.1 dyoung ATF_CHECK_EQ(rc, 0);
763 1.1 dyoung
764 1.1 dyoung if (!dictionary_equals(od, nd)) {
765 1.1 dyoung oext = prop_dictionary_externalize(od);
766 1.1 dyoung next = prop_dictionary_externalize(nd);
767 1.1 dyoung atf_tc_fail("copydel made an out-of-bounds change to the new "
768 1.1 dyoung "dictionary, original\n%s\nnew\n%s", oext, next);
769 1.1 dyoung free(oext);
770 1.1 dyoung free(next);
771 1.1 dyoung }
772 1.1 dyoung
773 1.1 dyoung ppath_release(p);
774 1.1 dyoung prop_object_release(d);
775 1.1 dyoung prop_object_release(od);
776 1.1 dyoung prop_object_release(nd);
777 1.1 dyoung assert_no_ppath_extant();
778 1.1 dyoung assert_no_ppath_component_extant();
779 1.1 dyoung }
780 1.1 dyoung
781 1.1 dyoung ATF_TC(copyset_bool_success);
782 1.1 dyoung
783 1.1 dyoung ATF_TC_HEAD(copyset_bool_success, tc)
784 1.1 dyoung {
785 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_copyset_bool() sets "
786 1.1 dyoung "the \"u.s. citizen\" property in the \"John Doe\" record in the "
787 1.1 dyoung "\"personnel\" property list to false and verifies the new value "
788 1.1 dyoung "in the new dictionary and that the old dictionary is unchanged");
789 1.1 dyoung }
790 1.1 dyoung
791 1.1 dyoung ATF_TC_BODY(copyset_bool_success, tc)
792 1.1 dyoung {
793 1.1 dyoung char *oext, *next;
794 1.1 dyoung int rc;
795 1.1 dyoung bool v = false;
796 1.1 dyoung prop_dictionary_t d, od;
797 1.1 dyoung prop_object_t nd = NULL;
798 1.1 dyoung ppath_t *p;
799 1.1 dyoung
800 1.1 dyoung assert_no_ppath_extant();
801 1.1 dyoung assert_no_ppath_component_extant();
802 1.1 dyoung
803 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
804 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
805 1.1 dyoung od = prop_dictionary_copy(d);
806 1.1 dyoung
807 1.1 dyoung if (!dictionary_equals(od, d)) {
808 1.1 dyoung oext = prop_dictionary_externalize(od);
809 1.1 dyoung next = prop_dictionary_externalize(d);
810 1.1 dyoung atf_tc_fail("dictionaries are unequal from the outset, argh! "
811 1.1 dyoung "original\n%s\nnew\n%s", oext, next);
812 1.1 dyoung free(oext);
813 1.1 dyoung free(next);
814 1.1 dyoung }
815 1.1 dyoung
816 1.1 dyoung if ((p = ppath_create()) == NULL)
817 1.1 dyoung atf_tc_fail("ppath_create failed");
818 1.1 dyoung
819 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
820 1.1 dyoung atf_tc_fail("ppath_push_key failed");
821 1.1 dyoung if (ppath_push_key(p, "u.s. citizen") == NULL)
822 1.1 dyoung atf_tc_fail("ppath_push_key failed");
823 1.1 dyoung
824 1.1 dyoung v = false;
825 1.1 dyoung rc = ppath_get_bool(d, p, &v);
826 1.1 dyoung ATF_CHECK_EQ(rc, 0);
827 1.1 dyoung ATF_CHECK_EQ(v, true);
828 1.1 dyoung
829 1.1 dyoung rc = ppath_copyset_bool(d, &nd, p, false);
830 1.1 dyoung ATF_CHECK_EQ(rc, 0);
831 1.1 dyoung
832 1.1 dyoung v = true;
833 1.1 dyoung rc = ppath_get_bool(nd, p, &v);
834 1.1 dyoung ATF_CHECK_EQ(rc, 0);
835 1.1 dyoung ATF_CHECK_EQ(v, false);
836 1.1 dyoung
837 1.1 dyoung if (!dictionary_equals(od, d)) {
838 1.1 dyoung oext = prop_dictionary_externalize(od);
839 1.1 dyoung next = prop_dictionary_externalize(d);
840 1.1 dyoung atf_tc_fail("copyset modified original dictionary, "
841 1.1 dyoung "original\n%s\nnew\n%s", oext, next);
842 1.1 dyoung free(oext);
843 1.1 dyoung free(next);
844 1.1 dyoung }
845 1.1 dyoung
846 1.1 dyoung if (dictionary_equals(od, nd)) {
847 1.1 dyoung oext = prop_dictionary_externalize(od);
848 1.1 dyoung next = prop_dictionary_externalize(nd);
849 1.1 dyoung atf_tc_fail("copyset made no change to the new "
850 1.1 dyoung "dictionary, original\n%s\nnew\n%s", oext, next);
851 1.1 dyoung free(oext);
852 1.1 dyoung free(next);
853 1.1 dyoung }
854 1.1 dyoung
855 1.1 dyoung rc = ppath_set_bool(nd, p, true);
856 1.1 dyoung ATF_CHECK_EQ(rc, 0);
857 1.1 dyoung
858 1.1 dyoung if (!dictionary_equals(od, nd)) {
859 1.1 dyoung oext = prop_dictionary_externalize(od);
860 1.1 dyoung next = prop_dictionary_externalize(nd);
861 1.1 dyoung atf_tc_fail("copyset made an out-of-bounds change to the new "
862 1.1 dyoung "dictionary, original\n%s\nnew\n%s", oext, next);
863 1.1 dyoung free(oext);
864 1.1 dyoung free(next);
865 1.1 dyoung }
866 1.1 dyoung
867 1.1 dyoung ppath_release(p);
868 1.1 dyoung prop_object_release(d);
869 1.1 dyoung prop_object_release(od);
870 1.1 dyoung prop_object_release(nd);
871 1.1 dyoung assert_no_ppath_extant();
872 1.1 dyoung assert_no_ppath_component_extant();
873 1.1 dyoung }
874 1.1 dyoung
875 1.1 dyoung ATF_TC(set_bool_eftype);
876 1.1 dyoung
877 1.1 dyoung ATF_TC_HEAD(set_bool_eftype, tc)
878 1.1 dyoung {
879 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_set_bool() does not "
880 1.1 dyoung "overwrite with a bool "
881 1.1 dyoung "the \"job title\" property in the \"John Doe\" record in "
882 1.1 dyoung "the "
883 1.1 dyoung "\"personnel\" property list");
884 1.1 dyoung }
885 1.1 dyoung
886 1.1 dyoung ATF_TC_BODY(set_bool_eftype, tc)
887 1.1 dyoung {
888 1.1 dyoung int rc;
889 1.1 dyoung bool v = false;
890 1.1 dyoung prop_dictionary_t d;
891 1.1 dyoung ppath_t *p;
892 1.1 dyoung
893 1.1 dyoung assert_no_ppath_extant();
894 1.1 dyoung assert_no_ppath_component_extant();
895 1.1 dyoung
896 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
897 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
898 1.1 dyoung
899 1.1 dyoung if ((p = ppath_create()) == NULL)
900 1.1 dyoung atf_tc_fail("ppath_create failed");
901 1.1 dyoung
902 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
903 1.1 dyoung atf_tc_fail("ppath_push_key failed");
904 1.1 dyoung if (ppath_push_key(p, "job title") == NULL)
905 1.1 dyoung atf_tc_fail("ppath_push_key failed");
906 1.1 dyoung
907 1.1 dyoung v = false;
908 1.1 dyoung rc = ppath_get_bool(d, p, &v);
909 1.1 dyoung ATF_CHECK_EQ(rc, EFTYPE);
910 1.1 dyoung ATF_CHECK_EQ(v, false);
911 1.1 dyoung
912 1.1 dyoung rc = ppath_set_bool(d, p, false);
913 1.1 dyoung ATF_CHECK_EQ(rc, EFTYPE);
914 1.1 dyoung
915 1.1 dyoung v = true;
916 1.1 dyoung rc = ppath_get_bool(d, p, &v);
917 1.1 dyoung ATF_CHECK_EQ(rc, EFTYPE);
918 1.1 dyoung ATF_CHECK_EQ(v, true);
919 1.1 dyoung
920 1.1 dyoung ppath_release(p);
921 1.1 dyoung prop_object_release(d);
922 1.1 dyoung assert_no_ppath_extant();
923 1.1 dyoung assert_no_ppath_component_extant();
924 1.1 dyoung }
925 1.1 dyoung
926 1.1 dyoung ATF_TC(set_bool_enoent);
927 1.1 dyoung
928 1.1 dyoung ATF_TC_HEAD(set_bool_enoent, tc)
929 1.1 dyoung {
930 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_set_bool() does not create "
931 1.1 dyoung "the \"russian citizen\" property in the \"John Doe\" record in "
932 1.1 dyoung "the "
933 1.1 dyoung "\"personnel\" property list");
934 1.1 dyoung }
935 1.1 dyoung
936 1.1 dyoung ATF_TC_BODY(set_bool_enoent, tc)
937 1.1 dyoung {
938 1.1 dyoung int rc;
939 1.1 dyoung bool v = false;
940 1.1 dyoung prop_dictionary_t d;
941 1.1 dyoung ppath_t *p;
942 1.1 dyoung
943 1.1 dyoung assert_no_ppath_extant();
944 1.1 dyoung assert_no_ppath_component_extant();
945 1.1 dyoung
946 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
947 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
948 1.1 dyoung
949 1.1 dyoung if ((p = ppath_create()) == NULL)
950 1.1 dyoung atf_tc_fail("ppath_create failed");
951 1.1 dyoung
952 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
953 1.1 dyoung atf_tc_fail("ppath_push_key failed");
954 1.1 dyoung if (ppath_push_key(p, "russian citizen") == NULL)
955 1.1 dyoung atf_tc_fail("ppath_push_key failed");
956 1.1 dyoung
957 1.1 dyoung v = false;
958 1.1 dyoung rc = ppath_get_bool(d, p, &v);
959 1.1 dyoung ATF_CHECK_EQ(rc, ENOENT);
960 1.1 dyoung ATF_CHECK_EQ(v, false);
961 1.1 dyoung
962 1.1 dyoung rc = ppath_set_bool(d, p, false);
963 1.1 dyoung ATF_CHECK_EQ(rc, ENOENT);
964 1.1 dyoung
965 1.1 dyoung v = true;
966 1.1 dyoung rc = ppath_get_bool(d, p, &v);
967 1.1 dyoung ATF_CHECK_EQ(rc, ENOENT);
968 1.1 dyoung ATF_CHECK_EQ(v, true);
969 1.1 dyoung
970 1.1 dyoung ppath_release(p);
971 1.1 dyoung prop_object_release(d);
972 1.1 dyoung assert_no_ppath_extant();
973 1.1 dyoung assert_no_ppath_component_extant();
974 1.1 dyoung }
975 1.1 dyoung
976 1.1 dyoung ATF_TC(create_bool_eexist);
977 1.1 dyoung
978 1.1 dyoung ATF_TC_HEAD(create_bool_eexist, tc)
979 1.1 dyoung {
980 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_create_bool() returns "
981 1.1 dyoung "EEXIST because the \"u.s. citizen\" property in the "
982 1.1 dyoung "\"John Doe\" record in the \"personnel\" property list "
983 1.1 dyoung "already exists");
984 1.1 dyoung }
985 1.1 dyoung
986 1.1 dyoung ATF_TC_BODY(create_bool_eexist, tc)
987 1.1 dyoung {
988 1.1 dyoung int rc;
989 1.1 dyoung bool v = false;
990 1.1 dyoung prop_dictionary_t d;
991 1.1 dyoung ppath_t *p;
992 1.1 dyoung
993 1.1 dyoung assert_no_ppath_extant();
994 1.1 dyoung assert_no_ppath_component_extant();
995 1.1 dyoung
996 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
997 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
998 1.1 dyoung
999 1.1 dyoung if ((p = ppath_create()) == NULL)
1000 1.1 dyoung atf_tc_fail("ppath_create failed");
1001 1.1 dyoung
1002 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
1003 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1004 1.1 dyoung if (ppath_push_key(p, "u.s. citizen") == NULL)
1005 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1006 1.1 dyoung
1007 1.1 dyoung v = false;
1008 1.1 dyoung rc = ppath_get_bool(d, p, &v);
1009 1.1 dyoung ATF_CHECK_EQ(rc, 0);
1010 1.1 dyoung ATF_CHECK_EQ(v, true);
1011 1.1 dyoung
1012 1.1 dyoung rc = ppath_create_bool(d, p, false);
1013 1.1 dyoung ATF_CHECK_EQ(rc, EEXIST);
1014 1.1 dyoung
1015 1.1 dyoung v = false;
1016 1.1 dyoung rc = ppath_get_bool(d, p, &v);
1017 1.1 dyoung ATF_CHECK_EQ(rc, 0);
1018 1.1 dyoung ATF_CHECK_EQ(v, true);
1019 1.1 dyoung
1020 1.1 dyoung ppath_release(p);
1021 1.1 dyoung prop_object_release(d);
1022 1.1 dyoung assert_no_ppath_extant();
1023 1.1 dyoung assert_no_ppath_component_extant();
1024 1.1 dyoung }
1025 1.1 dyoung
1026 1.1 dyoung ATF_TC(create_bool_success);
1027 1.1 dyoung
1028 1.1 dyoung ATF_TC_HEAD(create_bool_success, tc)
1029 1.1 dyoung {
1030 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_create_bool() creates "
1031 1.1 dyoung "the \"russian citizen\" property in the \"John Doe\" record in "
1032 1.1 dyoung "the \"personnel\" property list and sets it to false");
1033 1.1 dyoung }
1034 1.1 dyoung
1035 1.1 dyoung ATF_TC_BODY(create_bool_success, tc)
1036 1.1 dyoung {
1037 1.1 dyoung int rc;
1038 1.1 dyoung bool v = false;
1039 1.1 dyoung prop_dictionary_t d;
1040 1.1 dyoung ppath_t *p;
1041 1.1 dyoung
1042 1.1 dyoung assert_no_ppath_extant();
1043 1.1 dyoung assert_no_ppath_component_extant();
1044 1.1 dyoung
1045 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
1046 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
1047 1.1 dyoung
1048 1.1 dyoung if ((p = ppath_create()) == NULL)
1049 1.1 dyoung atf_tc_fail("ppath_create failed");
1050 1.1 dyoung
1051 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
1052 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1053 1.1 dyoung if (ppath_push_key(p, "russian citizen") == NULL)
1054 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1055 1.1 dyoung
1056 1.1 dyoung v = false;
1057 1.1 dyoung rc = ppath_get_bool(d, p, &v);
1058 1.1 dyoung ATF_CHECK_EQ(rc, ENOENT);
1059 1.1 dyoung ATF_CHECK_EQ(v, false);
1060 1.1 dyoung
1061 1.1 dyoung rc = ppath_create_bool(d, p, false);
1062 1.1 dyoung ATF_CHECK_EQ(rc, 0);
1063 1.1 dyoung
1064 1.1 dyoung v = true;
1065 1.1 dyoung rc = ppath_get_bool(d, p, &v);
1066 1.1 dyoung ATF_CHECK_EQ(rc, 0);
1067 1.1 dyoung ATF_CHECK_EQ(v, false);
1068 1.1 dyoung
1069 1.1 dyoung ppath_release(p);
1070 1.1 dyoung prop_object_release(d);
1071 1.1 dyoung assert_no_ppath_extant();
1072 1.1 dyoung assert_no_ppath_component_extant();
1073 1.1 dyoung }
1074 1.1 dyoung
1075 1.1 dyoung ATF_TC(set_bool_success);
1076 1.1 dyoung
1077 1.1 dyoung ATF_TC_HEAD(set_bool_success, tc)
1078 1.1 dyoung {
1079 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_set_bool() sets "
1080 1.1 dyoung "the \"u.s. citizen\" property in the \"John Doe\" record in the "
1081 1.1 dyoung "\"personnel\" property list to false and verifies the new value");
1082 1.1 dyoung }
1083 1.1 dyoung
1084 1.1 dyoung ATF_TC_BODY(set_bool_success, tc)
1085 1.1 dyoung {
1086 1.1 dyoung int rc;
1087 1.1 dyoung bool v = false;
1088 1.1 dyoung prop_dictionary_t d;
1089 1.1 dyoung ppath_t *p;
1090 1.1 dyoung
1091 1.1 dyoung assert_no_ppath_extant();
1092 1.1 dyoung assert_no_ppath_component_extant();
1093 1.1 dyoung
1094 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
1095 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
1096 1.1 dyoung
1097 1.1 dyoung if ((p = ppath_create()) == NULL)
1098 1.1 dyoung atf_tc_fail("ppath_create failed");
1099 1.1 dyoung
1100 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
1101 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1102 1.1 dyoung if (ppath_push_key(p, "u.s. citizen") == NULL)
1103 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1104 1.1 dyoung
1105 1.1 dyoung v = false;
1106 1.1 dyoung rc = ppath_get_bool(d, p, &v);
1107 1.1 dyoung ATF_CHECK_EQ(rc, 0);
1108 1.1 dyoung ATF_CHECK_EQ(v, true);
1109 1.1 dyoung
1110 1.1 dyoung rc = ppath_set_bool(d, p, v);
1111 1.1 dyoung ATF_CHECK_EQ(rc, 0);
1112 1.1 dyoung
1113 1.1 dyoung v = true;
1114 1.1 dyoung rc = ppath_get_bool(d, p, &v);
1115 1.1 dyoung ATF_CHECK_EQ(rc, 0);
1116 1.1 dyoung ATF_CHECK_EQ(v, true);
1117 1.1 dyoung
1118 1.1 dyoung ppath_release(p);
1119 1.1 dyoung prop_object_release(d);
1120 1.1 dyoung assert_no_ppath_extant();
1121 1.1 dyoung assert_no_ppath_component_extant();
1122 1.1 dyoung }
1123 1.1 dyoung
1124 1.1 dyoung ATF_TC(get_bool_success);
1125 1.1 dyoung
1126 1.1 dyoung ATF_TC_HEAD(get_bool_success, tc)
1127 1.1 dyoung {
1128 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_get_bool() fetches "
1129 1.1 dyoung "the \"u.s. citizen\" property from the \"John Doe\" record in the "
1130 1.1 dyoung "\"personnel\" property list, and compares it with the expected "
1131 1.1 dyoung "value, true");
1132 1.1 dyoung }
1133 1.1 dyoung
1134 1.1 dyoung ATF_TC_BODY(get_bool_success, tc)
1135 1.1 dyoung {
1136 1.1 dyoung int rc;
1137 1.1 dyoung bool v = false;
1138 1.1 dyoung prop_dictionary_t d;
1139 1.1 dyoung ppath_t *p;
1140 1.1 dyoung
1141 1.1 dyoung assert_no_ppath_extant();
1142 1.1 dyoung assert_no_ppath_component_extant();
1143 1.1 dyoung
1144 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
1145 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
1146 1.1 dyoung
1147 1.1 dyoung if ((p = ppath_create()) == NULL)
1148 1.1 dyoung atf_tc_fail("ppath_create failed");
1149 1.1 dyoung
1150 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
1151 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1152 1.1 dyoung if (ppath_push_key(p, "u.s. citizen") == NULL)
1153 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1154 1.1 dyoung
1155 1.1 dyoung rc = ppath_get_bool(d, p, &v);
1156 1.1 dyoung ATF_CHECK_EQ(rc, 0);
1157 1.1 dyoung ATF_CHECK_EQ(v, true);
1158 1.1 dyoung
1159 1.1 dyoung ppath_release(p);
1160 1.1 dyoung prop_object_release(d);
1161 1.1 dyoung assert_no_ppath_extant();
1162 1.1 dyoung assert_no_ppath_component_extant();
1163 1.1 dyoung }
1164 1.1 dyoung
1165 1.1 dyoung ATF_TC(delete_bool_success);
1166 1.1 dyoung
1167 1.1 dyoung ATF_TC_HEAD(delete_bool_success, tc)
1168 1.1 dyoung {
1169 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_delete_bool() succeeds "
1170 1.1 dyoung "for the path (\"John Doe\", \"u.s. citizen\") in the "
1171 1.1 dyoung "\"personnel\" property list");
1172 1.1 dyoung }
1173 1.1 dyoung
1174 1.1 dyoung ATF_TC_BODY(delete_bool_success, tc)
1175 1.1 dyoung {
1176 1.1 dyoung int rc;
1177 1.1 dyoung prop_dictionary_t d;
1178 1.1 dyoung ppath_t *p;
1179 1.1 dyoung
1180 1.1 dyoung assert_no_ppath_extant();
1181 1.1 dyoung assert_no_ppath_component_extant();
1182 1.1 dyoung
1183 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
1184 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
1185 1.1 dyoung
1186 1.1 dyoung if ((p = ppath_create()) == NULL)
1187 1.1 dyoung atf_tc_fail("ppath_create failed");
1188 1.1 dyoung
1189 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
1190 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1191 1.1 dyoung if (ppath_push_key(p, "u.s. citizen") == NULL)
1192 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1193 1.1 dyoung
1194 1.1 dyoung rc = ppath_delete_bool(d, p);
1195 1.1 dyoung ATF_CHECK_EQ(rc, 0);
1196 1.1 dyoung
1197 1.1 dyoung rc = ppath_get_bool(d, p, NULL);
1198 1.1 dyoung ATF_CHECK_EQ(rc, ENOENT);
1199 1.1 dyoung
1200 1.1 dyoung ppath_release(p);
1201 1.1 dyoung prop_object_release(d);
1202 1.1 dyoung assert_no_ppath_extant();
1203 1.1 dyoung assert_no_ppath_component_extant();
1204 1.1 dyoung }
1205 1.1 dyoung
1206 1.1 dyoung ATF_TC(delete_bool_eftype);
1207 1.1 dyoung
1208 1.1 dyoung ATF_TC_HEAD(delete_bool_eftype, tc)
1209 1.1 dyoung {
1210 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_delete_bool() returns "
1211 1.1 dyoung "EFTYPE for the path (\"John Doe\", \"job title\") in the "
1212 1.1 dyoung "\"personnel\" property list and does not delete the path");
1213 1.1 dyoung }
1214 1.1 dyoung
1215 1.1 dyoung ATF_TC_BODY(delete_bool_eftype, tc)
1216 1.1 dyoung {
1217 1.1 dyoung int rc;
1218 1.1 dyoung prop_dictionary_t d;
1219 1.1 dyoung ppath_t *p;
1220 1.1 dyoung
1221 1.1 dyoung assert_no_ppath_extant();
1222 1.1 dyoung assert_no_ppath_component_extant();
1223 1.1 dyoung
1224 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
1225 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
1226 1.1 dyoung
1227 1.1 dyoung if ((p = ppath_create()) == NULL)
1228 1.1 dyoung atf_tc_fail("ppath_create failed");
1229 1.1 dyoung
1230 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
1231 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1232 1.1 dyoung if (ppath_push_key(p, "job title") == NULL)
1233 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1234 1.1 dyoung
1235 1.1 dyoung rc = ppath_delete_bool(d, p);
1236 1.1 dyoung ATF_CHECK_EQ(rc, EFTYPE);
1237 1.1 dyoung
1238 1.1 dyoung rc = ppath_get_object(d, p, NULL);
1239 1.1 dyoung ATF_CHECK_EQ(rc, 0);
1240 1.1 dyoung
1241 1.1 dyoung ppath_release(p);
1242 1.1 dyoung prop_object_release(d);
1243 1.1 dyoung assert_no_ppath_extant();
1244 1.1 dyoung assert_no_ppath_component_extant();
1245 1.1 dyoung }
1246 1.1 dyoung
1247 1.1 dyoung ATF_TC(delete_bool_enoent);
1248 1.1 dyoung
1249 1.1 dyoung ATF_TC_HEAD(delete_bool_enoent, tc)
1250 1.1 dyoung {
1251 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_delete_bool() returns "
1252 1.1 dyoung "ENOENT for the path (\"John Doe\", \"citizen\") in the "
1253 1.1 dyoung "\"personnel\" property list");
1254 1.1 dyoung }
1255 1.1 dyoung
1256 1.1 dyoung ATF_TC_BODY(delete_bool_enoent, tc)
1257 1.1 dyoung {
1258 1.1 dyoung int rc;
1259 1.1 dyoung prop_dictionary_t d;
1260 1.1 dyoung ppath_t *p;
1261 1.1 dyoung
1262 1.1 dyoung assert_no_ppath_extant();
1263 1.1 dyoung assert_no_ppath_component_extant();
1264 1.1 dyoung
1265 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
1266 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
1267 1.1 dyoung
1268 1.1 dyoung if ((p = ppath_create()) == NULL)
1269 1.1 dyoung atf_tc_fail("ppath_create failed");
1270 1.1 dyoung
1271 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
1272 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1273 1.1 dyoung if (ppath_push_key(p, "citizen") == NULL)
1274 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1275 1.1 dyoung
1276 1.1 dyoung rc = ppath_delete_bool(d, p);
1277 1.1 dyoung ATF_CHECK_EQ(rc, ENOENT);
1278 1.1 dyoung
1279 1.1 dyoung ppath_release(p);
1280 1.1 dyoung prop_object_release(d);
1281 1.1 dyoung assert_no_ppath_extant();
1282 1.1 dyoung assert_no_ppath_component_extant();
1283 1.1 dyoung }
1284 1.1 dyoung
1285 1.1 dyoung ATF_TC(get_bool_enoent);
1286 1.1 dyoung
1287 1.1 dyoung ATF_TC_HEAD(get_bool_enoent, tc)
1288 1.1 dyoung {
1289 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_get_bool() returns "
1290 1.1 dyoung "ENOENT for the path (\"John Doe\", \"citizen\") in the "
1291 1.1 dyoung "\"personnel\" property list, and the bool * argument is "
1292 1.1 dyoung "unchanged");
1293 1.1 dyoung }
1294 1.1 dyoung
1295 1.1 dyoung ATF_TC_BODY(get_bool_enoent, tc)
1296 1.1 dyoung {
1297 1.1 dyoung int rc;
1298 1.1 dyoung bool v;
1299 1.1 dyoung prop_dictionary_t d;
1300 1.1 dyoung ppath_t *p;
1301 1.1 dyoung
1302 1.1 dyoung assert_no_ppath_extant();
1303 1.1 dyoung assert_no_ppath_component_extant();
1304 1.1 dyoung
1305 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
1306 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
1307 1.1 dyoung
1308 1.1 dyoung if ((p = ppath_create()) == NULL)
1309 1.1 dyoung atf_tc_fail("ppath_create failed");
1310 1.1 dyoung
1311 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
1312 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1313 1.1 dyoung if (ppath_push_key(p, "citizen") == NULL)
1314 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1315 1.1 dyoung
1316 1.1 dyoung v = true;
1317 1.1 dyoung rc = ppath_get_bool(d, p, &v);
1318 1.1 dyoung ATF_CHECK_EQ(rc, ENOENT);
1319 1.1 dyoung ATF_CHECK_EQ(v, true);
1320 1.1 dyoung
1321 1.1 dyoung v = false;
1322 1.1 dyoung rc = ppath_get_bool(d, p, &v);
1323 1.1 dyoung ATF_CHECK_EQ(rc, ENOENT);
1324 1.1 dyoung ATF_CHECK_EQ(v, false);
1325 1.1 dyoung
1326 1.1 dyoung ppath_release(p);
1327 1.1 dyoung prop_object_release(d);
1328 1.1 dyoung assert_no_ppath_extant();
1329 1.1 dyoung assert_no_ppath_component_extant();
1330 1.1 dyoung }
1331 1.1 dyoung
1332 1.1 dyoung ATF_TC(get_bool_eftype);
1333 1.1 dyoung
1334 1.1 dyoung ATF_TC_HEAD(get_bool_eftype, tc)
1335 1.1 dyoung {
1336 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_get_bool() returns "
1337 1.1 dyoung "EFTYPE for the path (\"John Doe\", \"job title\") in the "
1338 1.1 dyoung "\"personnel\" property list, and the bool * argument is "
1339 1.1 dyoung "unchanged");
1340 1.1 dyoung }
1341 1.1 dyoung
1342 1.1 dyoung ATF_TC_BODY(get_bool_eftype, tc)
1343 1.1 dyoung {
1344 1.1 dyoung int rc;
1345 1.1 dyoung bool v;
1346 1.1 dyoung prop_dictionary_t d;
1347 1.1 dyoung ppath_t *p;
1348 1.1 dyoung
1349 1.1 dyoung assert_no_ppath_extant();
1350 1.1 dyoung assert_no_ppath_component_extant();
1351 1.1 dyoung
1352 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
1353 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
1354 1.1 dyoung
1355 1.1 dyoung if ((p = ppath_create()) == NULL)
1356 1.1 dyoung atf_tc_fail("ppath_create failed");
1357 1.1 dyoung
1358 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
1359 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1360 1.1 dyoung if (ppath_push_key(p, "job title") == NULL)
1361 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1362 1.1 dyoung
1363 1.1 dyoung v = true;
1364 1.1 dyoung rc = ppath_get_bool(d, p, &v);
1365 1.1 dyoung ATF_CHECK_EQ(rc, EFTYPE);
1366 1.1 dyoung ATF_CHECK_EQ(v, true);
1367 1.1 dyoung
1368 1.1 dyoung v = false;
1369 1.1 dyoung rc = ppath_get_bool(d, p, &v);
1370 1.1 dyoung ATF_CHECK_EQ(rc, EFTYPE);
1371 1.1 dyoung ATF_CHECK_EQ(v, false);
1372 1.1 dyoung
1373 1.1 dyoung ppath_release(p);
1374 1.1 dyoung prop_object_release(d);
1375 1.1 dyoung assert_no_ppath_extant();
1376 1.1 dyoung assert_no_ppath_component_extant();
1377 1.1 dyoung }
1378 1.1 dyoung
1379 1.1 dyoung ATF_TC(get_string_eftype);
1380 1.1 dyoung
1381 1.1 dyoung ATF_TC_HEAD(get_string_eftype, tc)
1382 1.1 dyoung {
1383 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_get_string() returns "
1384 1.1 dyoung "EFTYPE for the path (\"John Doe\", \"u.s. citizen\") in the "
1385 1.1 dyoung "\"personnel\" property list, and the const char ** argument is "
1386 1.1 dyoung "unchanged");
1387 1.1 dyoung }
1388 1.1 dyoung
1389 1.1 dyoung ATF_TC_BODY(get_string_eftype, tc)
1390 1.1 dyoung {
1391 1.1 dyoung int rc;
1392 1.1 dyoung const char *v;
1393 1.1 dyoung prop_dictionary_t d;
1394 1.1 dyoung ppath_t *p;
1395 1.1 dyoung
1396 1.1 dyoung assert_no_ppath_extant();
1397 1.1 dyoung assert_no_ppath_component_extant();
1398 1.1 dyoung
1399 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
1400 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
1401 1.1 dyoung
1402 1.1 dyoung if ((p = ppath_create()) == NULL)
1403 1.1 dyoung atf_tc_fail("ppath_create failed");
1404 1.1 dyoung
1405 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
1406 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1407 1.1 dyoung if (ppath_push_key(p, "u.s. citizen") == NULL)
1408 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1409 1.1 dyoung
1410 1.1 dyoung v = NULL;
1411 1.1 dyoung rc = ppath_get_string(d, p, &v);
1412 1.1 dyoung ATF_CHECK_EQ(rc, EFTYPE);
1413 1.1 dyoung ATF_CHECK_EQ(v, NULL);
1414 1.1 dyoung
1415 1.1 dyoung v = "xyz";
1416 1.1 dyoung rc = ppath_get_string(d, p, &v);
1417 1.1 dyoung ATF_CHECK_EQ(rc, EFTYPE);
1418 1.1 dyoung ATF_CHECK_STREQ(v, "xyz");
1419 1.1 dyoung
1420 1.1 dyoung ppath_release(p);
1421 1.1 dyoung prop_object_release(d);
1422 1.1 dyoung assert_no_ppath_extant();
1423 1.1 dyoung assert_no_ppath_component_extant();
1424 1.1 dyoung }
1425 1.1 dyoung
1426 1.1 dyoung ATF_TC(get_string_enoent);
1427 1.1 dyoung
1428 1.1 dyoung ATF_TC_HEAD(get_string_enoent, tc)
1429 1.1 dyoung {
1430 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_get_string() returns "
1431 1.1 dyoung "ENOENT for the path (\"John Doe\", \"title\") in the "
1432 1.1 dyoung "\"personnel\" property list, and the const char ** argument is "
1433 1.1 dyoung "unchanged");
1434 1.1 dyoung }
1435 1.1 dyoung
1436 1.1 dyoung ATF_TC_BODY(get_string_enoent, tc)
1437 1.1 dyoung {
1438 1.1 dyoung int rc;
1439 1.1 dyoung const char *v;
1440 1.1 dyoung prop_dictionary_t d;
1441 1.1 dyoung ppath_t *p;
1442 1.1 dyoung
1443 1.1 dyoung assert_no_ppath_extant();
1444 1.1 dyoung assert_no_ppath_component_extant();
1445 1.1 dyoung
1446 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
1447 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
1448 1.1 dyoung
1449 1.1 dyoung if ((p = ppath_create()) == NULL)
1450 1.1 dyoung atf_tc_fail("ppath_create failed");
1451 1.1 dyoung
1452 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
1453 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1454 1.1 dyoung if (ppath_push_key(p, "title") == NULL)
1455 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1456 1.1 dyoung
1457 1.1 dyoung v = NULL;
1458 1.1 dyoung rc = ppath_get_string(d, p, &v);
1459 1.1 dyoung ATF_CHECK_EQ(rc, ENOENT);
1460 1.1 dyoung ATF_CHECK_EQ(v, NULL);
1461 1.1 dyoung
1462 1.1 dyoung v = "xyz";
1463 1.1 dyoung rc = ppath_get_string(d, p, &v);
1464 1.1 dyoung ATF_CHECK_EQ(rc, ENOENT);
1465 1.1 dyoung ATF_CHECK_STREQ(v, "xyz");
1466 1.1 dyoung
1467 1.1 dyoung ppath_release(p);
1468 1.1 dyoung prop_object_release(d);
1469 1.1 dyoung assert_no_ppath_extant();
1470 1.1 dyoung assert_no_ppath_component_extant();
1471 1.1 dyoung }
1472 1.1 dyoung
1473 1.1 dyoung ATF_TC(get_string_success);
1474 1.1 dyoung
1475 1.1 dyoung ATF_TC_HEAD(get_string_success, tc)
1476 1.1 dyoung {
1477 1.1 dyoung atf_tc_set_md_var(tc, "descr", "check ppath_get_string() fetches "
1478 1.1 dyoung "the \"job title\" property from the \"John Doe\" record in the "
1479 1.1 dyoung "\"personnel\" property list and compares it with the expected "
1480 1.1 dyoung "value, \"computer programmer\"");
1481 1.1 dyoung }
1482 1.1 dyoung
1483 1.1 dyoung ATF_TC_BODY(get_string_success, tc)
1484 1.1 dyoung {
1485 1.1 dyoung int rc;
1486 1.2 msaitoh const char *v = NULL;
1487 1.1 dyoung prop_dictionary_t d;
1488 1.1 dyoung ppath_t *p;
1489 1.1 dyoung
1490 1.1 dyoung assert_no_ppath_extant();
1491 1.1 dyoung assert_no_ppath_component_extant();
1492 1.1 dyoung
1493 1.1 dyoung if ((d = prop_dictionary_internalize(personnel)) == NULL)
1494 1.1 dyoung atf_tc_fail("prop_dictionary_internalize failed");
1495 1.1 dyoung
1496 1.1 dyoung if ((p = ppath_create()) == NULL)
1497 1.1 dyoung atf_tc_fail("ppath_create failed");
1498 1.1 dyoung
1499 1.1 dyoung if (ppath_push_key(p, "John Doe") == NULL)
1500 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1501 1.1 dyoung if (ppath_push_key(p, "job title") == NULL)
1502 1.1 dyoung atf_tc_fail("ppath_push_key failed");
1503 1.1 dyoung
1504 1.1 dyoung rc = ppath_get_string(d, p, &v);
1505 1.1 dyoung ATF_CHECK_EQ(rc, 0);
1506 1.1 dyoung ATF_CHECK_STREQ(v, "computer programmer");
1507 1.1 dyoung
1508 1.1 dyoung ppath_release(p);
1509 1.1 dyoung prop_object_release(d);
1510 1.1 dyoung assert_no_ppath_extant();
1511 1.1 dyoung assert_no_ppath_component_extant();
1512 1.1 dyoung }
1513 1.1 dyoung
1514 1.1 dyoung ATF_TP_ADD_TCS(tp)
1515 1.1 dyoung {
1516 1.1 dyoung
1517 1.1 dyoung ATF_TP_ADD_TC(tp, push_until_full);
1518 1.1 dyoung ATF_TP_ADD_TC(tp, pop_until_empty);
1519 1.1 dyoung ATF_TP_ADD_TC(tp, length);
1520 1.1 dyoung ATF_TP_ADD_TC(tp, component_at);
1521 1.1 dyoung ATF_TP_ADD_TC(tp, get_idx_key);
1522 1.1 dyoung ATF_TP_ADD_TC(tp, ppath_copy);
1523 1.1 dyoung ATF_TP_ADD_TC(tp, replace);
1524 1.1 dyoung
1525 1.1 dyoung ATF_TP_ADD_TC(tp, delete_bool_eftype);
1526 1.1 dyoung ATF_TP_ADD_TC(tp, delete_bool_enoent);
1527 1.1 dyoung ATF_TP_ADD_TC(tp, delete_bool_success);
1528 1.1 dyoung
1529 1.1 dyoung ATF_TP_ADD_TC(tp, get_bool_eftype);
1530 1.1 dyoung ATF_TP_ADD_TC(tp, get_bool_enoent);
1531 1.1 dyoung ATF_TP_ADD_TC(tp, get_bool_success);
1532 1.1 dyoung
1533 1.1 dyoung ATF_TP_ADD_TC(tp, copydel_bool_success);
1534 1.1 dyoung ATF_TP_ADD_TC(tp, copydel_object_twice_success);
1535 1.1 dyoung ATF_TP_ADD_TC(tp, copyset_object_twice_success);
1536 1.1 dyoung ATF_TP_ADD_TC(tp, copyset_bool_success);
1537 1.1 dyoung ATF_TP_ADD_TC(tp, create_bool_eexist);
1538 1.1 dyoung ATF_TP_ADD_TC(tp, create_bool_success);
1539 1.1 dyoung ATF_TP_ADD_TC(tp, set_bool_enoent);
1540 1.1 dyoung ATF_TP_ADD_TC(tp, set_bool_eftype);
1541 1.1 dyoung ATF_TP_ADD_TC(tp, set_bool_success);
1542 1.1 dyoung
1543 1.1 dyoung ATF_TP_ADD_TC(tp, get_string_eftype);
1544 1.1 dyoung ATF_TP_ADD_TC(tp, get_string_enoent);
1545 1.1 dyoung ATF_TP_ADD_TC(tp, get_string_success);
1546 1.1 dyoung
1547 1.1 dyoung return atf_no_error();
1548 1.1 dyoung }
1549