xref: /freebsd/contrib/atf/atf-c/tc_test.c (revision c243e4902be8df1e643c76b5f18b68bb77cc5268)
1*c243e490SMarcel Moolenaar /*
2*c243e490SMarcel Moolenaar  * Automated Testing Framework (atf)
3*c243e490SMarcel Moolenaar  *
4*c243e490SMarcel Moolenaar  * Copyright (c) 2008 The NetBSD Foundation, Inc.
5*c243e490SMarcel Moolenaar  * All rights reserved.
6*c243e490SMarcel Moolenaar  *
7*c243e490SMarcel Moolenaar  * Redistribution and use in source and binary forms, with or without
8*c243e490SMarcel Moolenaar  * modification, are permitted provided that the following conditions
9*c243e490SMarcel Moolenaar  * are met:
10*c243e490SMarcel Moolenaar  * 1. Redistributions of source code must retain the above copyright
11*c243e490SMarcel Moolenaar  *    notice, this list of conditions and the following disclaimer.
12*c243e490SMarcel Moolenaar  * 2. Redistributions in binary form must reproduce the above copyright
13*c243e490SMarcel Moolenaar  *    notice, this list of conditions and the following disclaimer in the
14*c243e490SMarcel Moolenaar  *    documentation and/or other materials provided with the distribution.
15*c243e490SMarcel Moolenaar  *
16*c243e490SMarcel Moolenaar  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17*c243e490SMarcel Moolenaar  * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18*c243e490SMarcel Moolenaar  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19*c243e490SMarcel Moolenaar  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20*c243e490SMarcel Moolenaar  * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21*c243e490SMarcel Moolenaar  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*c243e490SMarcel Moolenaar  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23*c243e490SMarcel Moolenaar  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24*c243e490SMarcel Moolenaar  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25*c243e490SMarcel Moolenaar  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26*c243e490SMarcel Moolenaar  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27*c243e490SMarcel Moolenaar  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*c243e490SMarcel Moolenaar  */
29*c243e490SMarcel Moolenaar 
30*c243e490SMarcel Moolenaar #include <stdbool.h>
31*c243e490SMarcel Moolenaar #include <string.h>
32*c243e490SMarcel Moolenaar 
33*c243e490SMarcel Moolenaar #include <atf-c.h>
34*c243e490SMarcel Moolenaar 
35*c243e490SMarcel Moolenaar #include "detail/test_helpers.h"
36*c243e490SMarcel Moolenaar 
37*c243e490SMarcel Moolenaar /* ---------------------------------------------------------------------
38*c243e490SMarcel Moolenaar  * Auxiliary test cases.
39*c243e490SMarcel Moolenaar  * --------------------------------------------------------------------- */
40*c243e490SMarcel Moolenaar 
41*c243e490SMarcel Moolenaar ATF_TC_HEAD(empty, tc)
42*c243e490SMarcel Moolenaar {
43*c243e490SMarcel Moolenaar     if (tc != NULL) {}
44*c243e490SMarcel Moolenaar }
45*c243e490SMarcel Moolenaar ATF_TC_BODY(empty, tc)
46*c243e490SMarcel Moolenaar {
47*c243e490SMarcel Moolenaar }
48*c243e490SMarcel Moolenaar 
49*c243e490SMarcel Moolenaar ATF_TC_HEAD(test_var, tc)
50*c243e490SMarcel Moolenaar {
51*c243e490SMarcel Moolenaar     atf_tc_set_md_var(tc, "test-var", "Test text");
52*c243e490SMarcel Moolenaar }
53*c243e490SMarcel Moolenaar 
54*c243e490SMarcel Moolenaar /* ---------------------------------------------------------------------
55*c243e490SMarcel Moolenaar  * Test cases for the "atf_tc_t" type.
56*c243e490SMarcel Moolenaar  * --------------------------------------------------------------------- */
57*c243e490SMarcel Moolenaar 
58*c243e490SMarcel Moolenaar ATF_TC(init);
59*c243e490SMarcel Moolenaar ATF_TC_HEAD(init, tc)
60*c243e490SMarcel Moolenaar {
61*c243e490SMarcel Moolenaar     atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_init function");
62*c243e490SMarcel Moolenaar }
63*c243e490SMarcel Moolenaar ATF_TC_BODY(init, tcin)
64*c243e490SMarcel Moolenaar {
65*c243e490SMarcel Moolenaar     atf_tc_t tc;
66*c243e490SMarcel Moolenaar 
67*c243e490SMarcel Moolenaar     RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty),
68*c243e490SMarcel Moolenaar                    ATF_TC_BODY_NAME(empty), NULL, NULL));
69*c243e490SMarcel Moolenaar     ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test1") == 0);
70*c243e490SMarcel Moolenaar     ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
71*c243e490SMarcel Moolenaar     atf_tc_fini(&tc);
72*c243e490SMarcel Moolenaar 
73*c243e490SMarcel Moolenaar     RE(atf_tc_init(&tc, "test2", ATF_TC_HEAD_NAME(test_var),
74*c243e490SMarcel Moolenaar                    ATF_TC_BODY_NAME(empty), NULL, NULL));
75*c243e490SMarcel Moolenaar     ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test2") == 0);
76*c243e490SMarcel Moolenaar     ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var"));
77*c243e490SMarcel Moolenaar     atf_tc_fini(&tc);
78*c243e490SMarcel Moolenaar }
79*c243e490SMarcel Moolenaar 
80*c243e490SMarcel Moolenaar ATF_TC(init_pack);
81*c243e490SMarcel Moolenaar ATF_TC_HEAD(init_pack, tc)
82*c243e490SMarcel Moolenaar {
83*c243e490SMarcel Moolenaar     atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_init_pack function");
84*c243e490SMarcel Moolenaar }
85*c243e490SMarcel Moolenaar ATF_TC_BODY(init_pack, tcin)
86*c243e490SMarcel Moolenaar {
87*c243e490SMarcel Moolenaar     atf_tc_t tc;
88*c243e490SMarcel Moolenaar     atf_tc_pack_t tcp1 = {
89*c243e490SMarcel Moolenaar         .m_ident = "test1",
90*c243e490SMarcel Moolenaar         .m_head = ATF_TC_HEAD_NAME(empty),
91*c243e490SMarcel Moolenaar         .m_body = ATF_TC_BODY_NAME(empty),
92*c243e490SMarcel Moolenaar         .m_cleanup = NULL,
93*c243e490SMarcel Moolenaar     };
94*c243e490SMarcel Moolenaar     atf_tc_pack_t tcp2 = {
95*c243e490SMarcel Moolenaar         .m_ident = "test2",
96*c243e490SMarcel Moolenaar         .m_head = ATF_TC_HEAD_NAME(test_var),
97*c243e490SMarcel Moolenaar         .m_body = ATF_TC_BODY_NAME(empty),
98*c243e490SMarcel Moolenaar         .m_cleanup = NULL,
99*c243e490SMarcel Moolenaar     };
100*c243e490SMarcel Moolenaar 
101*c243e490SMarcel Moolenaar     RE(atf_tc_init_pack(&tc, &tcp1, NULL));
102*c243e490SMarcel Moolenaar     ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test1") == 0);
103*c243e490SMarcel Moolenaar     ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
104*c243e490SMarcel Moolenaar     atf_tc_fini(&tc);
105*c243e490SMarcel Moolenaar 
106*c243e490SMarcel Moolenaar     RE(atf_tc_init_pack(&tc, &tcp2, NULL));
107*c243e490SMarcel Moolenaar     ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test2") == 0);
108*c243e490SMarcel Moolenaar     ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var"));
109*c243e490SMarcel Moolenaar     atf_tc_fini(&tc);
110*c243e490SMarcel Moolenaar }
111*c243e490SMarcel Moolenaar 
112*c243e490SMarcel Moolenaar ATF_TC(vars);
113*c243e490SMarcel Moolenaar ATF_TC_HEAD(vars, tc)
114*c243e490SMarcel Moolenaar {
115*c243e490SMarcel Moolenaar     atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_get_md_var, "
116*c243e490SMarcel Moolenaar                       "atf_tc_has_md_var and atf_tc_set_md_var functions");
117*c243e490SMarcel Moolenaar }
118*c243e490SMarcel Moolenaar ATF_TC_BODY(vars, tcin)
119*c243e490SMarcel Moolenaar {
120*c243e490SMarcel Moolenaar     atf_tc_t tc;
121*c243e490SMarcel Moolenaar 
122*c243e490SMarcel Moolenaar     RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty),
123*c243e490SMarcel Moolenaar                    ATF_TC_BODY_NAME(empty), NULL, NULL));
124*c243e490SMarcel Moolenaar     ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
125*c243e490SMarcel Moolenaar     RE(atf_tc_set_md_var(&tc, "test-var", "Test value"));
126*c243e490SMarcel Moolenaar     ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var"));
127*c243e490SMarcel Moolenaar     ATF_REQUIRE(strcmp(atf_tc_get_md_var(&tc, "test-var"), "Test value") == 0);
128*c243e490SMarcel Moolenaar     atf_tc_fini(&tc);
129*c243e490SMarcel Moolenaar }
130*c243e490SMarcel Moolenaar 
131*c243e490SMarcel Moolenaar ATF_TC(config);
132*c243e490SMarcel Moolenaar ATF_TC_HEAD(config, tc)
133*c243e490SMarcel Moolenaar {
134*c243e490SMarcel Moolenaar     atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_get_config_var, "
135*c243e490SMarcel Moolenaar                       "atf_tc_get_config_var_wd and atf_tc_has_config_var "
136*c243e490SMarcel Moolenaar                       "functions");
137*c243e490SMarcel Moolenaar }
138*c243e490SMarcel Moolenaar ATF_TC_BODY(config, tcin)
139*c243e490SMarcel Moolenaar {
140*c243e490SMarcel Moolenaar     atf_tc_t tc;
141*c243e490SMarcel Moolenaar     const char *const config[] = { "test-var", "test-value", NULL };
142*c243e490SMarcel Moolenaar 
143*c243e490SMarcel Moolenaar     RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty),
144*c243e490SMarcel Moolenaar                    ATF_TC_BODY_NAME(empty), NULL, NULL));
145*c243e490SMarcel Moolenaar     ATF_REQUIRE(!atf_tc_has_config_var(&tc, "test-var"));
146*c243e490SMarcel Moolenaar     ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
147*c243e490SMarcel Moolenaar     atf_tc_fini(&tc);
148*c243e490SMarcel Moolenaar 
149*c243e490SMarcel Moolenaar     RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty),
150*c243e490SMarcel Moolenaar                    ATF_TC_BODY_NAME(empty), NULL, config));
151*c243e490SMarcel Moolenaar     ATF_REQUIRE(atf_tc_has_config_var(&tc, "test-var"));
152*c243e490SMarcel Moolenaar     ATF_REQUIRE(strcmp(atf_tc_get_config_var(&tc, "test-var"),
153*c243e490SMarcel Moolenaar                      "test-value") == 0);
154*c243e490SMarcel Moolenaar     ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
155*c243e490SMarcel Moolenaar     ATF_REQUIRE(!atf_tc_has_config_var(&tc, "test-var2"));
156*c243e490SMarcel Moolenaar     ATF_REQUIRE(strcmp(atf_tc_get_config_var_wd(&tc, "test-var2", "def-value"),
157*c243e490SMarcel Moolenaar                      "def-value") == 0);
158*c243e490SMarcel Moolenaar     atf_tc_fini(&tc);
159*c243e490SMarcel Moolenaar }
160*c243e490SMarcel Moolenaar 
161*c243e490SMarcel Moolenaar /* ---------------------------------------------------------------------
162*c243e490SMarcel Moolenaar  * Test cases for the free functions.
163*c243e490SMarcel Moolenaar  * --------------------------------------------------------------------- */
164*c243e490SMarcel Moolenaar 
165*c243e490SMarcel Moolenaar /* TODO: Add test cases for atf_tc_run.  This is going to be very tough,
166*c243e490SMarcel Moolenaar  * but good tests here could allow us to avoid much of the indirect
167*c243e490SMarcel Moolenaar  * testing done later on. */
168*c243e490SMarcel Moolenaar 
169*c243e490SMarcel Moolenaar /* ---------------------------------------------------------------------
170*c243e490SMarcel Moolenaar  * Tests cases for the header file.
171*c243e490SMarcel Moolenaar  * --------------------------------------------------------------------- */
172*c243e490SMarcel Moolenaar 
173*c243e490SMarcel Moolenaar HEADER_TC(include, "atf-c/tc.h");
174*c243e490SMarcel Moolenaar 
175*c243e490SMarcel Moolenaar /* ---------------------------------------------------------------------
176*c243e490SMarcel Moolenaar  * Main.
177*c243e490SMarcel Moolenaar  * --------------------------------------------------------------------- */
178*c243e490SMarcel Moolenaar 
179*c243e490SMarcel Moolenaar ATF_TP_ADD_TCS(tp)
180*c243e490SMarcel Moolenaar {
181*c243e490SMarcel Moolenaar     /* Add the test cases for the "atf_tcr_t" type. */
182*c243e490SMarcel Moolenaar     ATF_TP_ADD_TC(tp, init);
183*c243e490SMarcel Moolenaar     ATF_TP_ADD_TC(tp, init_pack);
184*c243e490SMarcel Moolenaar     ATF_TP_ADD_TC(tp, vars);
185*c243e490SMarcel Moolenaar     ATF_TP_ADD_TC(tp, config);
186*c243e490SMarcel Moolenaar 
187*c243e490SMarcel Moolenaar     /* Add the test cases for the free functions. */
188*c243e490SMarcel Moolenaar     /* TODO */
189*c243e490SMarcel Moolenaar 
190*c243e490SMarcel Moolenaar     /* Add the test cases for the header file. */
191*c243e490SMarcel Moolenaar     ATF_TP_ADD_TC(tp, include);
192*c243e490SMarcel Moolenaar 
193*c243e490SMarcel Moolenaar     return atf_no_error();
194*c243e490SMarcel Moolenaar }
195