42 class RootIter :
public ScenarioIter {
49 virtual ~RootIter() =
default;
53 const RootIter&) =
delete;
54 RootIter& operator = (
55 const RootIter&) =
delete;
58 virtual bool isValid() const noexcept override;
59 virtual
ScenarioPtr getScenario() const noexcept override;
60 virtual
void next() noexcept override;
66 assert(root !=
nullptr);
70 bool RootIter::isValid() const noexcept {
71 return root !=
nullptr;
74 ScenarioPtr RootIter::getScenario() const noexcept {
75 assert(root !=
nullptr);
79 void RootIter::next() noexcept {
85 struct Registry::Impl {
92 const Impl&) =
delete;
94 const Impl&) =
delete;
101 Registry::Impl::Impl(
104 scenario_root(std::make_shared<ScenarioRoot>(
"test")) {
108 Registry::Impl::~Impl() {
112 Registry::Registry() :
113 pimpl(new Impl(this)) {
123 pimpl->scenario_root->appendScenario(scenario_);
127 const std::string& name_) {
128 assert(!name_.empty());
129 std::static_pointer_cast<ScenarioRoot>(pimpl->scenario_root)->setName(name_);
137 pimpl->scenario_root->filterScenario(tags_stack_,
nullptr, filter_));
140 return std::make_shared<RootIter>(filtered_root_);
144 const std::string& domain_) {
145 typedef std::map<std::string, Registry> TestDomains;
146 static TestDomains domains_;
147 auto iter_(domains_.find(domain_));
148 if(iter_ == domains_.end()) {
149 auto insert_ret_(domains_.emplace(
150 std::piecewise_construct,
151 std::forward_as_tuple(domain_),
152 std::forward_as_tuple()));
153 assert(insert_ret_.second);
154 iter_ = insert_ret_.first;
156 return (*iter_).second;