Sacado Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
test
GTestSuite
googletest
googlemock
src
gmock-internal-utils.cc
Go to the documentation of this file.
1
// Copyright 2007, Google Inc.
2
// All rights reserved.
3
//
4
// Redistribution and use in source and binary forms, with or without
5
// modification, are permitted provided that the following conditions are
6
// met:
7
//
8
// * Redistributions of source code must retain the above copyright
9
// notice, this list of conditions and the following disclaimer.
10
// * Redistributions in binary form must reproduce the above
11
// copyright notice, this list of conditions and the following disclaimer
12
// in the documentation and/or other materials provided with the
13
// distribution.
14
// * Neither the name of Google Inc. nor the names of its
15
// contributors may be used to endorse or promote products derived from
16
// this software without specific prior written permission.
17
//
18
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30
31
// Google Mock - a framework for writing C++ mock classes.
32
//
33
// This file defines some utilities useful for implementing Google
34
// Mock. They are subject to change without notice, so please DO NOT
35
// USE THEM IN USER CODE.
36
37
#include "
gmock/internal/gmock-internal-utils.h
"
38
39
#include <ctype.h>
40
#include <ostream>
// NOLINT
41
#include <string>
42
#include "
gmock/gmock.h
"
43
#include "
gmock/internal/gmock-port.h
"
44
#include "
gtest/gtest.h
"
45
46
namespace
testing
{
47
namespace
internal
{
48
49
// Joins a vector of strings as if they are fields of a tuple; returns
50
// the joined string.
51
GTEST_API_
std::string
JoinAsTuple
(
const
Strings
& fields) {
52
switch
(fields.size()) {
53
case
0:
54
return
""
;
55
case
1:
56
return
fields[0];
57
default
:
58
std::string result =
"("
+ fields[0];
59
for
(
size_t
i = 1; i < fields.size(); i++) {
60
result +=
", "
;
61
result += fields[i];
62
}
63
result +=
")"
;
64
return
result;
65
}
66
}
67
68
// Converts an identifier name to a space-separated list of lower-case
69
// words. Each maximum substring of the form [A-Za-z][a-z]*|\d+ is
70
// treated as one word. For example, both "FooBar123" and
71
// "foo_bar_123" are converted to "foo bar 123".
72
GTEST_API_
std::string
ConvertIdentifierNameToWords
(
const
char
* id_name) {
73
std::string result;
74
char
prev_char =
'\0'
;
75
for
(
const
char
* p = id_name; *p !=
'\0'
; prev_char = *(p++)) {
76
// We don't care about the current locale as the input is
77
// guaranteed to be a valid C++ identifier name.
78
const
bool
starts_new_word =
IsUpper
(*p) ||
79
(!
IsAlpha
(prev_char) &&
IsLower
(*p)) ||
80
(!
IsDigit
(prev_char) &&
IsDigit
(*p));
81
82
if
(
IsAlNum
(*p)) {
83
if
(starts_new_word && result !=
""
)
84
result +=
' '
;
85
result +=
ToLower
(*p);
86
}
87
}
88
return
result;
89
}
90
91
// This class reports Google Mock failures as Google Test failures. A
92
// user can define another class in a similar fashion if they intend to
93
// use Google Mock with a testing framework other than Google Test.
94
class
GoogleTestFailureReporter
:
public
FailureReporterInterface
{
95
public
:
96
void
ReportFailure
(
FailureType
type
,
const
char
* file,
int
line,
97
const
std::string& message)
override
{
98
AssertHelper
(
type
==
kFatal
?
99
TestPartResult::kFatalFailure :
100
TestPartResult::kNonFatalFailure,
101
file,
102
line,
103
message.c_str()) =
Message
();
104
if
(
type
==
kFatal
) {
105
posix::Abort
();
106
}
107
}
108
};
109
110
// Returns the global failure reporter. Will create a
111
// GoogleTestFailureReporter and return it the first time called.
112
GTEST_API_
FailureReporterInterface
*
GetFailureReporter
() {
113
// Points to the global failure reporter used by Google Mock. gcc
114
// guarantees that the following use of failure_reporter is
115
// thread-safe. We may need to add additional synchronization to
116
// protect failure_reporter if we port Google Mock to other
117
// compilers.
118
static
FailureReporterInterface
*
const
failure_reporter =
119
new
GoogleTestFailureReporter
();
120
return
failure_reporter;
121
}
122
123
// Protects global resources (stdout in particular) used by Log().
124
static
GTEST_DEFINE_STATIC_MUTEX_
(g_log_mutex);
125
126
// Returns true if and only if a log with the given severity is visible
127
// according to the --gmock_verbose flag.
128
GTEST_API_
bool
LogIsVisible
(
LogSeverity
severity) {
129
if
(
GMOCK_FLAG
(verbose) ==
kInfoVerbosity
) {
130
// Always show the log if --gmock_verbose=info.
131
return
true
;
132
}
else
if
(
GMOCK_FLAG
(verbose) ==
kErrorVerbosity
) {
133
// Always hide it if --gmock_verbose=error.
134
return
false
;
135
}
else
{
136
// If --gmock_verbose is neither "info" nor "error", we treat it
137
// as "warning" (its default value).
138
return
severity ==
kWarning
;
139
}
140
}
141
142
// Prints the given message to stdout if and only if 'severity' >= the level
143
// specified by the --gmock_verbose flag. If stack_frames_to_skip >=
144
// 0, also prints the stack trace excluding the top
145
// stack_frames_to_skip frames. In opt mode, any positive
146
// stack_frames_to_skip is treated as 0, since we don't know which
147
// function calls will be inlined by the compiler and need to be
148
// conservative.
149
GTEST_API_
void
Log
(
LogSeverity
severity,
const
std::string& message,
150
int
stack_frames_to_skip) {
151
if
(!
LogIsVisible
(severity))
152
return
;
153
154
// Ensures that logs from different threads don't interleave.
155
MutexLock
l(&g_log_mutex);
156
157
if
(severity ==
kWarning
) {
158
// Prints a GMOCK WARNING marker to make the warnings easily searchable.
159
std::cout <<
"\nGMOCK WARNING:"
;
160
}
161
// Pre-pends a new-line to message if it doesn't start with one.
162
if
(message.empty() || message[0] !=
'\n'
) {
163
std::cout <<
"\n"
;
164
}
165
std::cout << message;
166
if
(stack_frames_to_skip >= 0) {
167
#ifdef NDEBUG
168
// In opt mode, we have to be conservative and skip no stack frame.
169
const
int
actual_to_skip = 0;
170
#else
171
// In dbg mode, we can do what the caller tell us to do (plus one
172
// for skipping this function's stack frame).
173
const
int
actual_to_skip = stack_frames_to_skip + 1;
174
#endif
// NDEBUG
175
176
// Appends a new-line to message if it doesn't end with one.
177
if
(!message.empty() && *message.rbegin() !=
'\n'
) {
178
std::cout <<
"\n"
;
179
}
180
std::cout <<
"Stack trace:\n"
181
<<
::testing::internal::GetCurrentOsStackTraceExceptTop
(
182
::testing::UnitTest::GetInstance
(), actual_to_skip);
183
}
184
std::cout << ::std::flush;
185
}
186
187
GTEST_API_
WithoutMatchers
GetWithoutMatchers
() {
return
WithoutMatchers
(); }
188
189
GTEST_API_
void
IllegalDoDefault
(
const
char
* file,
int
line) {
190
internal::Assert
(
191
false
, file, line,
192
"You are using DoDefault() inside a composite action like "
193
"DoAll() or WithArgs(). This is not supported for technical "
194
"reasons. Please instead spell out the default action, or "
195
"assign the default action to an Action variable and use "
196
"the variable in various places."
);
197
}
198
199
}
// namespace internal
200
}
// namespace testing
testing::Message
Definition
gtest-message.h:91
testing::UnitTest::GetInstance
static UnitTest * GetInstance()
Definition
gtest.cc:4998
testing::internal::AssertHelper
Definition
gtest.h:1784
testing::internal::FailureReporterInterface
Definition
gmock-internal-utils.h:207
testing::internal::FailureReporterInterface::FailureType
FailureType
Definition
gmock-internal-utils.h:210
testing::internal::FailureReporterInterface::kFatal
@ kFatal
Definition
gmock-internal-utils.h:211
testing::internal::GoogleTestFailureReporter
Definition
gmock-internal-utils.cc:94
testing::internal::GoogleTestFailureReporter::ReportFailure
void ReportFailure(FailureType type, const char *file, int line, const std::string &message) override
Definition
gmock-internal-utils.cc:96
testing::internal::WithoutMatchers::WithoutMatchers
WithoutMatchers()
Definition
gmock-internal-utils.h:290
gmock-internal-utils.h
gmock-port.h
GMOCK_FLAG
#define GMOCK_FLAG(name)
Definition
gmock-port.h:67
gmock.h
GTEST_DEFINE_STATIC_MUTEX_
#define GTEST_DEFINE_STATIC_MUTEX_(mutex)
Definition
gtest-port.h:1870
GTEST_API_
#define GTEST_API_
Definition
gtest-port.h:775
gtest.h
testing::internal::posix::Abort
void Abort()
Definition
gtest-port.h:2109
testing::internal
Definition
gmock-actions.h:165
testing::internal::MutexLock
GTestMutexLock MutexLock
Definition
gtest-port.h:1882
testing::internal::ConvertIdentifierNameToWords
GTEST_API_ std::string ConvertIdentifierNameToWords(const char *id_name)
Definition
gmock-internal-utils.cc:72
testing::internal::LogSeverity
LogSeverity
Definition
gmock-internal-utils.h:254
testing::internal::kWarning
@ kWarning
Definition
gmock-internal-utils.h:256
testing::internal::kErrorVerbosity
const char kErrorVerbosity[]
Definition
gmock-internal-utils.h:266
testing::internal::IsDigit
bool IsDigit(char ch)
Definition
gtest-port.h:1924
testing::internal::JoinAsTuple
GTEST_API_ std::string JoinAsTuple(const Strings &fields)
Definition
gmock-internal-utils.cc:51
testing::internal::Strings
::std::vector< ::std::string > Strings
Definition
gtest-printers.h:868
testing::internal::LogIsVisible
GTEST_API_ bool LogIsVisible(LogSeverity severity)
Definition
gmock-internal-utils.cc:128
testing::internal::IsAlNum
bool IsAlNum(char ch)
Definition
gtest-port.h:1921
testing::internal::IsUpper
bool IsUpper(char ch)
Definition
gtest-port.h:1933
testing::internal::Log
GTEST_API_ void Log(LogSeverity severity, const std::string &message, int stack_frames_to_skip)
Definition
gmock-internal-utils.cc:149
testing::internal::GetFailureReporter
GTEST_API_ FailureReporterInterface * GetFailureReporter()
Definition
gmock-internal-utils.cc:112
testing::internal::kInfoVerbosity
const char kInfoVerbosity[]
Definition
gmock-internal-utils.h:262
testing::internal::Assert
void Assert(bool condition, const char *file, int line, const std::string &msg)
Definition
gmock-internal-utils.h:229
testing::internal::IllegalDoDefault
GTEST_API_ void IllegalDoDefault(const char *file, int line)
Definition
gmock-internal-utils.cc:189
testing::internal::IsLower
bool IsLower(char ch)
Definition
gtest-port.h:1927
testing::internal::GetWithoutMatchers
GTEST_API_ WithoutMatchers GetWithoutMatchers()
Definition
gmock-internal-utils.cc:187
testing::internal::ToLower
char ToLower(char ch)
Definition
gtest-port.h:1944
testing::internal::GetCurrentOsStackTraceExceptTop
GTEST_API_ std::string GetCurrentOsStackTraceExceptTop(UnitTest *unit_test, int skip_count)
Definition
gtest.cc:6092
testing::internal::IsAlpha
bool IsAlpha(char ch)
Definition
gtest-port.h:1918
testing
Definition
gmock-actions.h:154
type
Generated by
1.17.0