Skip to content

Commit 850cb69

Browse files
Max Shavrickcopybara-github
authored andcommitted
Add string_view overload to AssertHelper
PiperOrigin-RevId: 871382613 Change-Id: I286ccbf8b8622a740e99642b4ed853e9f67cf51c
1 parent 77f6bd3 commit 850cb69

File tree

6 files changed

+34
-18
lines changed

6 files changed

+34
-18
lines changed

googletest/include/gtest/gtest-test-part.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <iosfwd>
3838
#include <ostream>
3939
#include <string>
40+
#include <string_view>
4041
#include <vector>
4142

4243
#include "gtest/internal/gtest-internal.h"
@@ -65,10 +66,10 @@ class GTEST_API_ [[nodiscard]] TestPartResult {
6566
// C'tor. TestPartResult does NOT have a default constructor.
6667
// Always use this constructor (with parameters) to create a
6768
// TestPartResult object.
68-
TestPartResult(Type a_type, const char* a_file_name, int a_line_number,
69-
const char* a_message)
69+
TestPartResult(Type a_type, std::string_view a_file_name, int a_line_number,
70+
std::string_view a_message)
7071
: type_(a_type),
71-
file_name_(a_file_name == nullptr ? "" : a_file_name),
72+
file_name_(a_file_name),
7273
line_number_(a_line_number),
7374
summary_(ExtractSummary(a_message)),
7475
message_(a_message) {}
@@ -112,7 +113,7 @@ class GTEST_API_ [[nodiscard]] TestPartResult {
112113

113114
// Gets the summary of the failure message by omitting the stack
114115
// trace in it.
115-
static std::string ExtractSummary(const char* message);
116+
static std::string ExtractSummary(std::string_view message);
116117

117118
// The name of the source file where the test part took place, or
118119
// "" if the source file is unknown.

googletest/include/gtest/gtest.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
#include <set>
5858
#include <sstream>
5959
#include <string>
60+
#include <string_view>
6061
#include <type_traits>
6162
#include <vector>
6263

@@ -1246,7 +1247,7 @@ class GTEST_API_ [[nodiscard]] UnitTest {
12461247
// eventually call this to report their results. The user code
12471248
// should use the assertion macros instead of calling this directly.
12481249
void AddTestPartResult(TestPartResult::Type result_type,
1249-
const char* file_name, int line_number,
1250+
std::string_view file_name, int line_number,
12501251
const std::string& message,
12511252
const std::string& os_stack_trace)
12521253
GTEST_LOCK_EXCLUDED_(mutex_);
@@ -1619,6 +1620,8 @@ class GTEST_API_ [[nodiscard]] AssertHelper {
16191620
// Constructor.
16201621
AssertHelper(TestPartResult::Type type, const char* file, int line,
16211622
const char* message);
1623+
AssertHelper(TestPartResult::Type type, std::string_view file, int line,
1624+
std::string_view message);
16221625
~AssertHelper();
16231626

16241627
// Message assignment is a semantic trick to enable assertion
@@ -1632,12 +1635,12 @@ class GTEST_API_ [[nodiscard]] AssertHelper {
16321635
// re-using stack space even for temporary variables, so every EXPECT_EQ
16331636
// reserves stack space for another AssertHelper.
16341637
struct AssertHelperData {
1635-
AssertHelperData(TestPartResult::Type t, const char* srcfile, int line_num,
1636-
const char* msg)
1638+
AssertHelperData(TestPartResult::Type t, std::string_view srcfile,
1639+
int line_num, std::string_view msg)
16371640
: type(t), file(srcfile), line(line_num), message(msg) {}
16381641

16391642
TestPartResult::Type const type;
1640-
const char* const file;
1643+
const std::string_view file;
16411644
int const line;
16421645
std::string const message;
16431646

googletest/include/gtest/internal/gtest-internal.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1452,8 +1452,7 @@ class [[nodiscard]] NeverThrown {
14521452
; \
14531453
else \
14541454
fail(::testing::internal::GetBoolAssertionFailureMessage( \
1455-
gtest_ar_, text, #actual, #expected) \
1456-
.c_str())
1455+
gtest_ar_, text, #actual, #expected))
14571456

14581457
#define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \
14591458
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \

googletest/src/gtest-test-part.cc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,19 @@
3434

3535
#include <ostream>
3636
#include <string>
37+
#include <string_view>
3738

39+
#include "gtest/internal/gtest-internal.h"
3840
#include "gtest/internal/gtest-port.h"
3941
#include "src/gtest-internal-inl.h"
4042

4143
namespace testing {
4244

4345
// Gets the summary of the failure message by omitting the stack trace
4446
// in it.
45-
std::string TestPartResult::ExtractSummary(const char* message) {
46-
const char* const stack_trace = strstr(message, internal::kStackTraceMarker);
47-
return stack_trace == nullptr ? message : std::string(message, stack_trace);
47+
std::string TestPartResult::ExtractSummary(const std::string_view message) {
48+
auto stack_trace = message.find(internal::kStackTraceMarker);
49+
return std::string(message.substr(0, stack_trace));
4850
}
4951

5052
// Prints a TestPartResult object.

googletest/src/gtest.cc

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
#include <ostream> // NOLINT
5959
#include <set>
6060
#include <sstream>
61+
#include <string_view>
6162
#include <unordered_set>
6263
#include <utility>
6364
#include <vector>
@@ -485,6 +486,15 @@ bool ShouldEmitStackTraceForResultType(TestPartResult::Type type) {
485486
// AssertHelper constructor.
486487
AssertHelper::AssertHelper(TestPartResult::Type type, const char* file,
487488
int line, const char* message)
489+
: AssertHelper(
490+
type, file == nullptr ? std::string_view() : std::string_view(file),
491+
line,
492+
message == nullptr ? std::string_view() : std::string_view(message)) {
493+
}
494+
495+
AssertHelper::AssertHelper(TestPartResult::Type type,
496+
const std::string_view file, int line,
497+
const std::string_view message)
488498
: data_(new AssertHelperData(type, file, line, message)) {}
489499

490500
AssertHelper::~AssertHelper() { delete data_; }
@@ -2547,8 +2557,9 @@ void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
25472557
// AddTestPartResult.
25482558
UnitTest::GetInstance()->AddTestPartResult(
25492559
result_type,
2550-
nullptr, // No info about the source file where the exception occurred.
2551-
-1, // We have no info on which line caused the exception.
2560+
std::string_view(), // No info about the source file where the exception
2561+
// occurred.
2562+
-1, // We have no info on which line caused the exception.
25522563
message,
25532564
""); // No stack trace, either.
25542565
}
@@ -5428,8 +5439,8 @@ Environment* UnitTest::AddEnvironment(Environment* env) {
54285439
// this to report their results. The user code should use the
54295440
// assertion macros instead of calling this directly.
54305441
void UnitTest::AddTestPartResult(TestPartResult::Type result_type,
5431-
const char* file_name, int line_number,
5432-
const std::string& message,
5442+
const std::string_view file_name,
5443+
int line_number, const std::string& message,
54335444
const std::string& os_stack_trace)
54345445
GTEST_LOCK_EXCLUDED_(mutex_) {
54355446
Message msg;

googletest/test/googletest-test-part-test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class TestPartResultTest : public Test {
4545
TestPartResultTest()
4646
: r1_(TestPartResult::kSuccess, "foo/bar.cc", 10, "Success!"),
4747
r2_(TestPartResult::kNonFatalFailure, "foo/bar.cc", -1, "Failure!"),
48-
r3_(TestPartResult::kFatalFailure, nullptr, -1, "Failure!"),
48+
r3_(TestPartResult::kFatalFailure, "", -1, "Failure!"),
4949
r4_(TestPartResult::kSkip, "foo/bar.cc", 2, "Skipped!") {}
5050

5151
TestPartResult r1_, r2_, r3_, r4_;

0 commit comments

Comments
 (0)