a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt// Copyright (c) 2008 The NetBSD Foundation, Inc.
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// All rights reserved.
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt//
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// Redistribution and use in source and binary forms, with or without
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// modification, are permitted provided that the following conditions
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// are met:
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// 1. Redistributions of source code must retain the above copyright
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// notice, this list of conditions and the following disclaimer.
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// 2. Redistributions in binary form must reproduce the above copyright
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// notice, this list of conditions and the following disclaimer in the
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// documentation and/or other materials provided with the distribution.
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt//
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews#include "atf-c++/macros.hpp"
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Huntextern "C" {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt#include <fcntl.h>
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt#include <unistd.h>
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt#include <cerrno>
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt#include <cstdlib>
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt#include <iostream>
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt#include <stdexcept>
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews#include <atf-c++.hpp>
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews#include "atf-c++/detail/fs.hpp"
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews#include "atf-c++/detail/process.hpp"
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews#include "atf-c++/detail/sanity.hpp"
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews#include "atf-c++/detail/test_helpers.hpp"
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews#include "atf-c++/detail/text.hpp"
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews#include "atf-c++/utils.hpp"
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// ------------------------------------------------------------------------
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// Auxiliary functions.
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// ------------------------------------------------------------------------
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Huntstatic
ef421f66f47224a42073deaf087378c5d0c9952eEvan Huntvoid
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Huntcreate_ctl_file(const char *name)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(open(name, O_CREAT | O_WRONLY | O_TRUNC, 0644) != -1);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// ------------------------------------------------------------------------
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// Auxiliary test cases.
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// ------------------------------------------------------------------------
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(h_pass);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(h_pass)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Helper test case");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(h_pass)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_PASS();
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(h_fail);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(h_fail)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Helper test case");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(h_fail)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_FAIL("Failed on purpose");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(h_skip);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(h_skip)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Helper test case");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(h_skip)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_SKIP("Skipped on purpose");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(h_require);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(h_require)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Helper test case");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(h_require)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt bool condition = atf::text::to_bool(get_config_var("condition"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(condition);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(h_require_eq);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(h_require_eq)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Helper test case");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(h_require_eq)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt long v1 = atf::text::to_type< long >(get_config_var("v1"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt long v2 = atf::text::to_type< long >(get_config_var("v2"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE_EQ(v1, v2);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("after");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt}
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan HuntATF_TEST_CASE(h_require_in);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan HuntATF_TEST_CASE_HEAD(h_require_in)
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt set_md_var("descr", "Helper test case");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt}
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan HuntATF_TEST_CASE_BODY(h_require_in)
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt const std::string element = get_config_var("value");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt std::set< std::string > collection;
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt collection.insert("foo");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt collection.insert("bar");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt collection.insert("baz");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("before");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE_IN(element, collection);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(h_require_match);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(h_require_match)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Helper test case");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(h_require_match)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const std::string regexp = get_config_var("regexp");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const std::string string = get_config_var("string");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE_MATCH(regexp, string);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("after");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt}
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan HuntATF_TEST_CASE(h_require_not_in);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan HuntATF_TEST_CASE_HEAD(h_require_not_in)
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt set_md_var("descr", "Helper test case");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt}
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan HuntATF_TEST_CASE_BODY(h_require_not_in)
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt const std::string element = get_config_var("value");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt std::set< std::string > collection;
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt collection.insert("foo");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt collection.insert("bar");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt collection.insert("baz");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("before");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE_NOT_IN(element, collection);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(h_require_throw);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(h_require_throw)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Helper test case");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(h_require_throw)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (get_config_var("what") == "throw_int")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE_THROW(std::runtime_error, if (1) throw int(5));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt else if (get_config_var("what") == "throw_rt")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE_THROW(std::runtime_error,
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (1) throw std::runtime_error("e"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt else if (get_config_var("what") == "no_throw_rt")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE_THROW(std::runtime_error,
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (0) throw std::runtime_error("e"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(h_require_throw_re);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(h_require_throw_re)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Helper test case");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(h_require_throw_re)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (get_config_var("what") == "throw_int")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE_THROW_RE(std::runtime_error, "5", if (1) throw int(5));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt else if (get_config_var("what") == "throw_rt_match")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE_THROW_RE(std::runtime_error, "foo.*baz",
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (1) throw std::runtime_error("a foo bar baz"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt else if (get_config_var("what") == "throw_rt_no_match")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE_THROW_RE(std::runtime_error, "foo.*baz",
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (1) throw std::runtime_error("baz foo bar a"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt else if (get_config_var("what") == "no_throw_rt")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE_THROW_RE(std::runtime_error, "e",
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (0) throw std::runtime_error("e"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Huntstatic int
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunterrno_fail_stub(const int raised_errno)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt errno = raised_errno;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt return -1;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Huntstatic int
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunterrno_ok_stub(void)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt return 0;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(h_check_errno);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(h_check_errno)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Helper test case");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(h_check_errno)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (get_config_var("what") == "no_error")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_CHECK_ERRNO(-1, errno_ok_stub() == -1);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt else if (get_config_var("what") == "errno_ok")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_CHECK_ERRNO(2, errno_fail_stub(2) == -1);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt else if (get_config_var("what") == "errno_fail")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_CHECK_ERRNO(3, errno_fail_stub(4) == -1);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt else
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt UNREACHABLE;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(h_require_errno);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(h_require_errno)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Helper test case");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(h_require_errno)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (get_config_var("what") == "no_error")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE_ERRNO(-1, errno_ok_stub() == -1);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt else if (get_config_var("what") == "errno_ok")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE_ERRNO(2, errno_fail_stub(2) == -1);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt else if (get_config_var("what") == "errno_fail")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE_ERRNO(3, errno_fail_stub(4) == -1);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt else
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt UNREACHABLE;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt create_ctl_file("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// ------------------------------------------------------------------------
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// Test cases for the macros.
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// ------------------------------------------------------------------------
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(pass);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(pass)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Tests the ATF_PASS macro");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(pass)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_TEST_CASE_USE(h_pass);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt run_h_tc< ATF_TEST_CASE_NAME(h_pass) >();
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^passed", "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(atf::fs::path("before")));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(!atf::fs::exists(atf::fs::path("after")));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(fail);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(fail)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Tests the ATF_FAIL macro");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(fail)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_TEST_CASE_USE(h_fail);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt run_h_tc< ATF_TEST_CASE_NAME(h_fail) >();
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^failed: Failed on purpose", "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(atf::fs::path("before")));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(!atf::fs::exists(atf::fs::path("after")));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(skip);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(skip)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Tests the ATF_SKIP macro");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(skip)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_TEST_CASE_USE(h_skip);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt run_h_tc< ATF_TEST_CASE_NAME(h_skip) >();
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^skipped: Skipped on purpose",
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(atf::fs::path("before")));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(!atf::fs::exists(atf::fs::path("after")));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(require);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(require)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Tests the ATF_REQUIRE macro");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(require)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt struct test {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const char *cond;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt bool ok;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } *t, tests[] = {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "false", false },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "true", true },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { NULL, false }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt };
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path before("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path after("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt for (t = &tests[0]; t->cond != NULL; t++) {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::tests::vars_map config;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt config["condition"] = t->cond;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt std::cout << "Checking with a " << t->cond << " value\n";
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_TEST_CASE_USE(h_require);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt run_h_tc< ATF_TEST_CASE_NAME(h_require) >(config);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(before));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (t->ok) {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^passed", "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(after));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } else {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file(
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt "^failed: .*condition not met", "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(!atf::fs::exists(after));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(before);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (t->ok)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(after);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(require_eq);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(require_eq)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Tests the ATF_REQUIRE_EQ macro");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(require_eq)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt struct test {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const char *v1;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const char *v2;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt bool ok;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } *t, tests[] = {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "1", "1", true },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "1", "2", false },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "2", "1", false },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "2", "2", true },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { NULL, NULL, false }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt };
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path before("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path after("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt for (t = &tests[0]; t->v1 != NULL; t++) {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::tests::vars_map config;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt config["v1"] = t->v1;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt config["v2"] = t->v2;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt std::cout << "Checking with " << t->v1 << ", " << t->v2
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt << " and expecting " << (t->ok ? "true" : "false")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt << "\n";
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_TEST_CASE_USE(h_require_eq);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt run_h_tc< ATF_TEST_CASE_NAME(h_require_eq) >(config);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(before));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (t->ok) {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^passed", "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(after));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } else {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^failed: .*v1 != v2", "result"));
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(!atf::fs::exists(after));
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt }
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt atf::fs::remove(before);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt if (t->ok)
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt atf::fs::remove(after);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt }
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt}
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan HuntATF_TEST_CASE(require_in);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan HuntATF_TEST_CASE_HEAD(require_in)
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt set_md_var("descr", "Tests the ATF_REQUIRE_IN macro");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt}
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan HuntATF_TEST_CASE_BODY(require_in)
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt struct test {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt const char *value;
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt bool ok;
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt } *t, tests[] = {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { "foo", true },
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { "bar", true },
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { "baz", true },
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { "xxx", false },
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { "fooa", false },
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { "foo ", false },
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { NULL, false }
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt };
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt const atf::fs::path before("before");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt const atf::fs::path after("after");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt for (t = &tests[0]; t->value != NULL; t++) {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt atf::tests::vars_map config;
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt config["value"] = t->value;
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_TEST_CASE_USE(h_require_in);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt run_h_tc< ATF_TEST_CASE_NAME(h_require_in) >(config);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::fs::exists(before));
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt if (t->ok) {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^passed", "result"));
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::fs::exists(after));
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt } else {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^failed: ", "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(!atf::fs::exists(after));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(before);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (t->ok)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(after);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(require_match);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(require_match)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Tests the ATF_REQUIRE_MATCH macro");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(require_match)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt struct test {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const char *regexp;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const char *string;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt bool ok;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } *t, tests[] = {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "foo.*bar", "this is a foo, bar, baz", true },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "bar.*baz", "this is a baz, bar, foo", false },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { NULL, NULL, false }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt };
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path before("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path after("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt for (t = &tests[0]; t->regexp != NULL; t++) {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::tests::vars_map config;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt config["regexp"] = t->regexp;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt config["string"] = t->string;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt std::cout << "Checking with " << t->regexp << ", " << t->string
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt << " and expecting " << (t->ok ? "true" : "false")
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt << "\n";
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_TEST_CASE_USE(h_require_match);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt run_h_tc< ATF_TEST_CASE_NAME(h_require_match) >(config);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(before));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (t->ok) {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^passed", "result"));
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::fs::exists(after));
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt } else {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^failed: ", "result"));
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(!atf::fs::exists(after));
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt }
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt atf::fs::remove(before);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt if (t->ok)
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt atf::fs::remove(after);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt }
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt}
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan HuntATF_TEST_CASE(require_not_in);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan HuntATF_TEST_CASE_HEAD(require_not_in)
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt set_md_var("descr", "Tests the ATF_REQUIRE_NOT_IN macro");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt}
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan HuntATF_TEST_CASE_BODY(require_not_in)
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt{
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt struct test {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt const char *value;
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt bool ok;
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt } *t, tests[] = {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { "foo", false },
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { "bar", false },
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { "baz", false },
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { "xxx", true },
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { "fooa", true },
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { "foo ", true },
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { NULL, false }
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt };
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt const atf::fs::path before("before");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt const atf::fs::path after("after");
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt for (t = &tests[0]; t->value != NULL; t++) {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt atf::tests::vars_map config;
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt config["value"] = t->value;
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_TEST_CASE_USE(h_require_not_in);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt run_h_tc< ATF_TEST_CASE_NAME(h_require_not_in) >(config);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::fs::exists(before));
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt if (t->ok) {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^passed", "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(after));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } else {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^failed: ", "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(!atf::fs::exists(after));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(before);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (t->ok)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(after);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(require_throw);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(require_throw)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Tests the ATF_REQUIRE_THROW macro");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(require_throw)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt struct test {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const char *what;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt bool ok;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const char *msg;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } *t, tests[] = {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "throw_int", false, "unexpected error" },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "throw_rt", true, NULL },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "no_throw_rt", false, "did not throw" },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { NULL, false, NULL }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt };
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path before("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path after("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt for (t = &tests[0]; t->what != NULL; t++) {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::tests::vars_map config;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt config["what"] = t->what;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt std::cout << "Checking with " << t->what << " and expecting "
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt << (t->ok ? "true" : "false") << "\n";
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_TEST_CASE_USE(h_require_throw);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt run_h_tc< ATF_TEST_CASE_NAME(h_require_throw) >(config);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(before));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (t->ok) {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^passed", "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(after));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } else {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt std::cout << "Checking that message contains '" << t->msg
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt << "'\n";
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt std::string exp_result = std::string("^failed: .*") + t->msg;
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file(exp_result.c_str(), "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(!atf::fs::exists(after));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(before);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (t->ok)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(after);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(require_throw_re);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(require_throw_re)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Tests the ATF_REQUIRE_THROW_RE macro");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(require_throw_re)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt struct test {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const char *what;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt bool ok;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const char *msg;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } *t, tests[] = {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "throw_int", false, "unexpected error" },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "throw_rt_match", true, NULL },
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt { "throw_rt_no_match", false,
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt "threw.*runtime_error\\(baz foo bar a\\).*"
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt "does not match 'foo\\.\\*baz'" },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "no_throw_rt", false, "did not throw" },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { NULL, false, NULL }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt };
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path before("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path after("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt for (t = &tests[0]; t->what != NULL; t++) {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::tests::vars_map config;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt config["what"] = t->what;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt std::cout << "Checking with " << t->what << " and expecting "
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt << (t->ok ? "true" : "false") << "\n";
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_TEST_CASE_USE(h_require_throw_re);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt run_h_tc< ATF_TEST_CASE_NAME(h_require_throw_re) >(config);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(before));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (t->ok) {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^passed", "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(after));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } else {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt std::cout << "Checking that message contains '" << t->msg
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt << "'\n";
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt std::string exp_result = std::string("^failed: .*") + t->msg;
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file(exp_result.c_str(), "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(!atf::fs::exists(after));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(before);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (t->ok)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(after);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(check_errno);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(check_errno)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Tests the ATF_CHECK_ERRNO macro");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(check_errno)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt struct test {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const char *what;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt bool ok;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const char *msg;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } *t, tests[] = {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "no_error", false,
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt "Expected true value in errno_ok_stub\\(\\) == -1" },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "errno_ok", true, NULL },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "errno_fail", false,
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt "Expected errno 3, got 4, in errno_fail_stub\\(4\\) == -1" },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { NULL, false, NULL }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt };
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path before("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path after("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt for (t = &tests[0]; t->what != NULL; t++) {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::tests::vars_map config;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt config["what"] = t->what;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_TEST_CASE_USE(h_check_errno);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt run_h_tc< ATF_TEST_CASE_NAME(h_check_errno) >(config);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(before));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(after));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (t->ok) {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^passed", "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } else {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^failed", "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt std::string exp_result = "macros_test.cpp:[0-9]+: " +
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt std::string(t->msg) + "$";
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file(exp_result.c_str(), "stderr"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(before);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(after);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE(require_errno);
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_HEAD(require_errno)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt set_md_var("descr", "Tests the ATF_REQUIRE_ERRNO macro");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_TEST_CASE_BODY(require_errno)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt struct test {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const char *what;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt bool ok;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const char *msg;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } *t, tests[] = {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "no_error", false,
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt "Expected true value in errno_ok_stub\\(\\) == -1" },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "errno_ok", true, NULL },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { "errno_fail", false,
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt "Expected errno 3, got 4, in errno_fail_stub\\(4\\) == -1" },
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt { NULL, false, NULL }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt };
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path before("before");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt const atf::fs::path after("after");
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt for (t = &tests[0]; t->what != NULL; t++) {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::tests::vars_map config;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt config["what"] = t->what;
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_TEST_CASE_USE(h_require_errno);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt run_h_tc< ATF_TEST_CASE_NAME(h_require_errno) >(config);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(before));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (t->ok) {
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file("^passed", "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(atf::fs::exists(after));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt } else {
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt std::string exp_result = "^failed: .*macros_test.cpp:[0-9]+: " +
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt std::string(t->msg) + "$";
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_REQUIRE(atf::utils::grep_file(exp_result.c_str(), "result"));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_REQUIRE(!atf::fs::exists(after));
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(before);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt if (t->ok)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt atf::fs::remove(after);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt }
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// ------------------------------------------------------------------------
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// Tests cases for the header file.
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// ------------------------------------------------------------------------
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntBUILD_TC(use, "macros_hpp_test.cpp",
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt "Tests that the macros provided by the atf-c++/macros.hpp file "
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt "do not cause syntax errors when used",
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt "Build of macros_hpp_test.cpp failed; some macros in "
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt "atf-c++/macros.hpp are broken");
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews
4a53e3c2b83c476a93148eaee0272649beb221caMark AndrewsATF_TEST_CASE(detect_unused_tests);
4a53e3c2b83c476a93148eaee0272649beb221caMark AndrewsATF_TEST_CASE_HEAD(detect_unused_tests)
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews{
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews set_md_var("descr",
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews "Tests that defining an unused test case raises a warning (and "
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews "thus an error)");
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews}
4a53e3c2b83c476a93148eaee0272649beb221caMark AndrewsATF_TEST_CASE_BODY(detect_unused_tests)
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews{
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews const char* validate_compiler =
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews "class test_class { public: int dummy; };\n"
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews "#define define_unused static test_class unused\n"
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews "define_unused;\n";
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews atf::utils::create_file("compiler_test.cpp", validate_compiler);
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews if (build_check_cxx_o("compiler_test.cpp"))
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews expect_fail("Compiler does not raise a warning on an unused "
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews "static global variable declared by a macro");
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews if (build_check_cxx_o_srcdir(*this, "unused_test.cpp"))
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews ATF_FAIL("Build of unused_test.cpp passed; unused test cases are "
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews "not properly detected");
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews}
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// ------------------------------------------------------------------------
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// Main.
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt// ------------------------------------------------------------------------
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan HuntATF_INIT_TEST_CASES(tcs)
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt{
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt // Add the test cases for the macros.
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_ADD_TEST_CASE(tcs, pass);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_ADD_TEST_CASE(tcs, fail);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_ADD_TEST_CASE(tcs, skip);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_ADD_TEST_CASE(tcs, check_errno);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_ADD_TEST_CASE(tcs, require);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_ADD_TEST_CASE(tcs, require_eq);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_ADD_TEST_CASE(tcs, require_in);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_ADD_TEST_CASE(tcs, require_match);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_ADD_TEST_CASE(tcs, require_not_in);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_ADD_TEST_CASE(tcs, require_throw);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_ADD_TEST_CASE(tcs, require_throw_re);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_ADD_TEST_CASE(tcs, require_errno);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt // Add the test cases for the header file.
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt ATF_ADD_TEST_CASE(tcs, use);
a747113422afaa29ce72d2c5ba7f0b7ea9ec2054Evan Hunt ATF_ADD_TEST_CASE(tcs, detect_unused_tests);
ef421f66f47224a42073deaf087378c5d0c9952eEvan Hunt}