13 inline expected_assert_builder::string_matcher::string_matcher(string_view svValue,
bool bRegex) : m_Value(svValue)
16 m_Regex.emplace(svValue.begin(), svValue.end());
19 inline bool expected_assert_builder::string_matcher::matches(string_view svValue)
const
21 return m_Regex ? std::regex_search(svValue.begin(), svValue.end(), *m_Regex) : svValue == m_Value;
24 inline string_view expected_assert_builder::string_matcher::get_pattern()
const
29 inline bool expected_assert_builder::string_matcher::is_regex()
const
31 return m_Regex.has_value();
36 m_Condition.emplace(svCondition, bRegex);
54 m_Message.emplace(svPattern, bRegex);
60 m_Function.emplace(svFunction, bRegex);
66 m_File.emplace(svFile, bRegex);
89 asserts_manager::get_instance().add_interceptor(
92 string_view svCondition,
95 string_view svMessage,
96 string_view svFunction,
100 if (m_Builder.m_Condition && !m_Builder.m_Condition->matches(svCondition))
103 if (m_Builder.m_pCategory && *m_Builder.m_pCategory !=
category)
106 if (m_Builder.m_Type && eType != *m_Builder.m_Type)
109 if (m_Builder.m_Message && !m_Builder.m_Message->matches(svMessage))
112 if (m_Builder.m_Function && !m_Builder.m_Function->matches(svFunction))
115 if (m_Builder.m_File && !m_Builder.m_File->matches(svFile))
118 if (m_Builder.m_Line && nLine != *m_Builder.m_Line)
126 inline expected_assert::~expected_assert()
128 asserts_manager::get_instance().remove_interceptor(
this);
129 const size_t nActual = m_nActual.load();
130 if (nActual != m_Builder.m_nCount)
133 const auto AppendMatcher = [&sDetails](string_view svName,
const auto& optMatcher)
137 sDetails.append_format(
140 optMatcher->is_regex() ? QXT(
" (regex)") : QXT(
""),
141 optMatcher->get_pattern());
145 AppendMatcher(QXT(
"condition"), m_Builder.m_Condition);
147 if (m_Builder.m_pCategory)
148 sDetails.append_format(QXT(
"\n category: {}"), m_Builder.m_pCategory->
get_name());
150 if (m_Builder.m_Type)
151 sDetails.append_format(QXT(
"\n type: {}"), *m_Builder.m_Type);
153 AppendMatcher(QXT(
"message"), m_Builder.m_Message);
155 AppendMatcher(QXT(
"function"), m_Builder.m_Function);
157 AppendMatcher(QXT(
"file"), m_Builder.m_File);
159 if (m_Builder.m_Line)
160 sDetails.append_format(QXT(
"\n line: {}"), *m_Builder.m_Line);
162 ADD_FAILURE() <<
"Expected " << m_Builder.m_nCount <<
" matching assertions, got " << nActual
A category is a class that identifies a particular piece of code. This code can be located in differe...
constexpr string_view get_name() const noexcept
Get category name.
Selects assertion properties and the number of expected occurrences.
Counts assertions matching the criteria selected by expected_assert_builder.
void to_cstring(cstring &out, wstring_view stringView, const std::locale &locale=get_locale())
Convert wstring to cstring.
std::int32_t i32
− 9 223 372 036 854 775 808 .. 9 223 372 036 854 775 807