1e2207522Sjmmv // 2e2207522Sjmmv // Automated Testing Framework (atf) 3e2207522Sjmmv // 4a551a20fSjmmv // Copyright (c) 2007 The NetBSD Foundation, Inc. 5e2207522Sjmmv // All rights reserved. 6e2207522Sjmmv // 7e2207522Sjmmv // Redistribution and use in source and binary forms, with or without 8e2207522Sjmmv // modification, are permitted provided that the following conditions 9e2207522Sjmmv // are met: 10e2207522Sjmmv // 1. Redistributions of source code must retain the above copyright 11e2207522Sjmmv // notice, this list of conditions and the following disclaimer. 12e2207522Sjmmv // 2. Redistributions in binary form must reproduce the above copyright 13e2207522Sjmmv // notice, this list of conditions and the following disclaimer in the 14e2207522Sjmmv // documentation and/or other materials provided with the distribution. 15e2207522Sjmmv // 16e2207522Sjmmv // THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 17e2207522Sjmmv // CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 18e2207522Sjmmv // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19e2207522Sjmmv // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20e2207522Sjmmv // IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 21e2207522Sjmmv // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22e2207522Sjmmv // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 23e2207522Sjmmv // GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24e2207522Sjmmv // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25e2207522Sjmmv // IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26e2207522Sjmmv // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27e2207522Sjmmv // IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28e2207522Sjmmv // 29e2207522Sjmmv 30e2207522Sjmmv #if !defined(_ATF_CXX_CHECK_HPP_) 31e2207522Sjmmv #define _ATF_CXX_CHECK_HPP_ 32e2207522Sjmmv 33e2207522Sjmmv extern "C" { 34895f502bSjmmv #include <atf-c/check.h> 35e2207522Sjmmv } 36e2207522Sjmmv 3712aa0b5aSjmmv #include <cstddef> 3812aa0b5aSjmmv #include <memory> 3912aa0b5aSjmmv #include <string> 4012aa0b5aSjmmv #include <vector> 4112aa0b5aSjmmv 42e2207522Sjmmv namespace atf { 4312aa0b5aSjmmv 4412aa0b5aSjmmv namespace process { 4512aa0b5aSjmmv class argv_array; 4612aa0b5aSjmmv } // namespace process 4712aa0b5aSjmmv 48e2207522Sjmmv namespace check { 49e2207522Sjmmv 50e2207522Sjmmv // ------------------------------------------------------------------------ 51e2207522Sjmmv // The "check_result" class. 52e2207522Sjmmv // ------------------------------------------------------------------------ 53e2207522Sjmmv 54e2207522Sjmmv //! 55e2207522Sjmmv //! \brief A class that contains results of executed command. 56e2207522Sjmmv //! 57e2207522Sjmmv //! The check_result class holds information about results 58e2207522Sjmmv //! of executing arbitrary command and manages files containing 59e2207522Sjmmv //! its output. 60e2207522Sjmmv //! 61d780102eSjmmv class check_result { 62d780102eSjmmv // Non-copyable. 63d780102eSjmmv check_result(const check_result&); 64d780102eSjmmv check_result& operator=(const check_result&); 65d780102eSjmmv 66e2207522Sjmmv //! 67e2207522Sjmmv //! \brief Internal representation of a result. 68e2207522Sjmmv //! 69e2207522Sjmmv atf_check_result_t m_result; 70e2207522Sjmmv 71e2207522Sjmmv //! 72e2207522Sjmmv //! \brief Constructs a results object and grabs ownership of the 73e2207522Sjmmv //! parameter passed in. 74e2207522Sjmmv //! 75e2207522Sjmmv check_result(const atf_check_result_t* result); 76e2207522Sjmmv 7712aa0b5aSjmmv friend check_result test_constructor(const char* const*); 78*ee43138cSchristos friend std::unique_ptr< check_result > exec(const atf::process::argv_array&); 79e2207522Sjmmv 80e2207522Sjmmv public: 81e2207522Sjmmv //! 82e2207522Sjmmv //! \brief Destroys object and removes all managed files. 83e2207522Sjmmv //! 84e2207522Sjmmv ~check_result(void); 85e2207522Sjmmv 86e2207522Sjmmv //! 87e2207522Sjmmv //! \brief Returns whether the command exited correctly or not. 88e2207522Sjmmv //! 89e2207522Sjmmv bool exited(void) const; 90e2207522Sjmmv 91e2207522Sjmmv //! 92e2207522Sjmmv //! \brief Returns command's exit status. 93e2207522Sjmmv //! 94e2207522Sjmmv int exitcode(void) const; 95e2207522Sjmmv 96e2207522Sjmmv //! 97edebbb8eSjmmv //! \brief Returns whether the command received a signal or not. 98edebbb8eSjmmv //! 99edebbb8eSjmmv bool signaled(void) const; 100edebbb8eSjmmv 101edebbb8eSjmmv //! 102edebbb8eSjmmv //! \brief Returns the signal that terminated the command. 103edebbb8eSjmmv //! 104edebbb8eSjmmv int termsig(void) const; 105edebbb8eSjmmv 106edebbb8eSjmmv //! 107e2207522Sjmmv //! \brief Returns the path to file contaning command's stdout. 108e2207522Sjmmv //! 109895f502bSjmmv const std::string stdout_path(void) const; 110e2207522Sjmmv 111e2207522Sjmmv //! 112e2207522Sjmmv //! \brief Returns the path to file contaning command's stderr. 113e2207522Sjmmv //! 114895f502bSjmmv const std::string stderr_path(void) const; 115e2207522Sjmmv }; 116e2207522Sjmmv 117e2207522Sjmmv // ------------------------------------------------------------------------ 118e2207522Sjmmv // Free functions. 119e2207522Sjmmv // ------------------------------------------------------------------------ 120e2207522Sjmmv 121895f502bSjmmv bool build_c_o(const std::string&, const std::string&, 12212aa0b5aSjmmv const atf::process::argv_array&); 123895f502bSjmmv bool build_cpp(const std::string&, const std::string&, 12412aa0b5aSjmmv const atf::process::argv_array&); 125895f502bSjmmv bool build_cxx_o(const std::string&, const std::string&, 12612aa0b5aSjmmv const atf::process::argv_array&); 127*ee43138cSchristos std::unique_ptr< check_result > exec(const atf::process::argv_array&); 128e2207522Sjmmv 129e2207522Sjmmv // Useful for testing only. 130e2207522Sjmmv check_result test_constructor(void); 131e2207522Sjmmv 132e2207522Sjmmv } // namespace check 133e2207522Sjmmv } // namespace atf 134e2207522Sjmmv 135e2207522Sjmmv #endif // !defined(_ATF_CXX_CHECK_HPP_) 136