Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
yangql
googletest
Commits
21e51855
Unverified
Commit
21e51855
authored
Aug 16, 2018
by
Gennadiy Civil
Committed by
GitHub
Aug 16, 2018
Browse files
Merge branch 'master' into josh/fix_scoped_class2
parents
3e2cb754
490554aa
Changes
240
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
527 additions
and
379 deletions
+527
-379
googletest/include/gtest/gtest-message.h
googletest/include/gtest/gtest-message.h
+4
-4
googletest/include/gtest/gtest-param-test.h
googletest/include/gtest/gtest-param-test.h
+31
-38
googletest/include/gtest/gtest-param-test.h.pump
googletest/include/gtest/gtest-param-test.h.pump
+9
-19
googletest/include/gtest/gtest-printers.h
googletest/include/gtest/gtest-printers.h
+124
-28
googletest/include/gtest/gtest-spi.h
googletest/include/gtest/gtest-spi.h
+3
-2
googletest/include/gtest/gtest-test-part.h
googletest/include/gtest/gtest-test-part.h
+1
-2
googletest/include/gtest/gtest-typed-test.h
googletest/include/gtest/gtest-typed-test.h
+4
-3
googletest/include/gtest/gtest.h
googletest/include/gtest/gtest.h
+127
-34
googletest/include/gtest/gtest_pred_impl.h
googletest/include/gtest/gtest_pred_impl.h
+8
-7
googletest/include/gtest/gtest_prod.h
googletest/include/gtest/gtest_prod.h
+10
-7
googletest/include/gtest/internal/custom/README.md
googletest/include/gtest/internal/custom/README.md
+56
-0
googletest/include/gtest/internal/custom/gtest-port.h
googletest/include/gtest/internal/custom/gtest-port.h
+1
-36
googletest/include/gtest/internal/custom/gtest-printers.h
googletest/include/gtest/internal/custom/gtest-printers.h
+2
-2
googletest/include/gtest/internal/custom/gtest.h
googletest/include/gtest/internal/custom/gtest.h
+1
-9
googletest/include/gtest/internal/gtest-death-test-internal.h
...letest/include/gtest/internal/gtest-death-test-internal.h
+14
-58
googletest/include/gtest/internal/gtest-filepath.h
googletest/include/gtest/internal/gtest-filepath.h
+3
-3
googletest/include/gtest/internal/gtest-internal.h
googletest/include/gtest/internal/gtest-internal.h
+83
-69
googletest/include/gtest/internal/gtest-linked_ptr.h
googletest/include/gtest/internal/gtest-linked_ptr.h
+3
-3
googletest/include/gtest/internal/gtest-param-util-generated.h
...etest/include/gtest/internal/gtest-param-util-generated.h
+37
-43
googletest/include/gtest/internal/gtest-param-util-generated.h.pump
.../include/gtest/internal/gtest-param-util-generated.h.pump
+6
-12
No files found.
googletest/include/gtest/gtest-message.h
View file @
21e51855
...
...
@@ -26,10 +26,9 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Author: wan@google.com (Zhanyong Wan)
//
// The Google C++ Testing Framework (Google Test)
// The Google C++ Testing and Mocking Framework (Google Test)
//
// This header file defines the Message class.
//
...
...
@@ -43,6 +42,8 @@
// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user
// program!
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
...
...
@@ -196,7 +197,6 @@ class GTEST_API_ Message {
std
::
string
GetString
()
const
;
private:
#if GTEST_OS_SYMBIAN
// These are needed as the Nokia Symbian Compiler cannot decide between
// const T& and const T* in a function template. The Nokia compiler _can_
...
...
googletest/include/gtest/gtest-param-test.h
View file @
21e51855
...
...
@@ -31,13 +31,13 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Authors: vladl@google.com (Vlad Losev)
//
// Macros and functions for implementing parameterized tests
// in Google C++ Testing Framework (Google Test)
// in Google C++ Testing
and Mocking
Framework (Google Test)
//
// This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
//
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
...
...
@@ -79,7 +79,7 @@ TEST_P(FooTest, HasBlahBlah) {
// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test
// case with any set of parameters you want. Google Test defines a number
// of functions for generating test parameters. They return what we call
// (surprise!) parameter generators. Here is a
summary of them, which
// (surprise!) parameter generators. Here is a summary of them, which
// are all in the testing namespace:
//
//
...
...
@@ -185,15 +185,10 @@ TEST_P(DerivedTest, DoesBlah) {
# include <utility>
#endif
// scripts/fuse_gtest.py depends on gtest's own header being #included
// *unconditionally*. Therefore these #includes cannot be moved
// inside #if GTEST_HAS_PARAM_TEST.
#include "gtest/internal/gtest-internal.h"
#include "gtest/internal/gtest-param-util.h"
#include "gtest/internal/gtest-param-util-generated.h"
#if GTEST_HAS_PARAM_TEST
namespace
testing
{
// Functions producing parameter generators.
...
...
@@ -273,7 +268,7 @@ internal::ParamGenerator<T> Range(T start, T end) {
// each with C-string values of "foo", "bar", and "baz":
//
// const char* strings[] = {"foo", "bar", "baz"};
// INSTANTIATE_TEST_CASE_P(StringSequence, S
r
tingTest, ValuesIn(strings));
// INSTANTIATE_TEST_CASE_P(StringSequence, St
r
ingTest, ValuesIn(strings));
//
// This instantiates tests from test case StlStringTest
// each with STL strings with values "a" and "b":
...
...
@@ -1375,8 +1370,6 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
}
# endif // GTEST_HAS_COMBINE
# define TEST_P(test_case_name, test_name) \
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
: public test_case_name { \
...
...
@@ -1390,8 +1383,8 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
#test_case_name, \
::testing::internal::CodeLocation(\
__FILE__, __LINE__))->AddTestPattern(\
#
test_case_name, \
#
test_name, \
GTEST_STRINGIFY_(
test_case_name
)
, \
GTEST_STRINGIFY_(
test_name
)
, \
new ::testing::internal::TestMetaFactory< \
GTEST_TEST_CLASS_NAME_(\
test_case_name, test_name)>()); \
...
...
@@ -1412,33 +1405,33 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
// type testing::TestParamInfo<class ParamType>, and return std::string.
//
// testing::PrintToStringParamName is a builtin test suffix generator that
// returns the value of testing::PrintToString(GetParam()). It does not work
// for std::string or C strings.
// returns the value of testing::PrintToString(GetParam()).
//
// Note: test names must be non-empty, unique, and may only contain ASCII
// alphanumeric characters or underscore.
# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator, ...) \
::testing::internal::ParamGenerator<test_case_name::ParamType> \
gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \
::std::string gtest_##prefix##test_case_name##_EvalGenerateName_( \
const ::testing::TestParamInfo<test_case_name::ParamType>& info) { \
return ::testing::internal::GetParamNameGen<test_case_name::ParamType> \
(__VA_ARGS__)(info); \
} \
int gtest_##prefix##test_case_name##_dummy_ GTEST_ATTRIBUTE_UNUSED_ = \
::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
GetTestCasePatternHolder<test_case_name>(\
#test_case_name, \
::testing::internal::CodeLocation(\
__FILE__, __LINE__))->AddTestCaseInstantiation(\
#prefix, \
>est_##prefix##test_case_name##_EvalGenerator_, \
>est_##prefix##test_case_name##_EvalGenerateName_, \
__FILE__, __LINE__)
// alphanumeric characters or underscore. Because PrintToString adds quotes
// to std::string and C strings, it won't work for these types.
#define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator, ...) \
static ::testing::internal::ParamGenerator<test_case_name::ParamType> \
gtest_##prefix##test_case_name##_EvalGenerator_() { \
return generator; \
} \
static ::std::string gtest_##prefix##test_case_name##_EvalGenerateName_( \
const ::testing::TestParamInfo<test_case_name::ParamType>& info) { \
return ::testing::internal::GetParamNameGen<test_case_name::ParamType>( \
__VA_ARGS__)(info); \
} \
static int gtest_##prefix##test_case_name##_dummy_ GTEST_ATTRIBUTE_UNUSED_ = \
::testing::UnitTest::GetInstance() \
->parameterized_test_registry() \
.GetTestCasePatternHolder<test_case_name>( \
#test_case_name, \
::testing::internal::CodeLocation(__FILE__, __LINE__)) \
->AddTestCaseInstantiation( \
#prefix, >est_##prefix##test_case_name##_EvalGenerator_, \
>est_##prefix##test_case_name##_EvalGenerateName_, __FILE__, \
__LINE__)
}
// namespace testing
#endif // GTEST_HAS_PARAM_TEST
#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
googletest/include/gtest/gtest-param-test.h.pump
View file @
21e51855
...
...
@@ -30,13 +30,12 @@ $var maxtuple = 10 $$ Maximum number of Combine arguments we want to support.
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Authors: vladl@google.com (Vlad Losev)
//
// Macros and functions for implementing parameterized tests
// in Google C++ Testing Framework (Google Test)
// in Google C++ Testing
and Mocking
Framework (Google Test)
//
// This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
//
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
...
...
@@ -78,7 +77,7 @@ TEST_P(FooTest, HasBlahBlah) {
// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test
// case with any set of parameters you want. Google Test defines a number
// of functions for generating test parameters. They return what we call
// (surprise!) parameter generators. Here is a
summary of them, which
// (surprise!) parameter generators. Here is a summary of them, which
// are all in the testing namespace:
//
//
...
...
@@ -184,15 +183,10 @@ TEST_P(DerivedTest, DoesBlah) {
# include <utility>
#endif
// scripts/fuse_gtest.py depends on gtest's own header being #included
// *unconditionally*. Therefore these #includes cannot be moved
// inside #if GTEST_HAS_PARAM_TEST.
#include "gtest/internal/gtest-internal.h"
#include "gtest/internal/gtest-param-util.h"
#include "gtest/internal/gtest-param-util-generated.h"
#if GTEST_HAS_PARAM_TEST
namespace
testing
{
// Functions producing parameter generators.
...
...
@@ -272,7 +266,7 @@ internal::ParamGenerator<T> Range(T start, T end) {
// each with C-string values of "foo", "bar", and "baz":
//
// const char* strings[] = {"foo", "bar", "baz"};
// INSTANTIATE_TEST_CASE_P(StringSequence, S
r
tingTest, ValuesIn(strings));
// INSTANTIATE_TEST_CASE_P(StringSequence, St
r
ingTest, ValuesIn(strings));
//
// This instantiates tests from test case StlStringTest
// each with STL strings with values "a" and "b":
...
...
@@ -441,8 +435,6 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
]]
# endif // GTEST_HAS_COMBINE
# define TEST_P(test_case_name, test_name) \
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
: public test_case_name { \
...
...
@@ -456,8 +448,8 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
#test_case_name, \
::testing::internal::CodeLocation(\
__FILE__, __LINE__))->AddTestPattern(\
#
test_case_name, \
#
test_name, \
GTEST_STRINGIFY_(
test_case_name
)
, \
GTEST_STRINGIFY_(
test_name
)
, \
new ::testing::internal::TestMetaFactory< \
GTEST_TEST_CLASS_NAME_(\
test_case_name, test_name)>()); \
...
...
@@ -485,14 +477,14 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
// to std::string and C strings, it won't work for these types.
# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator, ...) \
::testing::internal::ParamGenerator<test_case_name::ParamType> \
static
::testing::internal::ParamGenerator<test_case_name::ParamType> \
gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \
::std::string gtest_##prefix##test_case_name##_EvalGenerateName_( \
static
::std::string gtest_##prefix##test_case_name##_EvalGenerateName_( \
const ::testing::TestParamInfo<test_case_name::ParamType>& info) { \
return ::testing::internal::GetParamNameGen<test_case_name::ParamType> \
(__VA_ARGS__)(info); \
} \
int gtest_##prefix##test_case_name##_dummy_ GTEST_ATTRIBUTE_UNUSED_ = \
static
int gtest_##prefix##test_case_name##_dummy_ GTEST_ATTRIBUTE_UNUSED_ = \
::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
GetTestCasePatternHolder<test_case_name>(\
#test_case_name, \
...
...
@@ -505,6 +497,4 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
}
// namespace testing
#endif // GTEST_HAS_PARAM_TEST
#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
googletest/include/gtest/gtest-printers.h
View file @
21e51855
...
...
@@ -26,10 +26,9 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Author: wan@google.com (Zhanyong Wan)
// Google Test - The Google C++ Testing Framework
// Google Test - The Google C++ Testing and Mocking Framework
//
// This file implements a universal value printer that can print a
// value of any type T:
...
...
@@ -46,6 +45,10 @@
// 2. operator<<(ostream&, const T&) defined in either foo or the
// global namespace.
//
// However if T is an STL-style container then it is printed element-wise
// unless foo::PrintTo(const T&, ostream*) is defined. Note that
// operator<<() is ignored for container types.
//
// If none of the above is defined, it will print the debug string of
// the value if it is a protocol buffer, or print the raw bytes in the
// value otherwise.
...
...
@@ -92,6 +95,8 @@
// being defined as many user-defined container types don't have
// value_type.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
#define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
...
...
@@ -107,6 +112,12 @@
# include <tuple>
#endif
#if GTEST_HAS_ABSL
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
#include "absl/types/variant.h"
#endif // GTEST_HAS_ABSL
namespace
testing
{
// Definitions in the 'internal' and 'internal2' name spaces are
...
...
@@ -125,7 +136,11 @@ enum TypeKind {
kProtobuf
,
// a protobuf type
kConvertibleToInteger
,
// a type implicitly convertible to BiggestInt
// (e.g. a named or unnamed enum type)
kOtherType
// anything else
#if GTEST_HAS_ABSL
kConvertibleToStringView
,
// a type implicitly convertible to
// absl::string_view
#endif
kOtherType
// anything else
};
// TypeWithoutFormatter<T, kTypeKind>::PrintValue(value, os) is called
...
...
@@ -138,7 +153,7 @@ class TypeWithoutFormatter {
// This default version is called when kTypeKind is kOtherType.
static
void
PrintValue
(
const
T
&
value
,
::
std
::
ostream
*
os
)
{
PrintBytesInObjectTo
(
static_cast
<
const
unsigned
char
*>
(
reinterpret_cast
<
const
void
*>
(
&
value
)),
reinterpret_cast
<
const
void
*>
(
&
value
)),
sizeof
(
value
),
os
);
}
};
...
...
@@ -176,6 +191,19 @@ class TypeWithoutFormatter<T, kConvertibleToInteger> {
}
};
#if GTEST_HAS_ABSL
template
<
typename
T
>
class
TypeWithoutFormatter
<
T
,
kConvertibleToStringView
>
{
public:
// Since T has neither operator<< nor PrintTo() but can be implicitly
// converted to absl::string_view, we print it as a absl::string_view.
//
// Note: the implementation is further below, as it depends on
// internal::PrintTo symbol which is defined later in the file.
static
void
PrintValue
(
const
T
&
value
,
::
std
::
ostream
*
os
);
};
#endif
// Prints the given value to the given ostream. If the value is a
// protocol message, its debug string is printed; if it's an enum or
// of a type implicitly convertible to BiggestInt, it's printed as an
...
...
@@ -203,10 +231,19 @@ class TypeWithoutFormatter<T, kConvertibleToInteger> {
template
<
typename
Char
,
typename
CharTraits
,
typename
T
>
::
std
::
basic_ostream
<
Char
,
CharTraits
>&
operator
<<
(
::
std
::
basic_ostream
<
Char
,
CharTraits
>&
os
,
const
T
&
x
)
{
TypeWithoutFormatter
<
T
,
(
internal
::
IsAProtocolMessage
<
T
>::
value
?
kProtobuf
:
internal
::
ImplicitlyConvertible
<
const
T
&
,
internal
::
BiggestInt
>::
value
?
kConvertibleToInteger
:
kOtherType
)
>::
PrintValue
(
x
,
&
os
);
TypeWithoutFormatter
<
T
,
(
internal
::
IsAProtocolMessage
<
T
>::
value
?
kProtobuf
:
internal
::
ImplicitlyConvertible
<
const
T
&
,
internal
::
BiggestInt
>::
value
?
kConvertibleToInteger
:
#if GTEST_HAS_ABSL
internal
::
ImplicitlyConvertible
<
const
T
&
,
absl
::
string_view
>::
value
?
kConvertibleToStringView
:
#endif
kOtherType
)
>::
PrintValue
(
x
,
&
os
);
return
os
;
}
...
...
@@ -428,12 +465,8 @@ void DefaultPrintTo(WrapPrinterType<kPrintFunctionPointer> /* dummy */,
}
else
{
// T is a function type, so '*os << p' doesn't do what we want
// (it just prints p as bool). We want to print p as a const
// void*. However, we cannot cast it to const void* directly,
// even using reinterpret_cast, as earlier versions of gcc
// (e.g. 3.4.5) cannot compile the cast when p is a function
// pointer. Casting to UInt64 first solves the problem.
*
os
<<
reinterpret_cast
<
const
void
*>
(
reinterpret_cast
<
internal
::
UInt64
>
(
p
));
// void*.
*
os
<<
reinterpret_cast
<
const
void
*>
(
p
);
}
}
...
...
@@ -461,17 +494,15 @@ void PrintTo(const T& value, ::std::ostream* os) {
// DefaultPrintTo() is overloaded. The type of its first argument
// determines which version will be picked.
//
// Note that we check for
recursive and other
container types here, prior
//
to we check
for protocol message types in our operator<<. The rationale is:
// Note that we check for container types here, prior
to we check
// for protocol message types in our operator<<. The rationale is:
//
// For protocol messages, we want to give people a chance to
// override Google Mock's format by defining a PrintTo() or
// operator<<. For STL containers, other formats can be
// incompatible with Google Mock's format for the container
// elements; therefore we check for container types here to ensure
// that our format is used. To prevent an infinite runtime recursion
// during the output of recursive container types, we check first for
// those.
// that our format is used.
//
// Note that MSVC and clang-cl do allow an implicit conversion from
// pointer-to-function to pointer-to-object, but clang-cl warns on it.
...
...
@@ -480,17 +511,19 @@ void PrintTo(const T& value, ::std::ostream* os) {
// function pointers so that the `*os << p` in the object pointer overload
// doesn't cause that warning either.
DefaultPrintTo
(
WrapPrinterType
<
(
sizeof
(
IsContainerTest
<
T
>
(
0
))
==
sizeof
(
IsContainer
))
&&
!
IsRecursiveContainer
<
T
>::
value
?
kPrintContainer
:
!
is_pointer
<
T
>::
value
?
kPrintOther
WrapPrinterType
<
(
sizeof
(
IsContainerTest
<
T
>
(
0
))
==
sizeof
(
IsContainer
))
&&
!
IsRecursiveContainer
<
T
>::
value
?
kPrintContainer
:
!
is_pointer
<
T
>::
value
?
kPrintOther
#if GTEST_LANG_CXX11
:
std
::
is_function
<
typename
std
::
remove_pointer
<
T
>::
type
>::
value
#else
:
!
internal
::
ImplicitlyConvertible
<
T
,
const
void
*>::
value
#endif
?
kPrintFunctionPointer
:
kPrintPointer
>
(),
?
kPrintFunctionPointer
:
kPrintPointer
>
(),
value
,
os
);
}
...
...
@@ -598,6 +631,17 @@ inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) {
}
#endif // GTEST_HAS_STD_WSTRING
#if GTEST_HAS_ABSL
// Overload for absl::string_view.
inline
void
PrintTo
(
absl
::
string_view
sp
,
::
std
::
ostream
*
os
)
{
PrintTo
(
::
std
::
string
(
sp
),
os
);
}
#endif // GTEST_HAS_ABSL
#if GTEST_LANG_CXX11
inline
void
PrintTo
(
std
::
nullptr_t
,
::
std
::
ostream
*
os
)
{
*
os
<<
"(nullptr)"
;
}
#endif // GTEST_LANG_CXX11
#if GTEST_HAS_TR1_TUPLE || GTEST_HAS_STD_TUPLE_
// Helper function for printing a tuple. T must be instantiated with
// a tuple type.
...
...
@@ -727,6 +771,48 @@ class UniversalPrinter {
GTEST_DISABLE_MSC_WARNINGS_POP_
()
};
#if GTEST_HAS_ABSL
// Printer for absl::optional
template
<
typename
T
>
class
UniversalPrinter
<::
absl
::
optional
<
T
>>
{
public:
static
void
Print
(
const
::
absl
::
optional
<
T
>&
value
,
::
std
::
ostream
*
os
)
{
*
os
<<
'('
;
if
(
!
value
)
{
*
os
<<
"nullopt"
;
}
else
{
UniversalPrint
(
*
value
,
os
);
}
*
os
<<
')'
;
}
};
// Printer for absl::variant
template
<
typename
...
T
>
class
UniversalPrinter
<::
absl
::
variant
<
T
...
>>
{
public:
static
void
Print
(
const
::
absl
::
variant
<
T
...
>&
value
,
::
std
::
ostream
*
os
)
{
*
os
<<
'('
;
absl
::
visit
(
Visitor
{
os
},
value
);
*
os
<<
')'
;
}
private:
struct
Visitor
{
template
<
typename
U
>
void
operator
()(
const
U
&
u
)
const
{
*
os
<<
"'"
<<
GetTypeName
<
U
>
()
<<
"' with value "
;
UniversalPrint
(
u
,
os
);
}
::
std
::
ostream
*
os
;
};
};
#endif // GTEST_HAS_ABSL
// UniversalPrintArray(begin, len, os) prints an array of 'len'
// elements, starting at address 'begin'.
template
<
typename
T
>
...
...
@@ -740,7 +826,7 @@ void UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) {
// If the array has more than kThreshold elements, we'll have to
// omit some details by printing only the first and the last
// kChunkSize elements.
//
TODO(wan@google.com)
: let the user control the threshold using a flag.
//
FIXME
: let the user control the threshold using a flag.
if
(
len
<=
kThreshold
)
{
PrintRawArrayTo
(
begin
,
len
,
os
);
}
else
{
...
...
@@ -873,7 +959,7 @@ void UniversalPrint(const T& value, ::std::ostream* os) {
UniversalPrinter
<
T1
>::
Print
(
value
,
os
);
}
typedef
::
std
::
vector
<
string
>
Strings
;
typedef
::
std
::
vector
<
::
std
::
string
>
Strings
;
// TuplePolicy<TupleT> must provide:
// - tuple_size
...
...
@@ -993,6 +1079,16 @@ Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) {
}
// namespace internal
#if GTEST_HAS_ABSL
namespace
internal2
{
template
<
typename
T
>
void
TypeWithoutFormatter
<
T
,
kConvertibleToStringView
>::
PrintValue
(
const
T
&
value
,
::
std
::
ostream
*
os
)
{
internal
::
PrintTo
(
absl
::
string_view
(
value
),
os
);
}
}
// namespace internal2
#endif
template
<
typename
T
>
::
std
::
string
PrintToString
(
const
T
&
value
)
{
::
std
::
stringstream
ss
;
...
...
googletest/include/gtest/gtest-spi.h
View file @
21e51855
...
...
@@ -26,12 +26,13 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Author: wan@google.com (Zhanyong Wan)
//
// Utilities for testing Google Test itself and code that uses Google Test
// (e.g. frameworks built on top of Google Test).
// GOOGLETEST_CM0004 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_
#define GTEST_INCLUDE_GTEST_GTEST_SPI_H_
...
...
googletest/include/gtest/gtest-test-part.h
View file @
21e51855
...
...
@@ -27,8 +27,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Author: mheule@google.com (Markus Heule)
//
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
#define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
...
...
googletest/include/gtest/gtest-typed-test.h
View file @
21e51855
...
...
@@ -26,8 +26,9 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Author: wan@google.com (Zhanyong Wan)
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
#define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
...
...
@@ -243,7 +244,7 @@ INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes);
} \
static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) \
GTEST_ATTRIBUTE_UNUSED_ = \
GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\
GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(
\
__FILE__, __LINE__, #__VA_ARGS__)
// The 'Types' template argument below must have spaces around it
...
...
googletest/include/gtest/gtest.h
View file @
21e51855
...
...
@@ -26,10 +26,9 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Author: wan@google.com (Zhanyong Wan)
//
// The Google C++ Testing Framework (Google Test)
// The Google C++ Testing and Mocking Framework (Google Test)
//
// This header file defines the public API for Google Test. It should be
// included by any test program that uses Google Test.
...
...
@@ -48,6 +47,8 @@
// registration from Barthelemy Dagenais' (barthelemy@prologique.com)
// easyUnit framework.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_H_
#define GTEST_INCLUDE_GTEST_GTEST_H_
...
...
@@ -82,6 +83,15 @@
namespace
testing
{
// Silence C4100 (unreferenced formal parameter) and 4805
// unsafe mix of type 'const int' and type 'const bool'
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable:4805)
# pragma warning(disable:4100)
#endif
// Declares the flags.
// This flag temporary enables the disabled tests.
...
...
@@ -115,6 +125,9 @@ GTEST_DECLARE_string_(output);
// test.
GTEST_DECLARE_bool_
(
print_time
);
// This flags control whether Google Test prints UTF8 characters as text.
GTEST_DECLARE_bool_
(
print_utf8
);
// This flag specifies the random number seed.
GTEST_DECLARE_int32_
(
random_seed
);
...
...
@@ -135,7 +148,7 @@ GTEST_DECLARE_int32_(stack_trace_depth);
// When this flag is specified, a failed assertion will throw an
// exception if exceptions are enabled, or exit the program with a
// non-zero code otherwise.
// non-zero code otherwise.
For use with an external test framework.
GTEST_DECLARE_bool_
(
throw_on_failure
);
// When this flag is set with a "host:port" string, on supported
...
...
@@ -160,6 +173,7 @@ class TestEventListenersAccessor;
class
TestEventRepeater
;
class
UnitTestRecordPropertyTestHelper
;
class
WindowsDeathTest
;
class
FuchsiaDeathTest
;
class
UnitTestImpl
*
GetUnitTestImpl
();
void
ReportFailureInUnknownLocation
(
TestPartResult
::
Type
result_type
,
const
std
::
string
&
message
);
...
...
@@ -259,7 +273,9 @@ class GTEST_API_ AssertionResult {
// Used in EXPECT_TRUE/FALSE(assertion_result).
AssertionResult
(
const
AssertionResult
&
other
);
#if defined(_MSC_VER) && _MSC_VER < 1910
GTEST_DISABLE_MSC_WARNINGS_PUSH_
(
4800
/* forcing value to bool */
)
#endif
// Used in the EXPECT_TRUE/FALSE(bool_expression).
//
...
...
@@ -276,7 +292,9 @@ class GTEST_API_ AssertionResult {
/*enabler*/
=
NULL
)
:
success_
(
success
)
{}
#if defined(_MSC_VER) && _MSC_VER < 1910
GTEST_DISABLE_MSC_WARNINGS_POP_
()
#endif
// Assignment operator.
AssertionResult
&
operator
=
(
AssertionResult
other
)
{
...
...
@@ -297,7 +315,7 @@ class GTEST_API_ AssertionResult {
const
char
*
message
()
const
{
return
message_
.
get
()
!=
NULL
?
message_
->
c_str
()
:
""
;
}
//
TODO(vladl@google.com)
: Remove this after making sure no clients use it.
//
FIXME
: Remove this after making sure no clients use it.
// Deprecated; please use message() instead.
const
char
*
failure_message
()
const
{
return
message
();
}
...
...
@@ -345,6 +363,15 @@ GTEST_API_ AssertionResult AssertionFailure();
// Deprecated; use AssertionFailure() << msg.
GTEST_API_
AssertionResult
AssertionFailure
(
const
Message
&
msg
);
}
// namespace testing
// Includes the auto-generated header that implements a family of generic
// predicate assertion macros. This include comes late because it relies on
// APIs declared above.
#include "gtest/gtest_pred_impl.h"
namespace
testing
{
// The abstract class that all tests inherit from.
//
// In Google Test, a unit test program contains one or many TestCases, and
...
...
@@ -355,7 +382,7 @@ GTEST_API_ AssertionResult AssertionFailure(const Message& msg);
// this for you.
//
// The only time you derive from Test is when defining a test fixture
// to be used a TEST_F. For example:
// to be used
in
a TEST_F. For example:
//
// class FooTest : public testing::Test {
// protected:
...
...
@@ -550,9 +577,8 @@ class GTEST_API_ TestResult {
// Returns the elapsed time, in milliseconds.
TimeInMillis
elapsed_time
()
const
{
return
elapsed_time_
;
}
// Returns the i-th test part result among all the results. i can range
// from 0 to test_property_count() - 1. If i is not in that range, aborts
// the program.
// Returns the i-th test part result among all the results. i can range from 0
// to total_part_count() - 1. If i is not in that range, aborts the program.
const
TestPartResult
&
GetTestPartResult
(
int
i
)
const
;
// Returns the i-th test property. i can range from 0 to
...
...
@@ -569,6 +595,7 @@ class GTEST_API_ TestResult {
friend
class
internal
::
TestResultAccessor
;
friend
class
internal
::
UnitTestImpl
;
friend
class
internal
::
WindowsDeathTest
;
friend
class
internal
::
FuchsiaDeathTest
;
// Gets the vector of TestPartResults.
const
std
::
vector
<
TestPartResult
>&
test_part_results
()
const
{
...
...
@@ -594,7 +621,7 @@ class GTEST_API_ TestResult {
// Adds a failure if the key is a reserved attribute of Google Test
// testcase tags. Returns true if the property is valid.
//
TODO(russr)
: Validate attribute names are legal and human readable.
//
FIXME
: Validate attribute names are legal and human readable.
static
bool
ValidateTestProperty
(
const
std
::
string
&
xml_element
,
const
TestProperty
&
test_property
);
...
...
@@ -675,6 +702,9 @@ class GTEST_API_ TestInfo {
// Returns the line where this test is defined.
int
line
()
const
{
return
location_
.
line
;
}
// Return true if this test should not be run because it's in another shard.
bool
is_in_another_shard
()
const
{
return
is_in_another_shard_
;
}
// Returns true if this test should run, that is if the test is not
// disabled (or it is disabled but the also_run_disabled_tests flag has
// been specified) and its full name matches the user-specified filter.
...
...
@@ -695,10 +725,9 @@ class GTEST_API_ TestInfo {
// Returns true iff this test will appear in the XML report.
bool
is_reportable
()
const
{
// For now, the XML report includes all tests matching the filter.
// In the future, we may trim tests that are excluded because of
// sharding.
return
matches_filter_
;
// The XML report includes tests matching the filter, excluding those
// run in other shards.
return
matches_filter_
&&
!
is_in_another_shard_
;
}
// Returns the result of the test.
...
...
@@ -762,6 +791,7 @@ class GTEST_API_ TestInfo {
bool
is_disabled_
;
// True iff this test is disabled
bool
matches_filter_
;
// True if this test matches the
// user-specified filter.
bool
is_in_another_shard_
;
// Will be run in another shard.
internal
::
TestFactoryBase
*
const
factory_
;
// The factory that creates
// the test object
...
...
@@ -986,6 +1016,18 @@ class Environment {
virtual
Setup_should_be_spelled_SetUp
*
Setup
()
{
return
NULL
;
}
};
#if GTEST_HAS_EXCEPTIONS
// Exception which can be thrown from TestEventListener::OnTestPartResult.
class
GTEST_API_
AssertionException
:
public
internal
::
GoogleTestFailureException
{
public:
explicit
AssertionException
(
const
TestPartResult
&
result
)
:
GoogleTestFailureException
(
result
)
{}
};
#endif // GTEST_HAS_EXCEPTIONS
// The interface for tracing execution of tests. The methods are organized in
// the order the corresponding events are fired.
class
TestEventListener
{
...
...
@@ -1014,6 +1056,8 @@ class TestEventListener {
virtual
void
OnTestStart
(
const
TestInfo
&
test_info
)
=
0
;
// Fired after a failed assertion or a SUCCEED() invocation.
// If you want to throw an exception from this function to skip to the next
// TEST, it must be AssertionException defined above, or inherited from it.
virtual
void
OnTestPartResult
(
const
TestPartResult
&
test_part_result
)
=
0
;
// Fired after the test ends.
...
...
@@ -1180,14 +1224,12 @@ class GTEST_API_ UnitTest {
// Returns the random seed used at the start of the current test run.
int
random_seed
()
const
;
#if GTEST_HAS_PARAM_TEST
// Returns the ParameterizedTestCaseRegistry object used to keep track of
// value-parameterized tests and instantiate and register them.
//
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
internal
::
ParameterizedTestCaseRegistry
&
parameterized_test_registry
()
GTEST_LOCK_EXCLUDED_
(
mutex_
);
#endif // GTEST_HAS_PARAM_TEST
// Gets the number of successful test cases.
int
successful_test_case_count
()
const
;
...
...
@@ -1289,9 +1331,9 @@ class GTEST_API_ UnitTest {
// These classes and functions are friends as they need to access private
// members of UnitTest.
friend
class
ScopedTrace
;
friend
class
Test
;
friend
class
internal
::
AssertHelper
;
friend
class
internal
::
ScopedTrace
;
friend
class
internal
::
StreamingListenerTest
;
friend
class
internal
::
UnitTestRecordPropertyTestHelper
;
friend
Environment
*
AddGlobalTestEnvironment
(
Environment
*
env
);
...
...
@@ -1388,11 +1430,9 @@ AssertionResult CmpHelperEQ(const char* lhs_expression,
const
char
*
rhs_expression
,
const
T1
&
lhs
,
const
T2
&
rhs
)
{
GTEST_DISABLE_MSC_WARNINGS_PUSH_
(
4389
/* signed/unsigned mismatch */
)
if
(
lhs
==
rhs
)
{
return
AssertionSuccess
();
}
GTEST_DISABLE_MSC_WARNINGS_POP_
()
return
CmpHelperEQFailure
(
lhs_expression
,
rhs_expression
,
lhs
,
rhs
);
}
...
...
@@ -1706,7 +1746,6 @@ class GTEST_API_ AssertHelper {
}
// namespace internal
#if GTEST_HAS_PARAM_TEST
// The pure interface class that all value-parameterized tests inherit from.
// A value-parameterized class must inherit from both ::testing::Test and
// ::testing::WithParamInterface. In most cases that just means inheriting
...
...
@@ -1783,8 +1822,6 @@ template <typename T>
class
TestWithParam
:
public
Test
,
public
WithParamInterface
<
T
>
{
};
#endif // GTEST_HAS_PARAM_TEST
// Macros for indicating success/failure in test code.
// ADD_FAILURE unconditionally adds a failure to the current test.
...
...
@@ -1857,22 +1894,18 @@ class TestWithParam : public Test, public WithParamInterface<T> {
// AssertionResult. For more information on how to use AssertionResult with
// these macros see comments on that class.
#define EXPECT_TRUE(condition) \
GTEST_TEST_BOOLEAN_(
(
condition
)
, #condition, false, true, \
GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \
GTEST_NONFATAL_FAILURE_)
#define EXPECT_FALSE(condition) \
GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
GTEST_NONFATAL_FAILURE_)
#define ASSERT_TRUE(condition) \
GTEST_TEST_BOOLEAN_(
(
condition
)
, #condition, false, true, \
GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \
GTEST_FATAL_FAILURE_)
#define ASSERT_FALSE(condition) \
GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
GTEST_FATAL_FAILURE_)
// Includes the auto-generated header that implements a family of
// generic predicate assertion macros.
#include "gtest/gtest_pred_impl.h"
// Macros for testing equalities and inequalities.
//
// * {ASSERT|EXPECT}_EQ(v1, v2): Tests that v1 == v2
...
...
@@ -1914,8 +1947,8 @@ class TestWithParam : public Test, public WithParamInterface<T> {
//
// Examples:
//
// EXPECT_NE(
5,
Foo());
// EXPECT_EQ(
NULL,
a_pointer);
// EXPECT_NE(Foo()
, 5
);
// EXPECT_EQ(a_pointer
, NULL
);
// ASSERT_LT(i, array_size);
// ASSERT_GT(records.size(), 0) << "There is no record left.";
...
...
@@ -2101,6 +2134,57 @@ GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2,
#define EXPECT_NO_FATAL_FAILURE(statement) \
GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_)
// Causes a trace (including the given source file path and line number,
// and the given message) to be included in every test failure message generated
// by code in the scope of the lifetime of an instance of this class. The effect
// is undone with the destruction of the instance.
//
// The message argument can be anything streamable to std::ostream.
//
// Example:
// testing::ScopedTrace trace("file.cc", 123, "message");
//
class
GTEST_API_
ScopedTrace
{
public:
// The c'tor pushes the given source file location and message onto
// a trace stack maintained by Google Test.
// Template version. Uses Message() to convert the values into strings.
// Slow, but flexible.
template
<
typename
T
>
ScopedTrace
(
const
char
*
file
,
int
line
,
const
T
&
message
)
{
PushTrace
(
file
,
line
,
(
Message
()
<<
message
).
GetString
());
}
// Optimize for some known types.
ScopedTrace
(
const
char
*
file
,
int
line
,
const
char
*
message
)
{
PushTrace
(
file
,
line
,
message
?
message
:
"(null)"
);
}
#if GTEST_HAS_GLOBAL_STRING
ScopedTrace
(
const
char
*
file
,
int
line
,
const
::
string
&
message
)
{
PushTrace
(
file
,
line
,
message
);
}
#endif
ScopedTrace
(
const
char
*
file
,
int
line
,
const
std
::
string
&
message
)
{
PushTrace
(
file
,
line
,
message
);
}
// The d'tor pops the info pushed by the c'tor.
//
// Note that the d'tor is not virtual in order to be efficient.
// Don't inherit from ScopedTrace!
~
ScopedTrace
();
private:
void
PushTrace
(
const
char
*
file
,
int
line
,
std
::
string
message
);
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
ScopedTrace
);
}
GTEST_ATTRIBUTE_UNUSED_
;
// A ScopedTrace object does its job in its
// c'tor and d'tor. Therefore it doesn't
// need to be used otherwise.
// Causes a trace (including the source file path, the current line
// number, and the given message) to be included in every test failure
// message generated by code in the current scope. The effect is
...
...
@@ -2112,9 +2196,14 @@ GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2,
// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s
// to appear in the same block - as long as they are on different
// lines.
//
// Assuming that each thread maintains its own stack of traces.
// Therefore, a SCOPED_TRACE() would (correctly) only affect the
// assertions in its own thread.
#define SCOPED_TRACE(message) \
::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\
__FILE__, __LINE__, ::testing::Message() << (message))
::testing::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\
__FILE__, __LINE__, (message))
// Compile-time assertion for type equality.
// StaticAssertTypeEq<type1, type2>() compiles iff type1 and type2 are
...
...
@@ -2209,8 +2298,8 @@ bool StaticAssertTypeEq() {
// }
//
// TEST_F(FooTest, ReturnsElementCountCorrectly) {
// EXPECT_EQ(
0,
a_.size());
// EXPECT_EQ(
1,
b_.size());
// EXPECT_EQ(a_.size()
, 0
);
// EXPECT_EQ(b_.size()
, 1
);
// }
#define TEST_F(test_fixture, test_name)\
...
...
@@ -2221,6 +2310,10 @@ bool StaticAssertTypeEq() {
// Tries to determine an appropriate directory for the platform.
GTEST_API_
std
::
string
TempDir
();
#ifdef _MSC_VER
# pragma warning(pop)
#endif
}
// namespace testing
// Use this function in main() to run all tests. It returns 0 if all
...
...
googletest/include/gtest/gtest_pred_impl.h
View file @
21e51855
...
...
@@ -27,18 +27,19 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// This file is AUTOMATICALLY GENERATED on
10/31
/201
1
by command
// This file is AUTOMATICALLY GENERATED on
01/02
/201
8
by command
// 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND!
//
// Implements a family of generic predicate assertion macros.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
// Makes sure this header is not included before gtest.h.
#ifndef GTEST_INCLUDE_GTEST_GTEST_H_
# error Do not include gtest_pred_impl.h directly. Include gtest.h instead.
#endif // GTEST_INCLUDE_GTEST_GTEST_H_
#include "gtest/gtest.h"
namespace
testing
{
// This header implements a family of generic predicate assertion
// macros:
...
...
@@ -66,8 +67,6 @@
// We also define the EXPECT_* variations.
//
// For now we only support predicates whose arity is at most 5.
// Please email googletestframework@googlegroups.com if you need
// support for higher arities.
// GTEST_ASSERT_ is the basic statement to which all of the assertions
// in this file reduce. Don't use this in your code.
...
...
@@ -355,4 +354,6 @@ AssertionResult AssertPred5Helper(const char* pred_text,
}
// namespace testing
#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
googletest/include/gtest/gtest_prod.h
View file @
21e51855
...
...
@@ -26,10 +26,10 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Author: wan@google.com (Zhanyong Wan)
//
// Google C++ Testing Framework definitions useful in production code.
// Google C++ Testing and Mocking Framework definitions useful in production code.
// GOOGLETEST_CM0003 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_
#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_
...
...
@@ -40,17 +40,20 @@
//
// class MyClass {
// private:
// void
My
Method();
// FRIEND_TEST(MyClassTest,
My
Method);
// void
Private
Method();
// FRIEND_TEST(MyClassTest,
Private
Method
Works
);
// };
//
// class MyClassTest : public testing::Test {
// // ...
// };
//
// TEST_F(MyClassTest,
My
Method) {
// // Can call MyClass::
My
Method() here.
// TEST_F(MyClassTest,
Private
Method
Works
) {
// // Can call MyClass::
Private
Method() here.
// }
//
// Note: The test class must be in the same namespace as the class being tested.
// For example, putting MyClassTest in an anonymous namespace will not work.
#define FRIEND_TEST(test_case_name, test_name)\
friend class test_case_name##_##test_name##_Test
...
...
googletest/include/gtest/internal/custom/README.md
0 → 100644
View file @
21e51855
# Customization Points
The custom directory is an injection point for custom user configurations.
## Header `gtest.h`
### The following macros can be defined:
*
`GTEST_OS_STACK_TRACE_GETTER_`
- The name of an implementation of
`OsStackTraceGetterInterface`
.
*
`GTEST_CUSTOM_TEMPDIR_FUNCTION_`
- An override for
`testing::TempDir()`
. See
`testing::TempDir`
for semantics and signature.
## Header `gtest-port.h`
The following macros can be defined:
### Flag related macros:
*
`GTEST_FLAG(flag_name)`
*
`GTEST_USE_OWN_FLAGFILE_FLAG_`
- Define to 0 when the system provides its
own flagfile flag parsing.
*
`GTEST_DECLARE_bool_(name)`
*
`GTEST_DECLARE_int32_(name)`
*
`GTEST_DECLARE_string_(name)`
*
`GTEST_DEFINE_bool_(name, default_val, doc)`
*
`GTEST_DEFINE_int32_(name, default_val, doc)`
*
`GTEST_DEFINE_string_(name, default_val, doc)`
### Logging:
*
`GTEST_LOG_(severity)`
*
`GTEST_CHECK_(condition)`
*
Functions
`LogToStderr()`
and
`FlushInfoLog()`
have to be provided too.
### Threading:
*
`GTEST_HAS_NOTIFICATION_`
- Enabled if Notification is already provided.
*
`GTEST_HAS_MUTEX_AND_THREAD_LOCAL_`
- Enabled if
`Mutex`
and
`ThreadLocal`
are already provided. Must also provide
`GTEST_DECLARE_STATIC_MUTEX_(mutex)`
and
`GTEST_DEFINE_STATIC_MUTEX_(mutex)`
*
`GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks)`
*
`GTEST_LOCK_EXCLUDED_(locks)`
### Underlying library support features
*
`GTEST_HAS_CXXABI_H_`
### Exporting API symbols:
*
`GTEST_API_`
- Specifier for exported symbols.
## Header `gtest-printers.h`
*
See documentation at
`gtest/gtest-printers.h`
for details on how to define a
custom printer.
googletest/include/gtest/internal/custom/gtest-port.h
View file @
21e51855
...
...
@@ -27,42 +27,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Injection point for custom user configurations.
// The following macros can be defined:
//
// Flag related macros:
// GTEST_FLAG(flag_name)
// GTEST_USE_OWN_FLAGFILE_FLAG_ - Define to 0 when the system provides its
// own flagfile flag parsing.
// GTEST_DECLARE_bool_(name)
// GTEST_DECLARE_int32_(name)
// GTEST_DECLARE_string_(name)
// GTEST_DEFINE_bool_(name, default_val, doc)
// GTEST_DEFINE_int32_(name, default_val, doc)
// GTEST_DEFINE_string_(name, default_val, doc)
//
// Test filtering:
// GTEST_TEST_FILTER_ENV_VAR_ - The name of an environment variable that
// will be used if --GTEST_FLAG(test_filter)
// is not provided.
//
// Logging:
// GTEST_LOG_(severity)
// GTEST_CHECK_(condition)
// Functions LogToStderr() and FlushInfoLog() have to be provided too.
//
// Threading:
// GTEST_HAS_NOTIFICATION_ - Enabled if Notification is already provided.
// GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ - Enabled if Mutex and ThreadLocal are
// already provided.
// Must also provide GTEST_DECLARE_STATIC_MUTEX_(mutex) and
// GTEST_DEFINE_STATIC_MUTEX_(mutex)
//
// GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks)
// GTEST_LOCK_EXCLUDED_(locks)
//
// Exporting API symbols:
// GTEST_API_ - Specifier for exported symbols.
// Injection point for custom user configurations. See README for details
//
// ** Custom implementation starts here **
...
...
googletest/include/gtest/internal/custom/gtest-printers.h
View file @
21e51855
...
...
@@ -31,8 +31,8 @@
// installation of gTest.
// It will be included from gtest-printers.h and the overrides in this file
// will be visible to everyone.
//
See documentation at gtest/gtest-printers.h for details on how to define a
//
custom printer.
//
//
Injection point for custom user configurations. See README for details
//
// ** Custom implementation starts here **
...
...
googletest/include/gtest/internal/custom/gtest.h
View file @
21e51855
...
...
@@ -27,16 +27,8 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Injection point for custom user configurations.
// The following macros can be defined:
// Injection point for custom user configurations. See README for details
//
// GTEST_OS_STACK_TRACE_GETTER_ - The name of an implementation of
// OsStackTraceGetterInterface.
//
// GTEST_CUSTOM_TEMPDIR_FUNCTION_ - An override for testing::TempDir().
// See testing::TempDir for semantics and
// signature.
//
// ** Custom implementation starts here **
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_H_
...
...
googletest/include/gtest/internal/gtest-death-test-internal.h
View file @
21e51855
...
...
@@ -27,12 +27,11 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee)
//
// The Google C++ Testing Framework (Google Test)
// The Google C++ Testing and Mocking Framework (Google Test)
//
// This header file defines internal utilities needed for implementing
// death tests. They are subject to change without notice.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
...
...
@@ -218,14 +217,18 @@ GTEST_API_ bool ExitedUnsuccessfully(int exit_status);
// can be streamed.
// This macro is for implementing ASSERT/EXPECT_DEBUG_DEATH when compiled in
// NDEBUG mode. In this case we need the statements to be executed, the regex is
// ignored, and the macro must accept a streamed message even though the message
// is never printed.
# define GTEST_EXECUTE_STATEMENT_(statement, regex) \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
if (::testing::internal::AlwaysTrue()) { \
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
} else \
// NDEBUG mode. In this case we need the statements to be executed and the macro
// must accept a streamed message even though the message is never printed.
// The regex object is not evaluated, but it is used to prevent "unused"
// warnings and to avoid an expression that doesn't compile in debug mode.
#define GTEST_EXECUTE_STATEMENT_(statement, regex) \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
if (::testing::internal::AlwaysTrue()) { \
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
} else if (!::testing::internal::AlwaysTrue()) { \
const ::testing::internal::RE& gtest_regex = (regex); \
static_cast<void>(gtest_regex); \
} else \
::testing::Message()
// A class representing the parsed contents of the
...
...
@@ -264,53 +267,6 @@ class InternalRunDeathTestFlag {
// the flag is specified; otherwise returns NULL.
InternalRunDeathTestFlag
*
ParseInternalRunDeathTestFlag
();
#else // GTEST_HAS_DEATH_TEST
// This macro is used for implementing macros such as
// EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where
// death tests are not supported. Those macros must compile on such systems
// iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on
// systems that support death tests. This allows one to write such a macro
// on a system that does not support death tests and be sure that it will
// compile on a death-test supporting system.
//
// Parameters:
// statement - A statement that a macro such as EXPECT_DEATH would test
// for program termination. This macro has to make sure this
// statement is compiled but not executed, to ensure that
// EXPECT_DEATH_IF_SUPPORTED compiles with a certain
// parameter iff EXPECT_DEATH compiles with it.
// regex - A regex that a macro such as EXPECT_DEATH would use to test
// the output of statement. This parameter has to be
// compiled but not evaluated by this macro, to ensure that
// this macro only accepts expressions that a macro such as
// EXPECT_DEATH would accept.
// terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED
// and a return statement for ASSERT_DEATH_IF_SUPPORTED.
// This ensures that ASSERT_DEATH_IF_SUPPORTED will not
// compile inside functions where ASSERT_DEATH doesn't
// compile.
//
// The branch that has an always false condition is used to ensure that
// statement and regex are compiled (and thus syntactically correct) but
// never executed. The unreachable code macro protects the terminator
// statement from generating an 'unreachable code' warning in case
// statement unconditionally returns or throws. The Message constructor at
// the end allows the syntax of streaming additional messages into the
// macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH.
# define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
if (::testing::internal::AlwaysTrue()) { \
GTEST_LOG_(WARNING) \
<< "Death tests are not supported on this platform.\n" \
<< "Statement '" #statement "' cannot be verified."; \
} else if (::testing::internal::AlwaysFalse()) { \
::testing::internal::RE::PartialMatch(".*", (regex)); \
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
terminator; \
} else \
::testing::Message()
#endif // GTEST_HAS_DEATH_TEST
}
// namespace internal
...
...
googletest/include/gtest/internal/gtest-filepath.h
View file @
21e51855
...
...
@@ -27,16 +27,16 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Author: keith.ray@gmail.com (Keith Ray)
//
// Google Test filepath utilities
//
// This header file declares classes and functions used internally by
// Google Test. They are subject to change without notice.
//
// This file is #included in
<
gtest/internal/gtest-internal.h
>
.
// This file is #included in gtest/internal/gtest-internal.h.
// Do not include this header file separately!
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
...
...
googletest/include/gtest/internal/gtest-internal.h
View file @
21e51855
...
...
@@ -27,13 +27,13 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee)
//
// The Google C++ Testing Framework (Google Test)
// The Google C++ Testing and Mocking Framework (Google Test)
//
// This header file declares functions and macros used internally by
// Google Test. They are subject to change without notice.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
...
...
@@ -61,8 +61,8 @@
#include <vector>
#include "gtest/gtest-message.h"
#include "gtest/internal/gtest-string.h"
#include "gtest/internal/gtest-filepath.h"
#include "gtest/internal/gtest-string.h"
#include "gtest/internal/gtest-type-util.h"
// Due to C++ preprocessor weirdness, we need double indirection to
...
...
@@ -76,6 +76,9 @@
#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)
#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar
// Stringifies its argument.
#define GTEST_STRINGIFY_(name) #name
class
ProtocolMessage
;
namespace
proto2
{
class
Message
;
}
...
...
@@ -96,7 +99,6 @@ template <typename T>
namespace
internal
{
struct
TraceInfo
;
// Information about a trace point.
class
ScopedTrace
;
// Implements scoped trace.
class
TestInfoImpl
;
// Opaque implementation of TestInfo
class
UnitTestImpl
;
// Opaque implementation of UnitTest
...
...
@@ -152,25 +154,6 @@ class GTEST_API_ GoogleTestFailureException : public ::std::runtime_error {
#endif // GTEST_HAS_EXCEPTIONS
// A helper class for creating scoped traces in user programs.
class
GTEST_API_
ScopedTrace
{
public:
// The c'tor pushes the given source file location and message onto
// a trace stack maintained by Google Test.
ScopedTrace
(
const
char
*
file
,
int
line
,
const
Message
&
message
);
// The d'tor pops the info pushed by the c'tor.
//
// Note that the d'tor is not virtual in order to be efficient.
// Don't inherit from ScopedTrace!
~
ScopedTrace
();
private:
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
ScopedTrace
);
}
GTEST_ATTRIBUTE_UNUSED_
;
// A ScopedTrace object does its job in its
// c'tor and d'tor. Therefore it doesn't
// need to be used otherwise.
namespace
edit_distance
{
// Returns the optimal edits to go from 'left' to 'right'.
// All edits cost the same, with replace having lower priority than
...
...
@@ -628,7 +611,7 @@ class TypeParameterizedTest {
// Types). Valid values for 'index' are [0, N - 1] where N is the
// length of Types.
static
bool
Register
(
const
char
*
prefix
,
CodeLocation
code_location
,
const
CodeLocation
&
code_location
,
const
char
*
case_name
,
const
char
*
test_names
,
int
index
)
{
typedef
typename
Types
::
Head
Type
;
...
...
@@ -659,7 +642,7 @@ class TypeParameterizedTest {
template
<
GTEST_TEMPLATE_
Fixture
,
class
TestSel
>
class
TypeParameterizedTest
<
Fixture
,
TestSel
,
Types0
>
{
public:
static
bool
Register
(
const
char
*
/*prefix*/
,
CodeLocation
,
static
bool
Register
(
const
char
*
/*prefix*/
,
const
CodeLocation
&
,
const
char
*
/*case_name*/
,
const
char
*
/*test_names*/
,
int
/*index*/
)
{
return
true
;
...
...
@@ -705,7 +688,7 @@ class TypeParameterizedTestCase {
template
<
GTEST_TEMPLATE_
Fixture
,
typename
Types
>
class
TypeParameterizedTestCase
<
Fixture
,
Templates0
,
Types
>
{
public:
static
bool
Register
(
const
char
*
/*prefix*/
,
CodeLocation
,
static
bool
Register
(
const
char
*
/*prefix*/
,
const
CodeLocation
&
,
const
TypedTestCasePState
*
/*state*/
,
const
char
*
/*case_name*/
,
const
char
*
/*test_names*/
)
{
return
true
;
...
...
@@ -824,31 +807,6 @@ struct RemoveConst<T[N]> {
#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \
GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T))
// Adds reference to a type if it is not a reference type,
// otherwise leaves it unchanged. This is the same as
// tr1::add_reference, which is not widely available yet.
template
<
typename
T
>
struct
AddReference
{
typedef
T
&
type
;
};
// NOLINT
template
<
typename
T
>
struct
AddReference
<
T
&>
{
typedef
T
&
type
;
};
// NOLINT
// A handy wrapper around AddReference that works when the argument T
// depends on template parameters.
#define GTEST_ADD_REFERENCE_(T) \
typename ::testing::internal::AddReference<T>::type
// Adds a reference to const on top of T as necessary. For example,
// it transforms
//
// char ==> const char&
// const char ==> const char&
// char& ==> const char&
// const char& ==> const char&
//
// The argument T must depend on some template parameters.
#define GTEST_REFERENCE_TO_CONST_(T) \
GTEST_ADD_REFERENCE_(const GTEST_REMOVE_REFERENCE_(T))
// ImplicitlyConvertible<From, To>::value is a compile-time bool
// constant that's true iff type From can be implicitly converted to
// type To.
...
...
@@ -918,8 +876,11 @@ struct IsAProtocolMessage
// a container class by checking the type of IsContainerTest<C>(0).
// The value of the expression is insignificant.
//
// Note that we look for both C::iterator and C::const_iterator. The
// reason is that C++ injects the name of a class as a member of the
// In C++11 mode we check the existence of a const_iterator and that an
// iterator is properly implemented for the container.
//
// For pre-C++11 that we look for both C::iterator and C::const_iterator.
// The reason is that C++ injects the name of a class as a member of the
// class itself (e.g. you can refer to class iterator as either
// 'iterator' or 'iterator::iterator'). If we look for C::iterator
// only, for example, we would mistakenly think that a class named
...
...
@@ -929,40 +890,94 @@ struct IsAProtocolMessage
// IsContainerTest(typename C::const_iterator*) and
// IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++.
typedef
int
IsContainer
;
#if GTEST_LANG_CXX11
template
<
class
C
,
class
Iterator
=
decltype
(
::
std
::
declval
<
const
C
&
>().
begin
()),
class
=
decltype
(
::
std
::
declval
<
const
C
&>
().
end
()),
class
=
decltype
(
++::
std
::
declval
<
Iterator
&>
()),
class
=
decltype
(
*::
std
::
declval
<
Iterator
>
()),
class
=
typename
C
::
const_iterator
>
IsContainer
IsContainerTest
(
int
/* dummy */
)
{
return
0
;
}
#else
template
<
class
C
>
IsContainer
IsContainerTest
(
int
/* dummy */
,
typename
C
::
iterator
*
/* it */
=
NULL
,
typename
C
::
const_iterator
*
/* const_it */
=
NULL
)
{
return
0
;
}
#endif // GTEST_LANG_CXX11
typedef
char
IsNotContainer
;
template
<
class
C
>
IsNotContainer
IsContainerTest
(
long
/* dummy */
)
{
return
'\0'
;
}
template
<
typename
C
,
bool
=
sizeof
(
IsContainerTest
<
C
>(
0
))
==
sizeof
(
IsContainer
)
>
// Trait to detect whether a type T is a hash table.
// The heuristic used is that the type contains an inner type `hasher` and does
// not contain an inner type `reverse_iterator`.
// If the container is iterable in reverse, then order might actually matter.
template
<
typename
T
>
struct
IsHashTable
{
private:
template
<
typename
U
>
static
char
test
(
typename
U
::
hasher
*
,
typename
U
::
reverse_iterator
*
);
template
<
typename
U
>
static
int
test
(
typename
U
::
hasher
*
,
...);
template
<
typename
U
>
static
char
test
(...);
public:
static
const
bool
value
=
sizeof
(
test
<
T
>
(
0
,
0
))
==
sizeof
(
int
);
};
template
<
typename
T
>
const
bool
IsHashTable
<
T
>::
value
;
template
<
typename
T
>
struct
VoidT
{
typedef
void
value_type
;
};
template
<
typename
T
,
typename
=
void
>
struct
HasValueType
:
false_type
{};
template
<
typename
T
>
struct
HasValueType
<
T
,
VoidT
<
typename
T
::
value_type
>
>
:
true_type
{
};
template
<
typename
C
,
bool
=
sizeof
(
IsContainerTest
<
C
>(
0
))
==
sizeof
(
IsContainer
),
bool
=
HasValueType
<
C
>::
value
>
struct
IsRecursiveContainerImpl
;
template
<
typename
C
,
bool
HV
>
struct
IsRecursiveContainerImpl
<
C
,
false
,
HV
>
:
public
false_type
{};
// Since the IsRecursiveContainerImpl depends on the IsContainerTest we need to
// obey the same inconsistencies as the IsContainerTest, namely check if
// something is a container is relying on only const_iterator in C++11 and
// is relying on both const_iterator and iterator otherwise
template
<
typename
C
>
struct
IsRecursiveContainerImpl
<
C
,
false
>
:
public
false_type
{};
struct
IsRecursiveContainerImpl
<
C
,
true
,
false
>
:
public
false_type
{};
template
<
typename
C
>
struct
IsRecursiveContainerImpl
<
C
,
true
>
{
typedef
typename
IteratorTraits
<
typename
C
::
iterator
>::
value_type
value_type
;
struct
IsRecursiveContainerImpl
<
C
,
true
,
true
>
{
#if GTEST_LANG_CXX11
typedef
typename
IteratorTraits
<
typename
C
::
const_iterator
>::
value_type
value_type
;
#else
typedef
typename
IteratorTraits
<
typename
C
::
iterator
>::
value_type
value_type
;
#endif
typedef
is_same
<
value_type
,
C
>
type
;
};
// IsRecursiveContainer<Type> is a unary compile-time predicate that
// evaluates whether C is a recursive container type. A recursive container
// evaluates whether C is a recursive container type. A recursive container
// type is a container type whose value_type is equal to the container type
// itself. An example for a recursive container type is
// boost::filesystem::path, whose iterator has a value_type that is equal to
// itself. An example for a recursive container type is
// boost::filesystem::path, whose iterator has a value_type that is equal to
// boost::filesystem::path.
template
<
typename
C
>
template
<
typename
C
>
struct
IsRecursiveContainer
:
public
IsRecursiveContainerImpl
<
C
>::
type
{};
// EnableIf<condition>::type is void when 'Cond' is true, and
...
...
@@ -1096,7 +1111,7 @@ class NativeArray {
private:
enum
{
kCheckTypeIsNotConstOrAReference
=
StaticAssertTypeEqHelper
<
Element
,
GTEST_REMOVE_REFERENCE_AND_CONST_
(
Element
)
>::
value
,
Element
,
GTEST_REMOVE_REFERENCE_AND_CONST_
(
Element
)
>::
value
};
// Initializes this object with a copy of the input.
...
...
@@ -1141,7 +1156,7 @@ class NativeArray {
#define GTEST_SUCCESS_(message) \
GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess)
// Suppress
es
MSVC warning
s
4
0
72 (unreachable code) for the code following
// Suppress MSVC warning 47
0
2 (unreachable code) for the code following
// statement if it returns or throws (or doesn't return or throw in some
// situations).
#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \
...
...
@@ -1261,4 +1276,3 @@ class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\
void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
googletest/include/gtest/internal/gtest-linked_ptr.h
View file @
21e51855
...
...
@@ -27,8 +27,6 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Authors: Dan Egnor (egnor@google.com)
//
// A "smart" pointer type with reference tracking. Every pointer to a
// particular object is kept on a circular linked list. When the last pointer
// to an object is destroyed or reassigned, the object is deleted.
...
...
@@ -62,9 +60,11 @@
// raw pointer (e.g. via get()) concurrently, and
// - it's safe to write to two linked_ptrs that point to the same
// shared object concurrently.
//
TODO(wan@google.com)
: rename this to safe_linked_ptr to avoid
//
FIXME
: rename this to safe_linked_ptr to avoid
// confusion with normal linked_ptr.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
...
...
googletest/include/gtest/internal/gtest-param-util-generated.h
View file @
21e51855
...
...
@@ -30,8 +30,7 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Author: vladl@google.com (Vlad Losev)
// Type and function utilities for implementing parameterized tests.
// This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
...
...
@@ -43,17 +42,14 @@
// by the maximum arity of the implementation of tuple which is
// currently set at 10.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
// scripts/fuse_gtest.py depends on gtest's own header being #included
// *unconditionally*. Therefore these #includes cannot be moved
// inside #if GTEST_HAS_PARAM_TEST.
#include "gtest/internal/gtest-param-util.h"
#include "gtest/internal/gtest-port.h"
#if GTEST_HAS_PARAM_TEST
namespace
testing
{
// Forward declarations of ValuesIn(), which is implemented in
...
...
@@ -3208,7 +3204,7 @@ class CartesianProductGenerator2
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
}
virtual
const
ParamType
*
Current
()
const
{
return
&
current_value_
;
}
virtual
const
ParamType
*
Current
()
const
{
return
current_value_
.
get
()
;
}
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
...
...
@@ -3240,7 +3236,7 @@ class CartesianProductGenerator2
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
);
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
)
)
;
}
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
...
...
@@ -3262,7 +3258,7 @@ class CartesianProductGenerator2
const
typename
ParamGenerator
<
T2
>::
iterator
begin2_
;
const
typename
ParamGenerator
<
T2
>::
iterator
end2_
;
typename
ParamGenerator
<
T2
>::
iterator
current2_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator2::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -3331,7 +3327,7 @@ class CartesianProductGenerator3
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
}
virtual
const
ParamType
*
Current
()
const
{
return
&
current_value_
;
}
virtual
const
ParamType
*
Current
()
const
{
return
current_value_
.
get
()
;
}
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
...
...
@@ -3367,7 +3363,7 @@ class CartesianProductGenerator3
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
);
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
)
)
;
}
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
...
...
@@ -3393,7 +3389,7 @@ class CartesianProductGenerator3
const
typename
ParamGenerator
<
T3
>::
iterator
begin3_
;
const
typename
ParamGenerator
<
T3
>::
iterator
end3_
;
typename
ParamGenerator
<
T3
>::
iterator
current3_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator3::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -3472,7 +3468,7 @@ class CartesianProductGenerator4
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
}
virtual
const
ParamType
*
Current
()
const
{
return
&
current_value_
;
}
virtual
const
ParamType
*
Current
()
const
{
return
current_value_
.
get
()
;
}
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
...
...
@@ -3512,8 +3508,8 @@ class CartesianProductGenerator4
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
);
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
)
)
;
}
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
...
...
@@ -3543,7 +3539,7 @@ class CartesianProductGenerator4
const
typename
ParamGenerator
<
T4
>::
iterator
begin4_
;
const
typename
ParamGenerator
<
T4
>::
iterator
end4_
;
typename
ParamGenerator
<
T4
>::
iterator
current4_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator4::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -3630,7 +3626,7 @@ class CartesianProductGenerator5
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
}
virtual
const
ParamType
*
Current
()
const
{
return
&
current_value_
;
}
virtual
const
ParamType
*
Current
()
const
{
return
current_value_
.
get
()
;
}
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
...
...
@@ -3674,8 +3670,8 @@ class CartesianProductGenerator5
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
);
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
)
)
;
}
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
...
...
@@ -3709,7 +3705,7 @@ class CartesianProductGenerator5
const
typename
ParamGenerator
<
T5
>::
iterator
begin5_
;
const
typename
ParamGenerator
<
T5
>::
iterator
end5_
;
typename
ParamGenerator
<
T5
>::
iterator
current5_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator5::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -3807,7 +3803,7 @@ class CartesianProductGenerator6
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
}
virtual
const
ParamType
*
Current
()
const
{
return
&
current_value_
;
}
virtual
const
ParamType
*
Current
()
const
{
return
current_value_
.
get
()
;
}
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
...
...
@@ -3855,8 +3851,8 @@ class CartesianProductGenerator6
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
,
*
current6_
);
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
,
*
current6_
)
)
;
}
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
...
...
@@ -3894,7 +3890,7 @@ class CartesianProductGenerator6
const
typename
ParamGenerator
<
T6
>::
iterator
begin6_
;
const
typename
ParamGenerator
<
T6
>::
iterator
end6_
;
typename
ParamGenerator
<
T6
>::
iterator
current6_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator6::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -4001,7 +3997,7 @@ class CartesianProductGenerator7
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
}
virtual
const
ParamType
*
Current
()
const
{
return
&
current_value_
;
}
virtual
const
ParamType
*
Current
()
const
{
return
current_value_
.
get
()
;
}
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
...
...
@@ -4053,8 +4049,8 @@ class CartesianProductGenerator7
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
);
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
)
)
;
}
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
...
...
@@ -4096,7 +4092,7 @@ class CartesianProductGenerator7
const
typename
ParamGenerator
<
T7
>::
iterator
begin7_
;
const
typename
ParamGenerator
<
T7
>::
iterator
end7_
;
typename
ParamGenerator
<
T7
>::
iterator
current7_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator7::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -4214,7 +4210,7 @@ class CartesianProductGenerator8
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
}
virtual
const
ParamType
*
Current
()
const
{
return
&
current_value_
;
}
virtual
const
ParamType
*
Current
()
const
{
return
current_value_
.
get
()
;
}
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
...
...
@@ -4270,8 +4266,8 @@ class CartesianProductGenerator8
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
,
*
current8_
);
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
,
*
current8_
)
)
;
}
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
...
...
@@ -4317,7 +4313,7 @@ class CartesianProductGenerator8
const
typename
ParamGenerator
<
T8
>::
iterator
begin8_
;
const
typename
ParamGenerator
<
T8
>::
iterator
end8_
;
typename
ParamGenerator
<
T8
>::
iterator
current8_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator8::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -4443,7 +4439,7 @@ class CartesianProductGenerator9
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
}
virtual
const
ParamType
*
Current
()
const
{
return
&
current_value_
;
}
virtual
const
ParamType
*
Current
()
const
{
return
current_value_
.
get
()
;
}
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
...
...
@@ -4503,9 +4499,9 @@ class CartesianProductGenerator9
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
,
*
current8_
,
*
current9_
);
*
current9_
)
)
;
}
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
...
...
@@ -4555,7 +4551,7 @@ class CartesianProductGenerator9
const
typename
ParamGenerator
<
T9
>::
iterator
begin9_
;
const
typename
ParamGenerator
<
T9
>::
iterator
end9_
;
typename
ParamGenerator
<
T9
>::
iterator
current9_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator9::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -4690,7 +4686,7 @@ class CartesianProductGenerator10
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
}
virtual
const
ParamType
*
Current
()
const
{
return
&
current_value_
;
}
virtual
const
ParamType
*
Current
()
const
{
return
current_value_
.
get
()
;
}
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
...
...
@@ -4754,9 +4750,9 @@ class CartesianProductGenerator10
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
,
*
current8_
,
*
current9_
,
*
current10_
);
*
current9_
,
*
current10_
)
)
;
}
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
...
...
@@ -4810,7 +4806,7 @@ class CartesianProductGenerator10
const
typename
ParamGenerator
<
T10
>::
iterator
begin10_
;
const
typename
ParamGenerator
<
T10
>::
iterator
end10_
;
typename
ParamGenerator
<
T10
>::
iterator
current10_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator10::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -5141,6 +5137,4 @@ CartesianProductHolder10(const Generator1& g1, const Generator2& g2,
}
// namespace internal
}
// namespace testing
#endif // GTEST_HAS_PARAM_TEST
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
googletest/include/gtest/internal/gtest-param-util-generated.h.pump
View file @
21e51855
...
...
@@ -29,8 +29,7 @@ $var maxtuple = 10 $$ Maximum number of Combine arguments we want to support.
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Author: vladl@google.com (Vlad Losev)
// Type and function utilities for implementing parameterized tests.
// This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
...
...
@@ -42,17 +41,14 @@ $var maxtuple = 10 $$ Maximum number of Combine arguments we want to support.
// by the maximum arity of the implementation of tuple which is
// currently set at $maxtuple.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
// scripts/fuse_gtest.py depends on gtest's own header being #included
// *unconditionally*. Therefore these #includes cannot be moved
// inside #if GTEST_HAS_PARAM_TEST.
#include "gtest/internal/gtest-param-util.h"
#include "gtest/internal/gtest-port.h"
#if GTEST_HAS_PARAM_TEST
namespace
testing
{
// Forward declarations of ValuesIn(), which is implemented in
...
...
@@ -165,7 +161,7 @@ $for k [[
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
}
virtual
const
ParamType
*
Current
()
const
{
return
&
current_value_
;
}
virtual
const
ParamType
*
Current
()
const
{
return
current_value_
.
get
()
;
}
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
...
...
@@ -197,7 +193,7 @@ $for k [[
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
current_value_
=
ParamType
(
$
for
j
,
[[
*
current
$
(
j
)
_
]]);
current_value_
.
reset
(
new
ParamType
(
$
for
j
,
[[
*
current
$
(
j
)
_
]])
)
;
}
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
...
...
@@ -222,7 +218,7 @@ $for j [[
typename
ParamGenerator
<
T
$
j
>::
iterator
current
$
(
j
)
_
;
]]
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator$i::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -281,6 +277,4 @@ $for j [[
}
// namespace internal
}
// namespace testing
#endif // GTEST_HAS_PARAM_TEST
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
Prev
1
2
3
4
5
6
7
8
9
10
…
12
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment