diff --git a/testing/file_test/autoupdate.cpp b/testing/file_test/autoupdate.cpp index 956e86b0688f..55458275a14f 100644 --- a/testing/file_test/autoupdate.cpp +++ b/testing/file_test/autoupdate.cpp @@ -92,6 +92,8 @@ class CheckLine : public FileTestLineBase { } } + auto is_blank() const -> bool override { return false; } + private: bool line_number_re_has_file_; const RE2* line_number_re_; @@ -102,15 +104,17 @@ class CheckLine : public FileTestLineBase { } // namespace -// Adds output lines for autoupdate. -static auto AddCheckLines( +// Builds CheckLine lists for autoupdate. +static auto BuildCheckLines( llvm::StringRef output, const char* label, const llvm::SmallVector& filenames, bool line_number_re_has_file, const RE2& line_number_re, - std::function do_extra_check_replacements, - llvm::SmallVector>& check_lines) -> void { + std::function do_extra_check_replacements) + -> llvm::SmallVector> { + llvm::SmallVector> check_lines; + check_lines.resize(filenames.size()); if (output.empty()) { - return; + return check_lines; } // Prepare to look for filenames in lines. @@ -185,6 +189,8 @@ static auto AddCheckLines( CheckLine(line_number, line_number_re_has_file, use_line_number ? &line_number_re : nullptr, check_line)); } + + return check_lines; } auto AutoupdateFileTest( @@ -200,22 +206,19 @@ auto AutoupdateFileTest( << line_number_replacement.pattern << "`"; // Prepare CHECK lines. - llvm::SmallVector> stdout_check_lines; - stdout_check_lines.resize(filenames.size()); - AddCheckLines(stdout, "STDOUT", filenames, line_number_replacement.has_file, - line_number_re, do_extra_check_replacements, - stdout_check_lines); - - llvm::SmallVector> stderr_check_lines; - stderr_check_lines.resize(filenames.size()); - AddCheckLines(stderr, "STDERR", filenames, line_number_replacement.has_file, - line_number_re, do_extra_check_replacements, - stderr_check_lines); + llvm::SmallVector> stdout_check_lines = + BuildCheckLines(stdout, "STDOUT", filenames, + line_number_replacement.has_file, line_number_re, + do_extra_check_replacements); + llvm::SmallVector> stderr_check_lines = + BuildCheckLines(stderr, "STDERR", filenames, + line_number_replacement.has_file, line_number_re, + do_extra_check_replacements); // All CHECK lines are suppressed until we reach AUTOUPDATE. bool reached_autoupdate = false; - FileTestLine blank_line(-1, ""); + const FileTestLine blank_line(-1, ""); // Stitch together content. llvm::SmallVector new_lines; @@ -288,14 +291,9 @@ auto AutoupdateFileTest( if (stderr_check_line != stderr_check_file.end() || stdout_check_line != stdout_check_file.end()) { // Ensure there's a blank line before any trailing CHECKs. - if (!new_lines.empty()) { - std::string str; - llvm::raw_string_ostream out(str); - new_lines.back()->Print(out); - if (!str.empty()) { - new_lines.push_back(&blank_line); - ++output_line_number; - } + if (!new_lines.empty() && !new_lines.back()->is_blank()) { + new_lines.push_back(&blank_line); + ++output_line_number; } add_check_lines(stderr_check_file, stderr_check_line, INT_MAX, ""); diff --git a/testing/file_test/line.h b/testing/file_test/line.h index 379d209de074..01fe13c62dc5 100644 --- a/testing/file_test/line.h +++ b/testing/file_test/line.h @@ -19,6 +19,8 @@ class FileTestLineBase { // Prints the autoupdated line. virtual auto Print(llvm::raw_ostream& out) const -> void = 0; + virtual auto is_blank() const -> bool = 0; + auto line_number() const -> int { return line_number_; } private: @@ -33,6 +35,8 @@ class FileTestLine : public FileTestLineBase { auto Print(llvm::raw_ostream& out) const -> void override { out << line_; } + auto is_blank() const -> bool override { return line_.empty(); } + auto indent() const -> llvm::StringRef { return line_.substr(0, line_.find_first_not_of(" \n")); }