123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- //
- // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
- //
- // Distributed under the Boost Software License, Version 1.0. (See accompanying
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- //
- // Official repository: https://github.com/boostorg/beast
- //
- #ifndef BOOST_BEAST_UNIT_TEST_SUITE_INFO_HPP
- #define BOOST_BEAST_UNIT_TEST_SUITE_INFO_HPP
- #include <cstring>
- #include <functional>
- #include <string>
- #include <utility>
- namespace boost {
- namespace beast {
- namespace unit_test {
- class runner;
- /** Associates a unit test type with metadata. */
- class suite_info
- {
- using run_type = std::function<void(runner&)>;
- std::string name_;
- std::string module_;
- std::string library_;
- bool manual_;
- run_type run_;
- public:
- suite_info(
- std::string name,
- std::string module,
- std::string library,
- bool manual,
- run_type run)
- : name_(std::move(name))
- , module_(std::move(module))
- , library_(std::move(library))
- , manual_(manual)
- , run_(std::move(run))
- {
- }
- std::string const&
- name() const
- {
- return name_;
- }
- std::string const&
- module() const
- {
- return module_;
- }
- std::string const&
- library() const
- {
- return library_;
- }
- /// Returns `true` if this suite only runs manually.
- bool
- manual() const
- {
- return manual_;
- }
- /// Return the canonical suite name as a string.
- std::string
- full_name() const
- {
- return library_ + "." + module_ + "." + name_;
- }
- /// Run a new instance of the associated test suite.
- void
- run(runner& r) const
- {
- run_(r);
- }
- friend
- bool
- operator<(suite_info const& lhs, suite_info const& rhs)
- {
- return
- std::tie(lhs.library_, lhs.module_, lhs.name_) <
- std::tie(rhs.library_, rhs.module_, rhs.name_);
- }
- };
- //------------------------------------------------------------------------------
- /// Convenience for producing suite_info for a given test type.
- template<class Suite>
- suite_info
- make_suite_info(
- std::string name,
- std::string module,
- std::string library,
- bool manual)
- {
- return suite_info(
- std::move(name),
- std::move(module),
- std::move(library),
- manual,
- [](runner& r)
- {
- Suite{}(r);
- }
- );
- }
- } // unit_test
- } // beast
- } // boost
- #endif
|