1240116Smarcel// 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
24240116Smarcel// IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25240116Smarcel
26273929Sjmmv#include "atf-c++/detail/env.hpp"
27240116Smarcel
28273929Sjmmv#include <atf-c++.hpp>
29240116Smarcel
30240116Smarcel// ------------------------------------------------------------------------
31240116Smarcel// Test cases for the free functions.
32240116Smarcel// ------------------------------------------------------------------------
33240116Smarcel
34240116SmarcelATF_TEST_CASE(has_get);
35240116SmarcelATF_TEST_CASE_HEAD(has_get)
36240116Smarcel{
37240116Smarcel    set_md_var("descr", "Tests the has and get functions");
38240116Smarcel}
39240116SmarcelATF_TEST_CASE_BODY(has_get)
40240116Smarcel{
41240116Smarcel    ATF_REQUIRE(atf::env::has("PATH"));
42240116Smarcel    ATF_REQUIRE(!atf::env::get("PATH").empty());
43240116Smarcel
44240116Smarcel    ATF_REQUIRE(!atf::env::has("_UNDEFINED_VARIABLE_"));
45240116Smarcel}
46240116Smarcel
47273929SjmmvATF_TEST_CASE(get_with_default);
48273929SjmmvATF_TEST_CASE_HEAD(get_with_default)
49273929Sjmmv{
50273929Sjmmv    set_md_var("descr", "Tests the get function with a default value");
51273929Sjmmv}
52273929SjmmvATF_TEST_CASE_BODY(get_with_default)
53273929Sjmmv{
54273929Sjmmv    ATF_REQUIRE(atf::env::has("PATH"));
55273929Sjmmv    ATF_REQUIRE(atf::env::get("PATH", "default value") != "default value");
56273929Sjmmv
57273929Sjmmv    ATF_REQUIRE_EQ(atf::env::get("_UNDEFINED_VARIABLE_", "foo bar"), "foo bar");
58273929Sjmmv}
59273929Sjmmv
60240116SmarcelATF_TEST_CASE(set);
61240116SmarcelATF_TEST_CASE_HEAD(set)
62240116Smarcel{
63240116Smarcel    set_md_var("descr", "Tests the set function");
64240116Smarcel}
65240116SmarcelATF_TEST_CASE_BODY(set)
66240116Smarcel{
67240116Smarcel    ATF_REQUIRE(atf::env::has("PATH"));
68240116Smarcel    const std::string& oldval = atf::env::get("PATH");
69240116Smarcel    atf::env::set("PATH", "foo-bar");
70240116Smarcel    ATF_REQUIRE(atf::env::get("PATH") != oldval);
71240116Smarcel    ATF_REQUIRE_EQ(atf::env::get("PATH"), "foo-bar");
72240116Smarcel
73240116Smarcel    ATF_REQUIRE(!atf::env::has("_UNDEFINED_VARIABLE_"));
74240116Smarcel    atf::env::set("_UNDEFINED_VARIABLE_", "foo2-bar2");
75240116Smarcel    ATF_REQUIRE_EQ(atf::env::get("_UNDEFINED_VARIABLE_"), "foo2-bar2");
76240116Smarcel}
77240116Smarcel
78240116SmarcelATF_TEST_CASE(unset);
79240116SmarcelATF_TEST_CASE_HEAD(unset)
80240116Smarcel{
81240116Smarcel    set_md_var("descr", "Tests the unset function");
82240116Smarcel}
83240116SmarcelATF_TEST_CASE_BODY(unset)
84240116Smarcel{
85240116Smarcel    ATF_REQUIRE(atf::env::has("PATH"));
86240116Smarcel    atf::env::unset("PATH");
87240116Smarcel    ATF_REQUIRE(!atf::env::has("PATH"));
88240116Smarcel}
89240116Smarcel
90240116Smarcel// ------------------------------------------------------------------------
91240116Smarcel// Main.
92240116Smarcel// ------------------------------------------------------------------------
93240116Smarcel
94240116SmarcelATF_INIT_TEST_CASES(tcs)
95240116Smarcel{
96240116Smarcel    // Add the test cases for the free functions.
97240116Smarcel    ATF_ADD_TEST_CASE(tcs, has_get);
98273929Sjmmv    ATF_ADD_TEST_CASE(tcs, get_with_default);
99240116Smarcel    ATF_ADD_TEST_CASE(tcs, set);
100240116Smarcel    ATF_ADD_TEST_CASE(tcs, unset);
101240116Smarcel}
102