1227569Sphilip/*
2284555Sarybchik * Automated Testing Framework (atf)
3227569Sphilip *
4227569Sphilip * Copyright (c) 2008 The NetBSD Foundation, Inc.
5227569Sphilip * All rights reserved.
6227569Sphilip *
7227569Sphilip * Redistribution and use in source and binary forms, with or without
8227569Sphilip * modification, are permitted provided that the following conditions
9284555Sarybchik * are met:
10227569Sphilip * 1. Redistributions of source code must retain the above copyright
11284555Sarybchik *    notice, this list of conditions and the following disclaimer.
12284555Sarybchik * 2. Redistributions in binary form must reproduce the above copyright
13284555Sarybchik *    notice, this list of conditions and the following disclaimer in the
14284555Sarybchik *    documentation and/or other materials provided with the distribution.
15284555Sarybchik *
16284555Sarybchik * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17284555Sarybchik * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18284555Sarybchik * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19284555Sarybchik * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20284555Sarybchik * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21284555Sarybchik * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22284555Sarybchik * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23284555Sarybchik * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24284555Sarybchik * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25284555Sarybchik * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26284555Sarybchik * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27284555Sarybchik * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28284555Sarybchik */
29284555Sarybchik
30284555Sarybchik#include <stdbool.h>
31284555Sarybchik#include <string.h>
32227569Sphilip
33227569Sphilip#include <atf-c.h>
34227569Sphilip
35227569Sphilip#include "detail/test_helpers.h"
36227569Sphilip
37227569Sphilip/* ---------------------------------------------------------------------
38227569Sphilip * Auxiliary test cases.
39227569Sphilip * --------------------------------------------------------------------- */
40227569Sphilip
41227569SphilipATF_TC_HEAD(empty, tc)
42227569Sphilip{
43227569Sphilip    if (tc != NULL) {}
44227569Sphilip}
45227569SphilipATF_TC_BODY(empty, tc)
46227569Sphilip{
47227569Sphilip}
48227569Sphilip
49284555SarybchikATF_TC_HEAD(test_var, tc)
50280502Sarybchik{
51227569Sphilip    atf_tc_set_md_var(tc, "test-var", "Test text");
52227569Sphilip}
53227569Sphilip
54227569Sphilip/* ---------------------------------------------------------------------
55227569Sphilip * Test cases for the "atf_tc_t" type.
56227569Sphilip * --------------------------------------------------------------------- */
57227569Sphilip
58227569SphilipATF_TC(init);
59227569SphilipATF_TC_HEAD(init, tc)
60227569Sphilip{
61227569Sphilip    atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_init function");
62227569Sphilip}
63227569SphilipATF_TC_BODY(init, tcin)
64284555Sarybchik{
65280601Sarybchik    atf_tc_t tc;
66227569Sphilip
67283204Sarybchik    RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty),
68283216Sarybchik                   ATF_TC_BODY_NAME(empty), NULL, NULL));
69283205Sarybchik    ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test1") == 0);
70283216Sarybchik    ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
71283217Sarybchik    atf_tc_fini(&tc);
72292089Sarybchik
73280501Sarybchik    RE(atf_tc_init(&tc, "test2", ATF_TC_HEAD_NAME(test_var),
74283215Sarybchik                   ATF_TC_BODY_NAME(empty), NULL, NULL));
75292089Sarybchik    ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test2") == 0);
76227569Sphilip    ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var"));
77227569Sphilip    atf_tc_fini(&tc);
78227569Sphilip}
79280502Sarybchik
80280502SarybchikATF_TC(init_pack);
81280502SarybchikATF_TC_HEAD(init_pack, tc)
82280502Sarybchik{
83280502Sarybchik    atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_init_pack function");
84280502Sarybchik}
85280502SarybchikATF_TC_BODY(init_pack, tcin)
86280502Sarybchik{
87280502Sarybchik    atf_tc_t tc;
88280502Sarybchik    atf_tc_pack_t tcp1 = {
89280502Sarybchik        .m_ident = "test1",
90280502Sarybchik        .m_head = ATF_TC_HEAD_NAME(empty),
91280502Sarybchik        .m_body = ATF_TC_BODY_NAME(empty),
92280502Sarybchik        .m_cleanup = NULL,
93280502Sarybchik    };
94280502Sarybchik    atf_tc_pack_t tcp2 = {
95280502Sarybchik        .m_ident = "test2",
96280502Sarybchik        .m_head = ATF_TC_HEAD_NAME(test_var),
97292089Sarybchik        .m_body = ATF_TC_BODY_NAME(empty),
98292089Sarybchik        .m_cleanup = NULL,
99292089Sarybchik    };
100292089Sarybchik
101292089Sarybchik    RE(atf_tc_init_pack(&tc, &tcp1, NULL));
102292089Sarybchik    ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test1") == 0);
103292089Sarybchik    ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
104292089Sarybchik    atf_tc_fini(&tc);
105293970Sarybchik
106293970Sarybchik    RE(atf_tc_init_pack(&tc, &tcp2, NULL));
107293970Sarybchik    ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test2") == 0);
108293970Sarybchik    ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var"));
109293970Sarybchik    atf_tc_fini(&tc);
110293970Sarybchik}
111293970Sarybchik
112293946SarybchikATF_TC(vars);
113293946SarybchikATF_TC_HEAD(vars, tc)
114293946Sarybchik{
115293946Sarybchik    atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_get_md_var, "
116293946Sarybchik                      "atf_tc_has_md_var and atf_tc_set_md_var functions");
117293946Sarybchik}
118227569SphilipATF_TC_BODY(vars, tcin)
119227569Sphilip{
120227569Sphilip    atf_tc_t tc;
121227569Sphilip
122284555Sarybchik    RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty),
123284555Sarybchik                   ATF_TC_BODY_NAME(empty), NULL, NULL));
124284555Sarybchik    ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
125284555Sarybchik    RE(atf_tc_set_md_var(&tc, "test-var", "Test value"));
126284555Sarybchik    ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var"));
127284555Sarybchik    ATF_REQUIRE(strcmp(atf_tc_get_md_var(&tc, "test-var"), "Test value") == 0);
128284555Sarybchik    atf_tc_fini(&tc);
129284555Sarybchik}
130284555Sarybchik
131284555SarybchikATF_TC(config);
132284555SarybchikATF_TC_HEAD(config, tc)
133284555Sarybchik{
134284555Sarybchik    atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_get_config_var, "
135284555Sarybchik                      "atf_tc_get_config_var_wd and atf_tc_has_config_var "
136284555Sarybchik                      "functions");
137284555Sarybchik}
138284555SarybchikATF_TC_BODY(config, tcin)
139284555Sarybchik{
140284555Sarybchik    atf_tc_t tc;
141284555Sarybchik    const char *const config[] = { "test-var", "test-value", NULL };
142284555Sarybchik
143284555Sarybchik    RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty),
144284555Sarybchik                   ATF_TC_BODY_NAME(empty), NULL, NULL));
145284555Sarybchik    ATF_REQUIRE(!atf_tc_has_config_var(&tc, "test-var"));
146284555Sarybchik    ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
147284555Sarybchik    atf_tc_fini(&tc);
148284555Sarybchik
149284555Sarybchik    RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty),
150284555Sarybchik                   ATF_TC_BODY_NAME(empty), NULL, config));
151284555Sarybchik    ATF_REQUIRE(atf_tc_has_config_var(&tc, "test-var"));
152284555Sarybchik    ATF_REQUIRE(strcmp(atf_tc_get_config_var(&tc, "test-var"),
153284555Sarybchik                     "test-value") == 0);
154284555Sarybchik    ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
155284555Sarybchik    ATF_REQUIRE(!atf_tc_has_config_var(&tc, "test-var2"));
156284555Sarybchik    ATF_REQUIRE(strcmp(atf_tc_get_config_var_wd(&tc, "test-var2", "def-value"),
157284555Sarybchik                     "def-value") == 0);
158284555Sarybchik    atf_tc_fini(&tc);
159284555Sarybchik}
160284555Sarybchik
161284555Sarybchik/* ---------------------------------------------------------------------
162284555Sarybchik * Test cases for the free functions.
163284555Sarybchik * --------------------------------------------------------------------- */
164284555Sarybchik
165284555Sarybchik/* TODO: Add test cases for atf_tc_run.  This is going to be very tough,
166284555Sarybchik * but good tests here could allow us to avoid much of the indirect
167284555Sarybchik * testing done later on. */
168284555Sarybchik
169284555Sarybchik/* ---------------------------------------------------------------------
170284555Sarybchik * Tests cases for the header file.
171284555Sarybchik * --------------------------------------------------------------------- */
172284555Sarybchik
173284555SarybchikHEADER_TC(include, "atf-c/tc.h");
174284555Sarybchik
175284555Sarybchik/* ---------------------------------------------------------------------
176284555Sarybchik * Main.
177284555Sarybchik * --------------------------------------------------------------------- */
178284555Sarybchik
179284555SarybchikATF_TP_ADD_TCS(tp)
180284555Sarybchik{
181284555Sarybchik    /* Add the test cases for the "atf_tcr_t" type. */
182284555Sarybchik    ATF_TP_ADD_TC(tp, init);
183284555Sarybchik    ATF_TP_ADD_TC(tp, init_pack);
184284555Sarybchik    ATF_TP_ADD_TC(tp, vars);
185284555Sarybchik    ATF_TP_ADD_TC(tp, config);
186284555Sarybchik
187284555Sarybchik    /* Add the test cases for the free functions. */
188284555Sarybchik    /* TODO */
189284555Sarybchik
190284555Sarybchik    /* Add the test cases for the header file. */
191284555Sarybchik    ATF_TP_ADD_TC(tp, include);
192284555Sarybchik
193284555Sarybchik    return atf_no_error();
194284555Sarybchik}
195284555Sarybchik