1119418Sobrien/* Copyright (c) 2008 The NetBSD Foundation, Inc.
223599Smarkm * All rights reserved.
351694Sroger *
423599Smarkm * Redistribution and use in source and binary forms, with or without
523599Smarkm * modification, are permitted provided that the following conditions
623599Smarkm * are met:
723599Smarkm * 1. Redistributions of source code must retain the above copyright
823599Smarkm *    notice, this list of conditions and the following disclaimer.
923599Smarkm * 2. Redistributions in binary form must reproduce the above copyright
1023599Smarkm *    notice, this list of conditions and the following disclaimer in the
1123599Smarkm *    documentation and/or other materials provided with the distribution.
1223599Smarkm *
1323599Smarkm * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
1423599Smarkm * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
1523599Smarkm * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1651694Sroger * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1751694Sroger * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
1823599Smarkm * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1923599Smarkm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
2023599Smarkm * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2123599Smarkm * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
2223599Smarkm * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2323599Smarkm * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
2423599Smarkm * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  */
2523599Smarkm
2623599Smarkm#include "atf-c/tc.h"
2723599Smarkm
2823599Smarkm#include <stdbool.h>
2923599Smarkm#include <string.h>
3023599Smarkm
3123599Smarkm#include <atf-c.h>
3223599Smarkm
33119418Sobrien#include "atf-c/detail/test_helpers.h"
3423599Smarkm
3523599Smarkm/* ---------------------------------------------------------------------
3623599Smarkm * Auxiliary test cases.
3723599Smarkm * --------------------------------------------------------------------- */
3823599Smarkm
3923599SmarkmATF_TC_HEAD(empty, tc)
4023599Smarkm{
4123599Smarkm    if (tc != NULL) {}
4223599Smarkm}
4323599SmarkmATF_TC_BODY(empty, tc)
4423599Smarkm{
4523599Smarkm}
4623599Smarkm
4723599SmarkmATF_TC_HEAD(test_var, tc)
4823599Smarkm{
4923599Smarkm    atf_tc_set_md_var(tc, "test-var", "Test text");
5023599Smarkm}
5123599Smarkm
5223599Smarkm/* ---------------------------------------------------------------------
5323599Smarkm * Test cases for the "atf_tc_t" type.
5423599Smarkm * --------------------------------------------------------------------- */
5523599Smarkm
5623599SmarkmATF_TC(init);
5723599SmarkmATF_TC_HEAD(init, tc)
5823599Smarkm{
5923599Smarkm    atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_init function");
6023599Smarkm}
6123599SmarkmATF_TC_BODY(init, tcin)
6223599Smarkm{
6323599Smarkm    atf_tc_t tc;
6423599Smarkm
65119418Sobrien    RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty),
66119418Sobrien                   ATF_TC_BODY_NAME(empty), NULL, NULL));
67119418Sobrien    ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test1") == 0);
68119418Sobrien    ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
69119418Sobrien    atf_tc_fini(&tc);
70119418Sobrien
71119418Sobrien    RE(atf_tc_init(&tc, "test2", ATF_TC_HEAD_NAME(test_var),
72119418Sobrien                   ATF_TC_BODY_NAME(empty), NULL, NULL));
73119418Sobrien    ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test2") == 0);
74119418Sobrien    ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var"));
75119418Sobrien    atf_tc_fini(&tc);
76119418Sobrien}
77119418Sobrien
78119418SobrienATF_TC(init_pack);
79119418SobrienATF_TC_HEAD(init_pack, tc)
80119418Sobrien{
81119418Sobrien    atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_init_pack function");
82119418Sobrien}
83119418SobrienATF_TC_BODY(init_pack, tcin)
84119418Sobrien{
85119418Sobrien    atf_tc_t tc;
86119418Sobrien    atf_tc_pack_t tcp1 = {
87119418Sobrien        .m_ident = "test1",
88119418Sobrien        .m_head = ATF_TC_HEAD_NAME(empty),
89119418Sobrien        .m_body = ATF_TC_BODY_NAME(empty),
90119418Sobrien        .m_cleanup = NULL,
91119418Sobrien    };
9259014Sroger    atf_tc_pack_t tcp2 = {
9323599Smarkm        .m_ident = "test2",
9448781Sroger        .m_head = ATF_TC_HEAD_NAME(test_var),
95100431Speter        .m_body = ATF_TC_BODY_NAME(empty),
9648781Sroger        .m_cleanup = NULL,
9748781Sroger    };
9848781Sroger
9948781Sroger    RE(atf_tc_init_pack(&tc, &tcp1, NULL));
10046877Sroger    ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test1") == 0);
10162214Sroger    ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
10262214Sroger    atf_tc_fini(&tc);
10362214Sroger
10462214Sroger    RE(atf_tc_init_pack(&tc, &tcp2, NULL));
10562214Sroger    ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test2") == 0);
10662214Sroger    ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var"));
10723599Smarkm    atf_tc_fini(&tc);
10823599Smarkm}
10923599Smarkm
110139917SimpATF_TC(vars);
11176166SmarkmATF_TC_HEAD(vars, tc)
112254025Sjeff{
11376166Smarkm    atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_get_md_var, "
11473930Sjhb                      "atf_tc_has_md_var and atf_tc_set_md_var functions");
11523599Smarkm}
116139917SimpATF_TC_BODY(vars, tcin)
117139917Simp{
11823599Smarkm    atf_tc_t tc;
11923599Smarkm
12023599Smarkm    RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty),
12123599Smarkm                   ATF_TC_BODY_NAME(empty), NULL, NULL));
12223599Smarkm    ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
12323599Smarkm    RE(atf_tc_set_md_var(&tc, "test-var", "Test value"));
12450693Sroger    ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var"));
12548781Sroger    ATF_REQUIRE(strcmp(atf_tc_get_md_var(&tc, "test-var"), "Test value") == 0);
12667306Sroger    atf_tc_fini(&tc);
12767306Sroger}
12873930Sjhb
12973930SjhbATF_TC(config);
130119277SimpATF_TC_HEAD(config, tc)
131119277Simp{
132119277Simp    atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_get_config_var, "
13367306Sroger                      "atf_tc_get_config_var_wd and atf_tc_has_config_var "
13467306Sroger                      "functions");
13559014Sroger}
13659014SrogerATF_TC_BODY(config, tcin)
13759014Sroger{
138123291Sobrien    atf_tc_t tc;
139123291Sobrien    const char *const config[] = { "test-var", "test-value", NULL };
14051537Sroger
14151694Sroger    RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty),
14251694Sroger                   ATF_TC_BODY_NAME(empty), NULL, NULL));
14351694Sroger    ATF_REQUIRE(!atf_tc_has_config_var(&tc, "test-var"));
14459014Sroger    ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
14551694Sroger    atf_tc_fini(&tc);
14665692Sroger
14765692Sroger    RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty),
14865692Sroger                   ATF_TC_BODY_NAME(empty), NULL, config));
14948781Sroger    ATF_REQUIRE(atf_tc_has_config_var(&tc, "test-var"));
15065692Sroger    ATF_REQUIRE(strcmp(atf_tc_get_config_var(&tc, "test-var"),
15151537Sroger                     "test-value") == 0);
15250693Sroger    ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var"));
15350693Sroger    ATF_REQUIRE(!atf_tc_has_config_var(&tc, "test-var2"));
15450693Sroger    ATF_REQUIRE(strcmp(atf_tc_get_config_var_wd(&tc, "test-var2", "def-value"),
15550693Sroger                     "def-value") == 0);
15646877Sroger    atf_tc_fini(&tc);
15748781Sroger}
15862112Sroger
15962112Sroger/* ---------------------------------------------------------------------
16062112Sroger * Test cases for the free functions.
16162112Sroger * --------------------------------------------------------------------- */
16262112Sroger
16323599Smarkm/* TODO: Add test cases for atf_tc_run.  This is going to be very tough,
16462112Sroger * but good tests here could allow us to avoid much of the indirect
16529233Smarkm * testing done later on. */
16629233Smarkm
16748781Sroger/* ---------------------------------------------------------------------
16850693Sroger * Main.
16950693Sroger * --------------------------------------------------------------------- */
17050693Sroger
17150693SrogerATF_TP_ADD_TCS(tp)
17273930Sjhb{
17373930Sjhb    /* Add the test cases for the "atf_tcr_t" type. */
17450693Sroger    ATF_TP_ADD_TC(tp, init);
17550693Sroger    ATF_TP_ADD_TC(tp, init_pack);
17650693Sroger    ATF_TP_ADD_TC(tp, vars);
17750693Sroger    ATF_TP_ADD_TC(tp, config);
17850693Sroger
17950693Sroger    /* Add the test cases for the free functions. */
18050693Sroger    /* TODO */
18159014Sroger
18262214Sroger    return atf_no_error();
18362214Sroger}
18462214Sroger