1273929Sjmmv/* Copyright (c) 2007 The NetBSD Foundation, Inc.
2240116Smarcel * All rights reserved.
3240116Smarcel *
4240116Smarcel * Redistribution and use in source and binary forms, with or without
5240116Smarcel * modification, are permitted provided that the following conditions
6240116Smarcel * are met:
7240116Smarcel * 1. Redistributions of source code must retain the above copyright
8240116Smarcel *    notice, this list of conditions and the following disclaimer.
9240116Smarcel * 2. Redistributions in binary form must reproduce the above copyright
10240116Smarcel *    notice, this list of conditions and the following disclaimer in the
11240116Smarcel *    documentation and/or other materials provided with the distribution.
12240116Smarcel *
13240116Smarcel * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
14240116Smarcel * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
15240116Smarcel * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
16240116Smarcel * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17240116Smarcel * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
18240116Smarcel * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19240116Smarcel * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
20240116Smarcel * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21240116Smarcel * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
22240116Smarcel * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23240116Smarcel * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
24273929Sjmmv * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  */
25240116Smarcel
26273929Sjmmv#include "atf-c/detail/env.h"
27273929Sjmmv
28240116Smarcel#include <stdlib.h>
29240116Smarcel#include <string.h>
30240116Smarcel
31240116Smarcel#include <atf-c.h>
32240116Smarcel
33273929Sjmmv#include "atf-c/detail/test_helpers.h"
34273929Sjmmv#include "atf-c/detail/text.h"
35240116Smarcel
36240116Smarcel/* ---------------------------------------------------------------------
37240116Smarcel * Test cases for the free functions.
38240116Smarcel * --------------------------------------------------------------------- */
39240116Smarcel
40240116SmarcelATF_TC(has);
41240116SmarcelATF_TC_HEAD(has, tc)
42240116Smarcel{
43240116Smarcel    atf_tc_set_md_var(tc, "descr", "Tests the atf_env_has function");
44240116Smarcel}
45240116SmarcelATF_TC_BODY(has, tc)
46240116Smarcel{
47240116Smarcel    ATF_REQUIRE(atf_env_has("PATH"));
48240116Smarcel    ATF_REQUIRE(!atf_env_has("_UNDEFINED_VARIABLE_"));
49240116Smarcel}
50240116Smarcel
51240116SmarcelATF_TC(get);
52240116SmarcelATF_TC_HEAD(get, tc)
53240116Smarcel{
54240116Smarcel    atf_tc_set_md_var(tc, "descr", "Tests the atf_env_get function");
55240116Smarcel}
56240116SmarcelATF_TC_BODY(get, tc)
57240116Smarcel{
58240116Smarcel    const char *val;
59240116Smarcel
60240116Smarcel    ATF_REQUIRE(atf_env_has("PATH"));
61240116Smarcel
62240116Smarcel    val = atf_env_get("PATH");
63240116Smarcel    ATF_REQUIRE(strlen(val) > 0);
64240116Smarcel    ATF_REQUIRE(strchr(val, ':') != NULL);
65240116Smarcel}
66240116Smarcel
67273929SjmmvATF_TC(get_with_default);
68273929SjmmvATF_TC_HEAD(get_with_default, tc)
69273929Sjmmv{
70273929Sjmmv    atf_tc_set_md_var(tc, "descr", "Tests the atf_env_get_with_default "
71273929Sjmmv                      "function");
72273929Sjmmv}
73273929SjmmvATF_TC_BODY(get_with_default, tc)
74273929Sjmmv{
75273929Sjmmv    const char *val;
76273929Sjmmv
77273929Sjmmv    ATF_REQUIRE(atf_env_has("PATH"));
78273929Sjmmv
79273929Sjmmv    val = atf_env_get_with_default("PATH", "unknown");
80273929Sjmmv    ATF_REQUIRE(strcmp(val, "unknown") != 0);
81273929Sjmmv
82273929Sjmmv    val = atf_env_get_with_default("_UNKNOWN_VARIABLE_", "foo bar");
83273929Sjmmv    ATF_REQUIRE(strcmp(val, "foo bar") == 0);
84273929Sjmmv}
85273929Sjmmv
86240116SmarcelATF_TC(set);
87240116SmarcelATF_TC_HEAD(set, tc)
88240116Smarcel{
89240116Smarcel    atf_tc_set_md_var(tc, "descr", "Tests the atf_env_set function");
90240116Smarcel}
91240116SmarcelATF_TC_BODY(set, tc)
92240116Smarcel{
93240116Smarcel    char *oldval;
94240116Smarcel
95240116Smarcel    ATF_REQUIRE(atf_env_has("PATH"));
96240116Smarcel    RE(atf_text_format(&oldval, "%s", atf_env_get("PATH")));
97240116Smarcel    RE(atf_env_set("PATH", "foo-bar"));
98240116Smarcel    ATF_REQUIRE(strcmp(atf_env_get("PATH"), oldval) != 0);
99240116Smarcel    ATF_REQUIRE(strcmp(atf_env_get("PATH"), "foo-bar") == 0);
100240116Smarcel    free(oldval);
101240116Smarcel
102240116Smarcel    ATF_REQUIRE(!atf_env_has("_UNDEFINED_VARIABLE_"));
103240116Smarcel    RE(atf_env_set("_UNDEFINED_VARIABLE_", "foo2-bar2"));
104240116Smarcel    ATF_REQUIRE(strcmp(atf_env_get("_UNDEFINED_VARIABLE_"),
105240116Smarcel                     "foo2-bar2") == 0);
106240116Smarcel}
107240116Smarcel
108240116SmarcelATF_TC(unset);
109240116SmarcelATF_TC_HEAD(unset, tc)
110240116Smarcel{
111240116Smarcel    atf_tc_set_md_var(tc, "descr", "Tests the atf_env_unset function");
112240116Smarcel}
113240116SmarcelATF_TC_BODY(unset, tc)
114240116Smarcel{
115240116Smarcel    ATF_REQUIRE(atf_env_has("PATH"));
116240116Smarcel    RE(atf_env_unset("PATH"));
117240116Smarcel    ATF_REQUIRE(!atf_env_has("PATH"));
118240116Smarcel}
119240116Smarcel
120240116Smarcel/* ---------------------------------------------------------------------
121240116Smarcel * Main.
122240116Smarcel * --------------------------------------------------------------------- */
123240116Smarcel
124240116SmarcelATF_TP_ADD_TCS(tp)
125240116Smarcel{
126240116Smarcel    ATF_TP_ADD_TC(tp, has);
127240116Smarcel    ATF_TP_ADD_TC(tp, get);
128273929Sjmmv    ATF_TP_ADD_TC(tp, get_with_default);
129240116Smarcel    ATF_TP_ADD_TC(tp, set);
130240116Smarcel    ATF_TP_ADD_TC(tp, unset);
131240116Smarcel
132240116Smarcel    return atf_no_error();
133240116Smarcel}
134