std::vector<FILE*> log_files;
std::vector<std::ostream*> log_streams;
std::map<std::string, std::set<std::string>> log_hdump;
-std::vector<std::regex> log_warn_regexes, log_nowarn_regexes, log_werror_regexes;
-std::vector<std::pair<std::regex,LogExpectedItem>> log_expect_log, log_expect_warning, log_expect_error;
+std::vector<YS_REGEX_TYPE> log_warn_regexes, log_nowarn_regexes, log_werror_regexes;
+std::vector<std::pair<YS_REGEX_TYPE,LogExpectedItem>> log_expect_log, log_expect_warning, log_expect_error;
std::set<std::string> log_warnings, log_experimentals, log_experimentals_ignored;
int log_warnings_count = 0;
+int log_warnings_count_noexpect = 0;
+bool log_expect_no_warnings = false;
bool log_hdump_all = false;
FILE *log_errfile = NULL;
SHA1 *log_hasher = NULL;
static bool next_print_log = false;
static int log_newline_count = 0;
static bool check_expected_logs = true;
+static bool display_error_log_msg = true;
static void log_id_cache_clear()
{
if (!linebuffer.empty() && linebuffer.back() == '\n') {
for (auto &re : log_warn_regexes)
- if (std::regex_search(linebuffer, re))
+ if (YS_REGEX_NS::regex_search(linebuffer, re))
log_warning("Found log message matching -W regex:\n%s", str.c_str());
for (auto &item : log_expect_log)
- if (std::regex_search(linebuffer, item.first))
+ if (YS_REGEX_NS::regex_search(linebuffer, item.first))
item.second.current_count++;
linebuffer.clear();
bool suppressed = false;
for (auto &re : log_nowarn_regexes)
- if (std::regex_search(message, re))
+ if (YS_REGEX_NS::regex_search(message, re))
suppressed = true;
if (suppressed)
log_make_debug = 0;
for (auto &re : log_werror_regexes)
- if (std::regex_search(message, re))
+ if (YS_REGEX_NS::regex_search(message, re))
log_error("%s", message.c_str());
+ bool warning_match = false;
for (auto &item : log_expect_warning)
- if (std::regex_search(message, item.first))
+ if (YS_REGEX_NS::regex_search(message, item.first)) {
item.second.current_count++;
+ warning_match = true;
+ }
if (log_warnings.count(message))
{
log_warnings.insert(message);
}
+ if (!warning_match)
+ log_warnings_count_noexpect++;
log_warnings_count++;
log_make_debug = bak_log_make_debug;
}
f = stderr;
log_last_error = vstringf(format, ap);
- if (check_expected_logs)
+ if (display_error_log_msg)
log("%s%s", prefix, log_last_error.c_str());
log_flush();
log_error_atexit();
for (auto &item : log_expect_error)
- if (std::regex_search(log_last_error, item.first))
+ if (YS_REGEX_NS::regex_search(log_last_error, item.first))
item.second.current_count++;
if (check_expected_logs)
log_check_expected();
+
+ YS_DEBUGTRAP_IF_DEBUGGING;
+
#ifdef EMSCRIPTEN
log_files = backup_log_files;
throw 0;
check_expected_logs = false;
for (auto &item : log_expect_warning) {
- if (item.second.current_count != item.second.expected_count) {
+ if (item.second.current_count == 0) {
+ log_warn_regexes.clear();
log_error("Expected warning pattern '%s' not found !\n", item.second.pattern.c_str());
}
if (item.second.current_count != item.second.expected_count) {
- log_error("Expected warning pattern '%s' found %d time(s), instead of %d time(s) !\n",
+ log_warn_regexes.clear();
+ log_error("Expected warning pattern '%s' found %d time(s), instead of %d time(s) !\n",
item.second.pattern.c_str(), item.second.current_count, item.second.expected_count);
}
}
for (auto &item : log_expect_log) {
if (item.second.current_count == 0) {
+ log_warn_regexes.clear();
log_error("Expected log pattern '%s' not found !\n", item.second.pattern.c_str());
}
if (item.second.current_count != item.second.expected_count) {
+ log_warn_regexes.clear();
log_error("Expected log pattern '%s' found %d time(s), instead of %d time(s) !\n",
item.second.pattern.c_str(), item.second.current_count, item.second.expected_count);
}
for (auto &item : log_expect_error)
if (item.second.current_count == item.second.expected_count) {
+ log_warn_regexes.clear();
log("Expected error pattern '%s' found !!!\n", item.second.pattern.c_str());
#ifdef EMSCRIPTEN
- log_files = backup_log_files;
throw 0;
#elif defined(_MSC_VER)
_exit(0);
#else
_Exit(0);
- #endif
+ #endif
} else {
+ display_error_log_msg = false;
+ log_warn_regexes.clear();
log_error("Expected error pattern '%s' not found !\n", item.second.pattern.c_str());
}
}