xref: /netbsd-src/external/bsd/kyua-testers/dist/error_test.c (revision 754f425fc237c181450c91977727274098801c74)
1*754f425fSjmmv // Copyright 2012 Google Inc.
2*754f425fSjmmv // All rights reserved.
3*754f425fSjmmv //
4*754f425fSjmmv // Redistribution and use in source and binary forms, with or without
5*754f425fSjmmv // modification, are permitted provided that the following conditions are
6*754f425fSjmmv // met:
7*754f425fSjmmv //
8*754f425fSjmmv // * Redistributions of source code must retain the above copyright
9*754f425fSjmmv //   notice, this list of conditions and the following disclaimer.
10*754f425fSjmmv // * Redistributions in binary form must reproduce the above copyright
11*754f425fSjmmv //   notice, this list of conditions and the following disclaimer in the
12*754f425fSjmmv //   documentation and/or other materials provided with the distribution.
13*754f425fSjmmv // * Neither the name of Google Inc. nor the names of its contributors
14*754f425fSjmmv //   may be used to endorse or promote products derived from this software
15*754f425fSjmmv //   without specific prior written permission.
16*754f425fSjmmv //
17*754f425fSjmmv // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18*754f425fSjmmv // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19*754f425fSjmmv // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20*754f425fSjmmv // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21*754f425fSjmmv // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22*754f425fSjmmv // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23*754f425fSjmmv // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24*754f425fSjmmv // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25*754f425fSjmmv // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26*754f425fSjmmv // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27*754f425fSjmmv // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*754f425fSjmmv 
29*754f425fSjmmv #include "error.h"
30*754f425fSjmmv 
31*754f425fSjmmv #include <errno.h>
32*754f425fSjmmv #include <stdint.h>
33*754f425fSjmmv #include <stdio.h>
34*754f425fSjmmv #include <stdlib.h>
35*754f425fSjmmv #include <string.h>
36*754f425fSjmmv 
37*754f425fSjmmv #include <atf-c.h>
38*754f425fSjmmv 
39*754f425fSjmmv 
40*754f425fSjmmv ATF_TC_WITHOUT_HEAD(error_new__oom);
ATF_TC_BODY(error_new__oom,tc)41*754f425fSjmmv ATF_TC_BODY(error_new__oom, tc)
42*754f425fSjmmv {
43*754f425fSjmmv     void* invalid = (void*)1;
44*754f425fSjmmv     kyua_error_t error = kyua_error_new("test_error", invalid, SIZE_MAX, NULL);
45*754f425fSjmmv     ATF_REQUIRE(kyua_error_is_type(error, kyua_oom_error_type));
46*754f425fSjmmv     ATF_REQUIRE(kyua_error_data(error) == NULL);
47*754f425fSjmmv     kyua_error_free(error);
48*754f425fSjmmv }
49*754f425fSjmmv 
50*754f425fSjmmv 
51*754f425fSjmmv ATF_TC_WITHOUT_HEAD(error_subsume__none);
ATF_TC_BODY(error_subsume__none,tc)52*754f425fSjmmv ATF_TC_BODY(error_subsume__none, tc)
53*754f425fSjmmv {
54*754f425fSjmmv     kyua_error_t primary = kyua_error_ok();
55*754f425fSjmmv     kyua_error_t secondary = kyua_error_ok();
56*754f425fSjmmv     ATF_REQUIRE(!kyua_error_is_set(kyua_error_subsume(primary, secondary)));
57*754f425fSjmmv }
58*754f425fSjmmv 
59*754f425fSjmmv 
60*754f425fSjmmv ATF_TC_WITHOUT_HEAD(error_subsume__primary);
ATF_TC_BODY(error_subsume__primary,tc)61*754f425fSjmmv ATF_TC_BODY(error_subsume__primary, tc)
62*754f425fSjmmv {
63*754f425fSjmmv     kyua_error_t primary = kyua_error_new("primary_error", NULL, 0, NULL);
64*754f425fSjmmv     kyua_error_t secondary = kyua_error_new("secondary_error", NULL, 0, NULL);
65*754f425fSjmmv     kyua_error_t error = kyua_error_subsume(primary, secondary);
66*754f425fSjmmv     ATF_REQUIRE(kyua_error_is_type(error, "primary_error"));
67*754f425fSjmmv     kyua_error_free(error);
68*754f425fSjmmv }
69*754f425fSjmmv 
70*754f425fSjmmv 
71*754f425fSjmmv ATF_TC_WITHOUT_HEAD(error_subsume__secondary);
ATF_TC_BODY(error_subsume__secondary,tc)72*754f425fSjmmv ATF_TC_BODY(error_subsume__secondary, tc)
73*754f425fSjmmv {
74*754f425fSjmmv     kyua_error_t primary = kyua_error_ok();
75*754f425fSjmmv     kyua_error_t secondary = kyua_error_new("secondary_error", NULL, 0, NULL);
76*754f425fSjmmv     kyua_error_t error = kyua_error_subsume(primary, secondary);
77*754f425fSjmmv     ATF_REQUIRE(kyua_error_is_type(error, "secondary_error"));
78*754f425fSjmmv     kyua_error_free(error);
79*754f425fSjmmv }
80*754f425fSjmmv 
81*754f425fSjmmv 
82*754f425fSjmmv ATF_TC_WITHOUT_HEAD(error_is_type__match);
ATF_TC_BODY(error_is_type__match,tc)83*754f425fSjmmv ATF_TC_BODY(error_is_type__match, tc)
84*754f425fSjmmv {
85*754f425fSjmmv     kyua_error_t error = kyua_error_new("test_error", NULL, 0, NULL);
86*754f425fSjmmv     ATF_REQUIRE(kyua_error_is_type(error, "test_error"));
87*754f425fSjmmv     kyua_error_free(error);
88*754f425fSjmmv }
89*754f425fSjmmv 
90*754f425fSjmmv 
91*754f425fSjmmv ATF_TC_WITHOUT_HEAD(error_is_type__not_match);
ATF_TC_BODY(error_is_type__not_match,tc)92*754f425fSjmmv ATF_TC_BODY(error_is_type__not_match, tc)
93*754f425fSjmmv {
94*754f425fSjmmv     kyua_error_t error = kyua_error_new("test_error", NULL, 0, NULL);
95*754f425fSjmmv     ATF_REQUIRE(!kyua_error_is_type(error, "test_erro"));
96*754f425fSjmmv     ATF_REQUIRE(!kyua_error_is_type(error, "test_error2"));
97*754f425fSjmmv     ATF_REQUIRE(!kyua_error_is_type(error, "foo"));
98*754f425fSjmmv     kyua_error_free(error);
99*754f425fSjmmv }
100*754f425fSjmmv 
101*754f425fSjmmv 
102*754f425fSjmmv ATF_TC_WITHOUT_HEAD(error_data__none);
ATF_TC_BODY(error_data__none,tc)103*754f425fSjmmv ATF_TC_BODY(error_data__none, tc)
104*754f425fSjmmv {
105*754f425fSjmmv     kyua_error_t error = kyua_error_new("test_error", NULL, 0, NULL);
106*754f425fSjmmv     ATF_REQUIRE(kyua_error_data(error) == NULL);
107*754f425fSjmmv     kyua_error_free(error);
108*754f425fSjmmv }
109*754f425fSjmmv 
110*754f425fSjmmv 
111*754f425fSjmmv ATF_TC_WITHOUT_HEAD(error_data__some);
ATF_TC_BODY(error_data__some,tc)112*754f425fSjmmv ATF_TC_BODY(error_data__some, tc)
113*754f425fSjmmv {
114*754f425fSjmmv     int data = 5;
115*754f425fSjmmv     kyua_error_t error = kyua_error_new("test_data_error", &data, sizeof(data),
116*754f425fSjmmv                                         NULL);
117*754f425fSjmmv     ATF_REQUIRE(kyua_error_data(error) != NULL);
118*754f425fSjmmv     ATF_REQUIRE_EQ(*((const int*)kyua_error_data(error)), 5);
119*754f425fSjmmv     kyua_error_free(error);
120*754f425fSjmmv }
121*754f425fSjmmv 
122*754f425fSjmmv 
123*754f425fSjmmv ATF_TC_WITHOUT_HEAD(error_is_set__no);
ATF_TC_BODY(error_is_set__no,tc)124*754f425fSjmmv ATF_TC_BODY(error_is_set__no, tc)
125*754f425fSjmmv {
126*754f425fSjmmv     kyua_error_t error = kyua_error_ok();
127*754f425fSjmmv     ATF_REQUIRE(!kyua_error_is_set(error));
128*754f425fSjmmv }
129*754f425fSjmmv 
130*754f425fSjmmv 
131*754f425fSjmmv ATF_TC_WITHOUT_HEAD(error_is_set__yes);
ATF_TC_BODY(error_is_set__yes,tc)132*754f425fSjmmv ATF_TC_BODY(error_is_set__yes, tc)
133*754f425fSjmmv {
134*754f425fSjmmv     kyua_error_t error = kyua_error_new("test_error", NULL, 0, NULL);
135*754f425fSjmmv     ATF_REQUIRE(kyua_error_is_set(error));
136*754f425fSjmmv     kyua_error_free(error);
137*754f425fSjmmv }
138*754f425fSjmmv 
139*754f425fSjmmv 
140*754f425fSjmmv ATF_TC_WITHOUT_HEAD(error_format__default);
ATF_TC_BODY(error_format__default,tc)141*754f425fSjmmv ATF_TC_BODY(error_format__default, tc)
142*754f425fSjmmv {
143*754f425fSjmmv     kyua_error_t error = kyua_error_new("test_error", NULL, 0, NULL);
144*754f425fSjmmv     char buffer[1024];
145*754f425fSjmmv     kyua_error_format(error, buffer, sizeof(buffer));
146*754f425fSjmmv     ATF_REQUIRE_STREQ("Error 'test_error'", buffer);
147*754f425fSjmmv     kyua_error_free(error);
148*754f425fSjmmv }
149*754f425fSjmmv 
150*754f425fSjmmv 
151*754f425fSjmmv /// Error-specific formatting function for testing purposes.
152*754f425fSjmmv static int
test_format(const kyua_error_t error,char * const output_buffer,const size_t output_size)153*754f425fSjmmv test_format(const kyua_error_t error, char* const output_buffer,
154*754f425fSjmmv             const size_t output_size)
155*754f425fSjmmv {
156*754f425fSjmmv     ATF_REQUIRE(kyua_error_is_type(error, "test_error"));
157*754f425fSjmmv     return snprintf(output_buffer, output_size, "Test formatting function");
158*754f425fSjmmv }
159*754f425fSjmmv 
160*754f425fSjmmv 
161*754f425fSjmmv ATF_TC_WITHOUT_HEAD(error_format__custom__ok);
ATF_TC_BODY(error_format__custom__ok,tc)162*754f425fSjmmv ATF_TC_BODY(error_format__custom__ok, tc)
163*754f425fSjmmv {
164*754f425fSjmmv     kyua_error_t error = kyua_error_new("test_error", NULL, 0, test_format);
165*754f425fSjmmv     const char* exp_message = "Test formatting function";
166*754f425fSjmmv     char buffer[1024];
167*754f425fSjmmv     ATF_REQUIRE_EQ((int)strlen(exp_message),
168*754f425fSjmmv                    kyua_error_format(error, buffer, sizeof(buffer)));
169*754f425fSjmmv     ATF_REQUIRE_STREQ(exp_message, buffer);
170*754f425fSjmmv     kyua_error_free(error);
171*754f425fSjmmv }
172*754f425fSjmmv 
173*754f425fSjmmv 
174*754f425fSjmmv ATF_TC_WITHOUT_HEAD(error_format__custom__error);
ATF_TC_BODY(error_format__custom__error,tc)175*754f425fSjmmv ATF_TC_BODY(error_format__custom__error, tc)
176*754f425fSjmmv {
177*754f425fSjmmv     kyua_error_t error = kyua_error_new("test_error", NULL, 0, test_format);
178*754f425fSjmmv     char buffer[5];
179*754f425fSjmmv     ATF_REQUIRE(kyua_error_format(error, buffer, sizeof(buffer))
180*754f425fSjmmv                 >= (int)sizeof(buffer));
181*754f425fSjmmv     kyua_error_free(error);
182*754f425fSjmmv }
183*754f425fSjmmv 
184*754f425fSjmmv 
185*754f425fSjmmv ATF_TC_WITHOUT_HEAD(err);
ATF_TC_BODY(err,tc)186*754f425fSjmmv ATF_TC_BODY(err, tc)
187*754f425fSjmmv {
188*754f425fSjmmv     const pid_t pid = atf_utils_fork();
189*754f425fSjmmv     if (pid == 0) {
190*754f425fSjmmv         kyua_error_t error = kyua_usage_error_new("A usage error");
191*754f425fSjmmv         kyua_error_err(15, error, "The %s message", "1st");
192*754f425fSjmmv     }
193*754f425fSjmmv     atf_utils_wait(pid, 15, "", "error_test: The 1st message: A usage error\n");
194*754f425fSjmmv }
195*754f425fSjmmv 
196*754f425fSjmmv 
197*754f425fSjmmv ATF_TC_WITHOUT_HEAD(fprintf);
ATF_TC_BODY(fprintf,tc)198*754f425fSjmmv ATF_TC_BODY(fprintf, tc)
199*754f425fSjmmv {
200*754f425fSjmmv     FILE* output = fopen("output", "w");
201*754f425fSjmmv     const kyua_error_t error = kyua_usage_error_new("A usage error");
202*754f425fSjmmv     kyua_error_fprintf(output, error, "The %s message", "1st");
203*754f425fSjmmv     kyua_error_free(error);
204*754f425fSjmmv     fclose(output);
205*754f425fSjmmv 
206*754f425fSjmmv     ATF_REQUIRE(atf_utils_grep_file("The 1st message: A usage error",
207*754f425fSjmmv                                     "output"));
208*754f425fSjmmv }
209*754f425fSjmmv 
210*754f425fSjmmv 
211*754f425fSjmmv ATF_TC_WITHOUT_HEAD(warn);
ATF_TC_BODY(warn,tc)212*754f425fSjmmv ATF_TC_BODY(warn, tc)
213*754f425fSjmmv {
214*754f425fSjmmv     const pid_t pid = atf_utils_fork();
215*754f425fSjmmv     if (pid == 0) {
216*754f425fSjmmv         kyua_error_t error = kyua_usage_error_new("A usage error");
217*754f425fSjmmv         kyua_error_warn(error, "The %s message", "1st");
218*754f425fSjmmv         kyua_error_free(error);
219*754f425fSjmmv         exit(51);
220*754f425fSjmmv     }
221*754f425fSjmmv     atf_utils_wait(pid, 51, "", "error_test: The 1st message: A usage error\n");
222*754f425fSjmmv }
223*754f425fSjmmv 
224*754f425fSjmmv 
225*754f425fSjmmv ATF_TC_WITHOUT_HEAD(generic_error_type);
ATF_TC_BODY(generic_error_type,tc)226*754f425fSjmmv ATF_TC_BODY(generic_error_type, tc)
227*754f425fSjmmv {
228*754f425fSjmmv     kyua_error_t error = kyua_generic_error_new("Nothing");
229*754f425fSjmmv     ATF_REQUIRE(kyua_error_is_type(error, kyua_generic_error_type));
230*754f425fSjmmv     kyua_error_free(error);
231*754f425fSjmmv }
232*754f425fSjmmv 
233*754f425fSjmmv 
234*754f425fSjmmv ATF_TC_WITHOUT_HEAD(generic_error_format__plain);
ATF_TC_BODY(generic_error_format__plain,tc)235*754f425fSjmmv ATF_TC_BODY(generic_error_format__plain, tc)
236*754f425fSjmmv {
237*754f425fSjmmv     kyua_error_t error = kyua_generic_error_new("Test message");
238*754f425fSjmmv     char buffer[1024];
239*754f425fSjmmv     kyua_error_format(error, buffer, sizeof(buffer));
240*754f425fSjmmv     ATF_REQUIRE_STREQ("Test message", buffer);
241*754f425fSjmmv     kyua_error_free(error);
242*754f425fSjmmv }
243*754f425fSjmmv 
244*754f425fSjmmv 
245*754f425fSjmmv ATF_TC_WITHOUT_HEAD(generic_error_format__args);
ATF_TC_BODY(generic_error_format__args,tc)246*754f425fSjmmv ATF_TC_BODY(generic_error_format__args, tc)
247*754f425fSjmmv {
248*754f425fSjmmv     kyua_error_t error = kyua_generic_error_new("%s message %d", "A", 123);
249*754f425fSjmmv     char buffer[1024];
250*754f425fSjmmv     kyua_error_format(error, buffer, sizeof(buffer));
251*754f425fSjmmv     ATF_REQUIRE_STREQ("A message 123", buffer);
252*754f425fSjmmv     kyua_error_free(error);
253*754f425fSjmmv }
254*754f425fSjmmv 
255*754f425fSjmmv 
256*754f425fSjmmv ATF_TC_WITHOUT_HEAD(libc_error_type);
ATF_TC_BODY(libc_error_type,tc)257*754f425fSjmmv ATF_TC_BODY(libc_error_type, tc)
258*754f425fSjmmv {
259*754f425fSjmmv     kyua_error_t error = kyua_libc_error_new(ENOMEM, "Nothing");
260*754f425fSjmmv     ATF_REQUIRE(kyua_error_is_type(error, kyua_libc_error_type));
261*754f425fSjmmv     kyua_error_free(error);
262*754f425fSjmmv }
263*754f425fSjmmv 
264*754f425fSjmmv 
265*754f425fSjmmv ATF_TC_WITHOUT_HEAD(libc_error_errno);
ATF_TC_BODY(libc_error_errno,tc)266*754f425fSjmmv ATF_TC_BODY(libc_error_errno, tc)
267*754f425fSjmmv {
268*754f425fSjmmv     kyua_error_t error = kyua_libc_error_new(EPERM, "Doesn't matter");
269*754f425fSjmmv     ATF_REQUIRE_EQ(EPERM, kyua_libc_error_errno(error));
270*754f425fSjmmv     kyua_error_free(error);
271*754f425fSjmmv }
272*754f425fSjmmv 
273*754f425fSjmmv 
274*754f425fSjmmv ATF_TC_WITHOUT_HEAD(libc_error_format__plain);
ATF_TC_BODY(libc_error_format__plain,tc)275*754f425fSjmmv ATF_TC_BODY(libc_error_format__plain, tc)
276*754f425fSjmmv {
277*754f425fSjmmv     kyua_error_t error = kyua_libc_error_new(ENOMEM, "Test message");
278*754f425fSjmmv     char buffer[1024];
279*754f425fSjmmv     kyua_error_format(error, buffer, sizeof(buffer));
280*754f425fSjmmv     ATF_REQUIRE(strstr(buffer, strerror(ENOMEM)) != NULL);
281*754f425fSjmmv     ATF_REQUIRE(strstr(buffer, "Test message") != NULL);
282*754f425fSjmmv     kyua_error_free(error);
283*754f425fSjmmv }
284*754f425fSjmmv 
285*754f425fSjmmv 
286*754f425fSjmmv ATF_TC_WITHOUT_HEAD(libc_error_format__args);
ATF_TC_BODY(libc_error_format__args,tc)287*754f425fSjmmv ATF_TC_BODY(libc_error_format__args, tc)
288*754f425fSjmmv {
289*754f425fSjmmv     kyua_error_t error = kyua_libc_error_new(EPERM, "%s message %d", "A", 123);
290*754f425fSjmmv     char buffer[1024];
291*754f425fSjmmv     kyua_error_format(error, buffer, sizeof(buffer));
292*754f425fSjmmv     ATF_REQUIRE(strstr(buffer, strerror(EPERM)) != NULL);
293*754f425fSjmmv     ATF_REQUIRE(strstr(buffer, "A message 123") != NULL);
294*754f425fSjmmv     kyua_error_free(error);
295*754f425fSjmmv }
296*754f425fSjmmv 
297*754f425fSjmmv 
298*754f425fSjmmv ATF_TC_WITHOUT_HEAD(oom_error_type);
ATF_TC_BODY(oom_error_type,tc)299*754f425fSjmmv ATF_TC_BODY(oom_error_type, tc)
300*754f425fSjmmv {
301*754f425fSjmmv     kyua_error_t error = kyua_oom_error_new();
302*754f425fSjmmv     ATF_REQUIRE(kyua_error_is_type(error, kyua_oom_error_type));
303*754f425fSjmmv     kyua_error_free(error);
304*754f425fSjmmv }
305*754f425fSjmmv 
306*754f425fSjmmv 
307*754f425fSjmmv ATF_TC_WITHOUT_HEAD(oom_error_data);
ATF_TC_BODY(oom_error_data,tc)308*754f425fSjmmv ATF_TC_BODY(oom_error_data, tc)
309*754f425fSjmmv {
310*754f425fSjmmv     kyua_error_t error = kyua_oom_error_new();
311*754f425fSjmmv     ATF_REQUIRE(kyua_error_data(error) == NULL);
312*754f425fSjmmv     kyua_error_free(error);
313*754f425fSjmmv }
314*754f425fSjmmv 
315*754f425fSjmmv 
316*754f425fSjmmv ATF_TC_WITHOUT_HEAD(oom_error_format);
ATF_TC_BODY(oom_error_format,tc)317*754f425fSjmmv ATF_TC_BODY(oom_error_format, tc)
318*754f425fSjmmv {
319*754f425fSjmmv     kyua_error_t error = kyua_oom_error_new();
320*754f425fSjmmv     char buffer[1024];
321*754f425fSjmmv     kyua_error_format(error, buffer, sizeof(buffer));
322*754f425fSjmmv     ATF_REQUIRE_STREQ("Not enough memory", buffer);
323*754f425fSjmmv     kyua_error_free(error);
324*754f425fSjmmv }
325*754f425fSjmmv 
326*754f425fSjmmv 
327*754f425fSjmmv ATF_TC_WITHOUT_HEAD(oom_error_reuse);
ATF_TC_BODY(oom_error_reuse,tc)328*754f425fSjmmv ATF_TC_BODY(oom_error_reuse, tc)
329*754f425fSjmmv {
330*754f425fSjmmv     {
331*754f425fSjmmv         kyua_error_t error = kyua_oom_error_new();
332*754f425fSjmmv         ATF_REQUIRE(kyua_error_is_type(error, kyua_oom_error_type));
333*754f425fSjmmv         ATF_REQUIRE(kyua_error_data(error) == NULL);
334*754f425fSjmmv         kyua_error_free(error);
335*754f425fSjmmv     }
336*754f425fSjmmv 
337*754f425fSjmmv     {
338*754f425fSjmmv         kyua_error_t error = kyua_oom_error_new();
339*754f425fSjmmv         ATF_REQUIRE(kyua_error_is_type(error, kyua_oom_error_type));
340*754f425fSjmmv         ATF_REQUIRE(kyua_error_data(error) == NULL);
341*754f425fSjmmv         kyua_error_free(error);
342*754f425fSjmmv     }
343*754f425fSjmmv }
344*754f425fSjmmv 
345*754f425fSjmmv 
346*754f425fSjmmv ATF_TC_WITHOUT_HEAD(usage_error_type);
ATF_TC_BODY(usage_error_type,tc)347*754f425fSjmmv ATF_TC_BODY(usage_error_type, tc)
348*754f425fSjmmv {
349*754f425fSjmmv     kyua_error_t error = kyua_usage_error_new("Nothing");
350*754f425fSjmmv     ATF_REQUIRE(kyua_error_is_type(error, kyua_usage_error_type));
351*754f425fSjmmv     kyua_error_free(error);
352*754f425fSjmmv }
353*754f425fSjmmv 
354*754f425fSjmmv 
355*754f425fSjmmv ATF_TC_WITHOUT_HEAD(usage_error_format__plain);
ATF_TC_BODY(usage_error_format__plain,tc)356*754f425fSjmmv ATF_TC_BODY(usage_error_format__plain, tc)
357*754f425fSjmmv {
358*754f425fSjmmv     kyua_error_t error = kyua_usage_error_new("Test message");
359*754f425fSjmmv     char buffer[1024];
360*754f425fSjmmv     kyua_error_format(error, buffer, sizeof(buffer));
361*754f425fSjmmv     ATF_REQUIRE_STREQ("Test message", buffer);
362*754f425fSjmmv     kyua_error_free(error);
363*754f425fSjmmv }
364*754f425fSjmmv 
365*754f425fSjmmv 
366*754f425fSjmmv ATF_TC_WITHOUT_HEAD(usage_error_format__args);
ATF_TC_BODY(usage_error_format__args,tc)367*754f425fSjmmv ATF_TC_BODY(usage_error_format__args, tc)
368*754f425fSjmmv {
369*754f425fSjmmv     kyua_error_t error = kyua_usage_error_new("%s message %d", "A", 123);
370*754f425fSjmmv     char buffer[1024];
371*754f425fSjmmv     kyua_error_format(error, buffer, sizeof(buffer));
372*754f425fSjmmv     ATF_REQUIRE_STREQ("A message 123", buffer);
373*754f425fSjmmv     kyua_error_free(error);
374*754f425fSjmmv }
375*754f425fSjmmv 
376*754f425fSjmmv 
ATF_TP_ADD_TCS(tp)377*754f425fSjmmv ATF_TP_ADD_TCS(tp)
378*754f425fSjmmv {
379*754f425fSjmmv     ATF_TP_ADD_TC(tp, error_new__oom);
380*754f425fSjmmv     ATF_TP_ADD_TC(tp, error_subsume__none);
381*754f425fSjmmv     ATF_TP_ADD_TC(tp, error_subsume__primary);
382*754f425fSjmmv     ATF_TP_ADD_TC(tp, error_subsume__secondary);
383*754f425fSjmmv     ATF_TP_ADD_TC(tp, error_is_type__match);
384*754f425fSjmmv     ATF_TP_ADD_TC(tp, error_is_type__not_match);
385*754f425fSjmmv     ATF_TP_ADD_TC(tp, error_data__none);
386*754f425fSjmmv     ATF_TP_ADD_TC(tp, error_data__some);
387*754f425fSjmmv     ATF_TP_ADD_TC(tp, error_is_set__no);
388*754f425fSjmmv     ATF_TP_ADD_TC(tp, error_is_set__yes);
389*754f425fSjmmv     ATF_TP_ADD_TC(tp, error_format__default);
390*754f425fSjmmv     ATF_TP_ADD_TC(tp, error_format__custom__ok);
391*754f425fSjmmv     ATF_TP_ADD_TC(tp, error_format__custom__error);
392*754f425fSjmmv 
393*754f425fSjmmv     ATF_TP_ADD_TC(tp, err);
394*754f425fSjmmv     ATF_TP_ADD_TC(tp, fprintf);
395*754f425fSjmmv     ATF_TP_ADD_TC(tp, warn);
396*754f425fSjmmv 
397*754f425fSjmmv     ATF_TP_ADD_TC(tp, generic_error_type);
398*754f425fSjmmv     ATF_TP_ADD_TC(tp, generic_error_format__plain);
399*754f425fSjmmv     ATF_TP_ADD_TC(tp, generic_error_format__args);
400*754f425fSjmmv 
401*754f425fSjmmv     ATF_TP_ADD_TC(tp, libc_error_type);
402*754f425fSjmmv     ATF_TP_ADD_TC(tp, libc_error_errno);
403*754f425fSjmmv     ATF_TP_ADD_TC(tp, libc_error_format__plain);
404*754f425fSjmmv     ATF_TP_ADD_TC(tp, libc_error_format__args);
405*754f425fSjmmv 
406*754f425fSjmmv     ATF_TP_ADD_TC(tp, oom_error_type);
407*754f425fSjmmv     ATF_TP_ADD_TC(tp, oom_error_data);
408*754f425fSjmmv     ATF_TP_ADD_TC(tp, oom_error_format);
409*754f425fSjmmv     ATF_TP_ADD_TC(tp, oom_error_reuse);
410*754f425fSjmmv 
411*754f425fSjmmv     ATF_TP_ADD_TC(tp, usage_error_type);
412*754f425fSjmmv     ATF_TP_ADD_TC(tp, usage_error_format__plain);
413*754f425fSjmmv     ATF_TP_ADD_TC(tp, usage_error_format__args);
414*754f425fSjmmv 
415*754f425fSjmmv     return atf_no_error();
416*754f425fSjmmv }
417