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 @@
...
@@ -26,10 +26,9 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//
// Author: wan@google.com (Zhanyong Wan)
// The Google C++ Testing and Mocking Framework (Google Test)
//
// The Google C++ Testing Framework (Google Test)
//
//
// This header file defines the Message class.
// This header file defines the Message class.
//
//
...
@@ -43,6 +42,8 @@
...
@@ -43,6 +42,8 @@
// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user
// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user
// program!
// program!
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
...
@@ -196,7 +197,6 @@ class GTEST_API_ Message {
...
@@ -196,7 +197,6 @@ class GTEST_API_ Message {
std
::
string
GetString
()
const
;
std
::
string
GetString
()
const
;
private:
private:
#if GTEST_OS_SYMBIAN
#if GTEST_OS_SYMBIAN
// These are needed as the Nokia Symbian Compiler cannot decide between
// These are needed as the Nokia Symbian Compiler cannot decide between
// const T& and const T* in a function template. The Nokia compiler _can_
// 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 @@
...
@@ -31,13 +31,13 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 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
// 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!
// 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_
#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
...
@@ -79,7 +79,7 @@ TEST_P(FooTest, HasBlahBlah) {
...
@@ -79,7 +79,7 @@ TEST_P(FooTest, HasBlahBlah) {
// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test
// 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
// case with any set of parameters you want. Google Test defines a number
// of functions for generating test parameters. They return what we call
// 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:
// are all in the testing namespace:
//
//
//
//
...
@@ -185,15 +185,10 @@ TEST_P(DerivedTest, DoesBlah) {
...
@@ -185,15 +185,10 @@ TEST_P(DerivedTest, DoesBlah) {
# include <utility>
# include <utility>
#endif
#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-internal.h"
#include "gtest/internal/gtest-param-util.h"
#include "gtest/internal/gtest-param-util.h"
#include "gtest/internal/gtest-param-util-generated.h"
#include "gtest/internal/gtest-param-util-generated.h"
#if GTEST_HAS_PARAM_TEST
namespace
testing
{
namespace
testing
{
// Functions producing parameter generators.
// Functions producing parameter generators.
...
@@ -273,7 +268,7 @@ internal::ParamGenerator<T> Range(T start, T end) {
...
@@ -273,7 +268,7 @@ internal::ParamGenerator<T> Range(T start, T end) {
// each with C-string values of "foo", "bar", and "baz":
// each with C-string values of "foo", "bar", and "baz":
//
//
// const char* strings[] = {"foo", "bar", "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
// This instantiates tests from test case StlStringTest
// each with STL strings with values "a" and "b":
// each with STL strings with values "a" and "b":
...
@@ -1375,8 +1370,6 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
...
@@ -1375,8 +1370,6 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
}
}
# endif // GTEST_HAS_COMBINE
# endif // GTEST_HAS_COMBINE
# define TEST_P(test_case_name, test_name) \
# define TEST_P(test_case_name, test_name) \
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
: public test_case_name { \
: public test_case_name { \
...
@@ -1390,8 +1383,8 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
...
@@ -1390,8 +1383,8 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
#test_case_name, \
#test_case_name, \
::testing::internal::CodeLocation(\
::testing::internal::CodeLocation(\
__FILE__, __LINE__))->AddTestPattern(\
__FILE__, __LINE__))->AddTestPattern(\
#
test_case_name, \
GTEST_STRINGIFY_(
test_case_name
)
, \
#
test_name, \
GTEST_STRINGIFY_(
test_name
)
, \
new ::testing::internal::TestMetaFactory< \
new ::testing::internal::TestMetaFactory< \
GTEST_TEST_CLASS_NAME_(\
GTEST_TEST_CLASS_NAME_(\
test_case_name, test_name)>()); \
test_case_name, test_name)>()); \
...
@@ -1412,33 +1405,33 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
...
@@ -1412,33 +1405,33 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
// type testing::TestParamInfo<class ParamType>, and return std::string.
// type testing::TestParamInfo<class ParamType>, and return std::string.
//
//
// testing::PrintToStringParamName is a builtin test suffix generator that
// testing::PrintToStringParamName is a builtin test suffix generator that
// returns the value of testing::PrintToString(GetParam()). It does not work
// returns the value of testing::PrintToString(GetParam()).
// for std::string or C strings.
//
//
// Note: test names must be non-empty, unique, and may only contain ASCII
// Note: test names must be non-empty, unique, and may only contain ASCII
// alphanumeric characters or underscore.
// 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, ...) \
::testing::internal::ParamGenerator<test_case_name::ParamType> \
#define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator, ...) \
gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \
static ::testing::internal::ParamGenerator<test_case_name::ParamType> \
::std::string gtest_##prefix##test_case_name##_EvalGenerateName_( \
gtest_##prefix##test_case_name##_EvalGenerator_() { \
const ::testing::TestParamInfo<test_case_name::ParamType>& info) { \
return generator; \
return ::testing::internal::GetParamNameGen<test_case_name::ParamType> \
} \
(__VA_ARGS__)(info); \
static ::std::string gtest_##prefix##test_case_name##_EvalGenerateName_( \
} \
const ::testing::TestParamInfo<test_case_name::ParamType>& info) { \
int gtest_##prefix##test_case_name##_dummy_ GTEST_ATTRIBUTE_UNUSED_ = \
return ::testing::internal::GetParamNameGen<test_case_name::ParamType>( \
::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
__VA_ARGS__)(info); \
GetTestCasePatternHolder<test_case_name>(\
} \
#test_case_name, \
static int gtest_##prefix##test_case_name##_dummy_ GTEST_ATTRIBUTE_UNUSED_ = \
::testing::internal::CodeLocation(\
::testing::UnitTest::GetInstance() \
__FILE__, __LINE__))->AddTestCaseInstantiation(\
->parameterized_test_registry() \
#prefix, \
.GetTestCasePatternHolder<test_case_name>( \
>est_##prefix##test_case_name##_EvalGenerator_, \
#test_case_name, \
>est_##prefix##test_case_name##_EvalGenerateName_, \
::testing::internal::CodeLocation(__FILE__, __LINE__)) \
__FILE__, __LINE__)
->AddTestCaseInstantiation( \
#prefix, >est_##prefix##test_case_name##_EvalGenerator_, \
>est_##prefix##test_case_name##_EvalGenerateName_, __FILE__, \
__LINE__)
}
// namespace testing
}
// namespace testing
#endif // GTEST_HAS_PARAM_TEST
#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
#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.
...
@@ -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
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 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
// 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!
// 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_
#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
...
@@ -78,7 +77,7 @@ TEST_P(FooTest, HasBlahBlah) {
...
@@ -78,7 +77,7 @@ TEST_P(FooTest, HasBlahBlah) {
// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test
// 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
// case with any set of parameters you want. Google Test defines a number
// of functions for generating test parameters. They return what we call
// 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:
// are all in the testing namespace:
//
//
//
//
...
@@ -184,15 +183,10 @@ TEST_P(DerivedTest, DoesBlah) {
...
@@ -184,15 +183,10 @@ TEST_P(DerivedTest, DoesBlah) {
# include <utility>
# include <utility>
#endif
#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-internal.h"
#include "gtest/internal/gtest-param-util.h"
#include "gtest/internal/gtest-param-util.h"
#include "gtest/internal/gtest-param-util-generated.h"
#include "gtest/internal/gtest-param-util-generated.h"
#if GTEST_HAS_PARAM_TEST
namespace
testing
{
namespace
testing
{
// Functions producing parameter generators.
// Functions producing parameter generators.
...
@@ -272,7 +266,7 @@ internal::ParamGenerator<T> Range(T start, T end) {
...
@@ -272,7 +266,7 @@ internal::ParamGenerator<T> Range(T start, T end) {
// each with C-string values of "foo", "bar", and "baz":
// each with C-string values of "foo", "bar", and "baz":
//
//
// const char* strings[] = {"foo", "bar", "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
// This instantiates tests from test case StlStringTest
// each with STL strings with values "a" and "b":
// each with STL strings with values "a" and "b":
...
@@ -441,8 +435,6 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
...
@@ -441,8 +435,6 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
]]
]]
# endif // GTEST_HAS_COMBINE
# endif // GTEST_HAS_COMBINE
# define TEST_P(test_case_name, test_name) \
# define TEST_P(test_case_name, test_name) \
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
: public test_case_name { \
: public test_case_name { \
...
@@ -456,8 +448,8 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
...
@@ -456,8 +448,8 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
#test_case_name, \
#test_case_name, \
::testing::internal::CodeLocation(\
::testing::internal::CodeLocation(\
__FILE__, __LINE__))->AddTestPattern(\
__FILE__, __LINE__))->AddTestPattern(\
#
test_case_name, \
GTEST_STRINGIFY_(
test_case_name
)
, \
#
test_name, \
GTEST_STRINGIFY_(
test_name
)
, \
new ::testing::internal::TestMetaFactory< \
new ::testing::internal::TestMetaFactory< \
GTEST_TEST_CLASS_NAME_(\
GTEST_TEST_CLASS_NAME_(\
test_case_name, test_name)>()); \
test_case_name, test_name)>()); \
...
@@ -485,14 +477,14 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
...
@@ -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.
// to std::string and C strings, it won't work for these types.
# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator, ...) \
# 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; } \
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) { \
const ::testing::TestParamInfo<test_case_name::ParamType>& info) { \
return ::testing::internal::GetParamNameGen<test_case_name::ParamType> \
return ::testing::internal::GetParamNameGen<test_case_name::ParamType> \
(__VA_ARGS__)(info); \
(__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(). \
::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
GetTestCasePatternHolder<test_case_name>(\
GetTestCasePatternHolder<test_case_name>(\
#test_case_name, \
#test_case_name, \
...
@@ -505,6 +497,4 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
...
@@ -505,6 +497,4 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
}
// namespace testing
}
// namespace testing
#endif // GTEST_HAS_PARAM_TEST
#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
googletest/include/gtest/gtest-printers.h
View file @
21e51855
...
@@ -26,10 +26,9 @@
...
@@ -26,10 +26,9 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 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
// This file implements a universal value printer that can print a
// value of any type T:
// value of any type T:
...
@@ -46,6 +45,10 @@
...
@@ -46,6 +45,10 @@
// 2. operator<<(ostream&, const T&) defined in either foo or the
// 2. operator<<(ostream&, const T&) defined in either foo or the
// global namespace.
// 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
// 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
// the value if it is a protocol buffer, or print the raw bytes in the
// value otherwise.
// value otherwise.
...
@@ -92,6 +95,8 @@
...
@@ -92,6 +95,8 @@
// being defined as many user-defined container types don't have
// being defined as many user-defined container types don't have
// value_type.
// value_type.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
#ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
#define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
#define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
...
@@ -107,6 +112,12 @@
...
@@ -107,6 +112,12 @@
# include <tuple>
# include <tuple>
#endif
#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
{
namespace
testing
{
// Definitions in the 'internal' and 'internal2' name spaces are
// Definitions in the 'internal' and 'internal2' name spaces are
...
@@ -125,7 +136,11 @@ enum TypeKind {
...
@@ -125,7 +136,11 @@ enum TypeKind {
kProtobuf
,
// a protobuf type
kProtobuf
,
// a protobuf type
kConvertibleToInteger
,
// a type implicitly convertible to BiggestInt
kConvertibleToInteger
,
// a type implicitly convertible to BiggestInt
// (e.g. a named or unnamed enum type)
// (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
// TypeWithoutFormatter<T, kTypeKind>::PrintValue(value, os) is called
...
@@ -138,7 +153,7 @@ class TypeWithoutFormatter {
...
@@ -138,7 +153,7 @@ class TypeWithoutFormatter {
// This default version is called when kTypeKind is kOtherType.
// This default version is called when kTypeKind is kOtherType.
static
void
PrintValue
(
const
T
&
value
,
::
std
::
ostream
*
os
)
{
static
void
PrintValue
(
const
T
&
value
,
::
std
::
ostream
*
os
)
{
PrintBytesInObjectTo
(
static_cast
<
const
unsigned
char
*>
(
PrintBytesInObjectTo
(
static_cast
<
const
unsigned
char
*>
(
reinterpret_cast
<
const
void
*>
(
&
value
)),
reinterpret_cast
<
const
void
*>
(
&
value
)),
sizeof
(
value
),
os
);
sizeof
(
value
),
os
);
}
}
};
};
...
@@ -176,6 +191,19 @@ class TypeWithoutFormatter<T, kConvertibleToInteger> {
...
@@ -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
// 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
// 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
// of a type implicitly convertible to BiggestInt, it's printed as an
...
@@ -203,10 +231,19 @@ class TypeWithoutFormatter<T, kConvertibleToInteger> {
...
@@ -203,10 +231,19 @@ class TypeWithoutFormatter<T, kConvertibleToInteger> {
template
<
typename
Char
,
typename
CharTraits
,
typename
T
>
template
<
typename
Char
,
typename
CharTraits
,
typename
T
>
::
std
::
basic_ostream
<
Char
,
CharTraits
>&
operator
<<
(
::
std
::
basic_ostream
<
Char
,
CharTraits
>&
operator
<<
(
::
std
::
basic_ostream
<
Char
,
CharTraits
>&
os
,
const
T
&
x
)
{
::
std
::
basic_ostream
<
Char
,
CharTraits
>&
os
,
const
T
&
x
)
{
TypeWithoutFormatter
<
T
,
TypeWithoutFormatter
<
T
,
(
internal
::
IsAProtocolMessage
<
T
>::
value
(
internal
::
IsAProtocolMessage
<
T
>::
value
?
kProtobuf
:
?
kProtobuf
internal
::
ImplicitlyConvertible
<
const
T
&
,
internal
::
BiggestInt
>::
value
?
:
internal
::
ImplicitlyConvertible
<
kConvertibleToInteger
:
kOtherType
)
>::
PrintValue
(
x
,
&
os
);
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
;
return
os
;
}
}
...
@@ -428,12 +465,8 @@ void DefaultPrintTo(WrapPrinterType<kPrintFunctionPointer> /* dummy */,
...
@@ -428,12 +465,8 @@ void DefaultPrintTo(WrapPrinterType<kPrintFunctionPointer> /* dummy */,
}
else
{
}
else
{
// T is a function type, so '*os << p' doesn't do what we want
// 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
// (it just prints p as bool). We want to print p as a const
// void*. However, we cannot cast it to const void* directly,
// void*.
// even using reinterpret_cast, as earlier versions of gcc
*
os
<<
reinterpret_cast
<
const
void
*>
(
p
);
// (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
));
}
}
}
}
...
@@ -461,17 +494,15 @@ void PrintTo(const T& value, ::std::ostream* os) {
...
@@ -461,17 +494,15 @@ void PrintTo(const T& value, ::std::ostream* os) {
// DefaultPrintTo() is overloaded. The type of its first argument
// DefaultPrintTo() is overloaded. The type of its first argument
// determines which version will be picked.
// determines which version will be picked.
//
//
// Note that we check for
recursive and other
container types here, prior
// Note that we check for container types here, prior
to we check
//
to we check
for protocol message types in our operator<<. The rationale is:
// for protocol message types in our operator<<. The rationale is:
//
//
// For protocol messages, we want to give people a chance to
// For protocol messages, we want to give people a chance to
// override Google Mock's format by defining a PrintTo() or
// override Google Mock's format by defining a PrintTo() or
// operator<<. For STL containers, other formats can be
// operator<<. For STL containers, other formats can be
// incompatible with Google Mock's format for the container
// incompatible with Google Mock's format for the container
// elements; therefore we check for container types here to ensure
// elements; therefore we check for container types here to ensure
// that our format is used. To prevent an infinite runtime recursion
// that our format is used.
// during the output of recursive container types, we check first for
// those.
//
//
// Note that MSVC and clang-cl do allow an implicit conversion from
// 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.
// 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) {
...
@@ -480,17 +511,19 @@ void PrintTo(const T& value, ::std::ostream* os) {
// function pointers so that the `*os << p` in the object pointer overload
// function pointers so that the `*os << p` in the object pointer overload
// doesn't cause that warning either.
// doesn't cause that warning either.
DefaultPrintTo
(
DefaultPrintTo
(
WrapPrinterType
<
WrapPrinterType
<
(
sizeof
(
IsContainerTest
<
T
>
(
0
))
==
sizeof
(
IsContainer
))
&&
!
IsRecursiveContainer
<
T
>::
value
(
sizeof
(
IsContainerTest
<
T
>
(
0
))
==
sizeof
(
IsContainer
))
&&
?
kPrintContainer
:
!
is_pointer
<
T
>::
value
!
IsRecursiveContainer
<
T
>::
value
?
kPrintOther
?
kPrintContainer
:
!
is_pointer
<
T
>::
value
?
kPrintOther
#if GTEST_LANG_CXX11
#if GTEST_LANG_CXX11
:
std
::
is_function
<
typename
std
::
remove_pointer
<
T
>::
type
>::
value
:
std
::
is_function
<
typename
std
::
remove_pointer
<
T
>::
type
>::
value
#else
#else
:
!
internal
::
ImplicitlyConvertible
<
T
,
const
void
*>::
value
:
!
internal
::
ImplicitlyConvertible
<
T
,
const
void
*>::
value
#endif
#endif
?
kPrintFunctionPointer
?
kPrintFunctionPointer
:
kPrintPointer
>
(),
:
kPrintPointer
>
(),
value
,
os
);
value
,
os
);
}
}
...
@@ -598,6 +631,17 @@ inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) {
...
@@ -598,6 +631,17 @@ inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) {
}
}
#endif // GTEST_HAS_STD_WSTRING
#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_
#if GTEST_HAS_TR1_TUPLE || GTEST_HAS_STD_TUPLE_
// Helper function for printing a tuple. T must be instantiated with
// Helper function for printing a tuple. T must be instantiated with
// a tuple type.
// a tuple type.
...
@@ -727,6 +771,48 @@ class UniversalPrinter {
...
@@ -727,6 +771,48 @@ class UniversalPrinter {
GTEST_DISABLE_MSC_WARNINGS_POP_
()
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'
// UniversalPrintArray(begin, len, os) prints an array of 'len'
// elements, starting at address 'begin'.
// elements, starting at address 'begin'.
template
<
typename
T
>
template
<
typename
T
>
...
@@ -740,7 +826,7 @@ void UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) {
...
@@ -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
// If the array has more than kThreshold elements, we'll have to
// omit some details by printing only the first and the last
// omit some details by printing only the first and the last
// kChunkSize elements.
// 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
)
{
if
(
len
<=
kThreshold
)
{
PrintRawArrayTo
(
begin
,
len
,
os
);
PrintRawArrayTo
(
begin
,
len
,
os
);
}
else
{
}
else
{
...
@@ -873,7 +959,7 @@ void UniversalPrint(const T& value, ::std::ostream* os) {
...
@@ -873,7 +959,7 @@ void UniversalPrint(const T& value, ::std::ostream* os) {
UniversalPrinter
<
T1
>::
Print
(
value
,
os
);
UniversalPrinter
<
T1
>::
Print
(
value
,
os
);
}
}
typedef
::
std
::
vector
<
string
>
Strings
;
typedef
::
std
::
vector
<
::
std
::
string
>
Strings
;
// TuplePolicy<TupleT> must provide:
// TuplePolicy<TupleT> must provide:
// - tuple_size
// - tuple_size
...
@@ -993,6 +1079,16 @@ Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) {
...
@@ -993,6 +1079,16 @@ Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) {
}
// namespace internal
}
// 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
>
template
<
typename
T
>
::
std
::
string
PrintToString
(
const
T
&
value
)
{
::
std
::
string
PrintToString
(
const
T
&
value
)
{
::
std
::
stringstream
ss
;
::
std
::
stringstream
ss
;
...
...
googletest/include/gtest/gtest-spi.h
View file @
21e51855
...
@@ -26,12 +26,13 @@
...
@@ -26,12 +26,13 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 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
// Utilities for testing Google Test itself and code that uses Google Test
// (e.g. frameworks built on top of Google Test).
// (e.g. frameworks built on top of Google Test).
// GOOGLETEST_CM0004 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_
#ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_
#define 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 @@
...
@@ -27,8 +27,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 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_
#ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
#define 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 @@
...
@@ -26,8 +26,9 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 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_
#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
#define 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);
...
@@ -243,7 +244,7 @@ INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes);
} \
} \
static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) \
static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) \
GTEST_ATTRIBUTE_UNUSED_ = \
GTEST_ATTRIBUTE_UNUSED_ = \
GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\
GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(
\
__FILE__, __LINE__, #__VA_ARGS__)
__FILE__, __LINE__, #__VA_ARGS__)
// The 'Types' template argument below must have spaces around it
// The 'Types' template argument below must have spaces around it
...
...
googletest/include/gtest/gtest.h
View file @
21e51855
...
@@ -26,10 +26,9 @@
...
@@ -26,10 +26,9 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//
// Author: wan@google.com (Zhanyong Wan)
// The Google C++ Testing and Mocking Framework (Google Test)
//
// The Google C++ Testing Framework (Google Test)
//
//
// This header file defines the public API for Google Test. It should be
// This header file defines the public API for Google Test. It should be
// included by any test program that uses Google Test.
// included by any test program that uses Google Test.
...
@@ -48,6 +47,8 @@
...
@@ -48,6 +47,8 @@
// registration from Barthelemy Dagenais' (barthelemy@prologique.com)
// registration from Barthelemy Dagenais' (barthelemy@prologique.com)
// easyUnit framework.
// easyUnit framework.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_H_
#ifndef GTEST_INCLUDE_GTEST_GTEST_H_
#define GTEST_INCLUDE_GTEST_GTEST_H_
#define GTEST_INCLUDE_GTEST_GTEST_H_
...
@@ -82,6 +83,15 @@
...
@@ -82,6 +83,15 @@
namespace
testing
{
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.
// Declares the flags.
// This flag temporary enables the disabled tests.
// This flag temporary enables the disabled tests.
...
@@ -115,6 +125,9 @@ GTEST_DECLARE_string_(output);
...
@@ -115,6 +125,9 @@ GTEST_DECLARE_string_(output);
// test.
// test.
GTEST_DECLARE_bool_
(
print_time
);
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.
// This flag specifies the random number seed.
GTEST_DECLARE_int32_
(
random_seed
);
GTEST_DECLARE_int32_
(
random_seed
);
...
@@ -135,7 +148,7 @@ GTEST_DECLARE_int32_(stack_trace_depth);
...
@@ -135,7 +148,7 @@ GTEST_DECLARE_int32_(stack_trace_depth);
// When this flag is specified, a failed assertion will throw an
// When this flag is specified, a failed assertion will throw an
// exception if exceptions are enabled, or exit the program with a
// 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
);
GTEST_DECLARE_bool_
(
throw_on_failure
);
// When this flag is set with a "host:port" string, on supported
// When this flag is set with a "host:port" string, on supported
...
@@ -160,6 +173,7 @@ class TestEventListenersAccessor;
...
@@ -160,6 +173,7 @@ class TestEventListenersAccessor;
class
TestEventRepeater
;
class
TestEventRepeater
;
class
UnitTestRecordPropertyTestHelper
;
class
UnitTestRecordPropertyTestHelper
;
class
WindowsDeathTest
;
class
WindowsDeathTest
;
class
FuchsiaDeathTest
;
class
UnitTestImpl
*
GetUnitTestImpl
();
class
UnitTestImpl
*
GetUnitTestImpl
();
void
ReportFailureInUnknownLocation
(
TestPartResult
::
Type
result_type
,
void
ReportFailureInUnknownLocation
(
TestPartResult
::
Type
result_type
,
const
std
::
string
&
message
);
const
std
::
string
&
message
);
...
@@ -259,7 +273,9 @@ class GTEST_API_ AssertionResult {
...
@@ -259,7 +273,9 @@ class GTEST_API_ AssertionResult {
// Used in EXPECT_TRUE/FALSE(assertion_result).
// Used in EXPECT_TRUE/FALSE(assertion_result).
AssertionResult
(
const
AssertionResult
&
other
);
AssertionResult
(
const
AssertionResult
&
other
);
#if defined(_MSC_VER) && _MSC_VER < 1910
GTEST_DISABLE_MSC_WARNINGS_PUSH_
(
4800
/* forcing value to bool */
)
GTEST_DISABLE_MSC_WARNINGS_PUSH_
(
4800
/* forcing value to bool */
)
#endif
// Used in the EXPECT_TRUE/FALSE(bool_expression).
// Used in the EXPECT_TRUE/FALSE(bool_expression).
//
//
...
@@ -276,7 +292,9 @@ class GTEST_API_ AssertionResult {
...
@@ -276,7 +292,9 @@ class GTEST_API_ AssertionResult {
/*enabler*/
=
NULL
)
/*enabler*/
=
NULL
)
:
success_
(
success
)
{}
:
success_
(
success
)
{}
#if defined(_MSC_VER) && _MSC_VER < 1910
GTEST_DISABLE_MSC_WARNINGS_POP_
()
GTEST_DISABLE_MSC_WARNINGS_POP_
()
#endif
// Assignment operator.
// Assignment operator.
AssertionResult
&
operator
=
(
AssertionResult
other
)
{
AssertionResult
&
operator
=
(
AssertionResult
other
)
{
...
@@ -297,7 +315,7 @@ class GTEST_API_ AssertionResult {
...
@@ -297,7 +315,7 @@ class GTEST_API_ AssertionResult {
const
char
*
message
()
const
{
const
char
*
message
()
const
{
return
message_
.
get
()
!=
NULL
?
message_
->
c_str
()
:
""
;
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.
// Deprecated; please use message() instead.
const
char
*
failure_message
()
const
{
return
message
();
}
const
char
*
failure_message
()
const
{
return
message
();
}
...
@@ -345,6 +363,15 @@ GTEST_API_ AssertionResult AssertionFailure();
...
@@ -345,6 +363,15 @@ GTEST_API_ AssertionResult AssertionFailure();
// Deprecated; use AssertionFailure() << msg.
// Deprecated; use AssertionFailure() << msg.
GTEST_API_
AssertionResult
AssertionFailure
(
const
Message
&
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.
// The abstract class that all tests inherit from.
//
//
// In Google Test, a unit test program contains one or many TestCases, and
// In Google Test, a unit test program contains one or many TestCases, and
...
@@ -355,7 +382,7 @@ GTEST_API_ AssertionResult AssertionFailure(const Message& msg);
...
@@ -355,7 +382,7 @@ GTEST_API_ AssertionResult AssertionFailure(const Message& msg);
// this for you.
// this for you.
//
//
// The only time you derive from Test is when defining a test fixture
// 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 {
// class FooTest : public testing::Test {
// protected:
// protected:
...
@@ -550,9 +577,8 @@ class GTEST_API_ TestResult {
...
@@ -550,9 +577,8 @@ class GTEST_API_ TestResult {
// Returns the elapsed time, in milliseconds.
// Returns the elapsed time, in milliseconds.
TimeInMillis
elapsed_time
()
const
{
return
elapsed_time_
;
}
TimeInMillis
elapsed_time
()
const
{
return
elapsed_time_
;
}
// Returns the i-th test part result among all the results. i can range
// Returns the i-th test part result among all the results. i can range from 0
// from 0 to test_property_count() - 1. If i is not in that range, aborts
// to total_part_count() - 1. If i is not in that range, aborts the program.
// the program.
const
TestPartResult
&
GetTestPartResult
(
int
i
)
const
;
const
TestPartResult
&
GetTestPartResult
(
int
i
)
const
;
// Returns the i-th test property. i can range from 0 to
// Returns the i-th test property. i can range from 0 to
...
@@ -569,6 +595,7 @@ class GTEST_API_ TestResult {
...
@@ -569,6 +595,7 @@ class GTEST_API_ TestResult {
friend
class
internal
::
TestResultAccessor
;
friend
class
internal
::
TestResultAccessor
;
friend
class
internal
::
UnitTestImpl
;
friend
class
internal
::
UnitTestImpl
;
friend
class
internal
::
WindowsDeathTest
;
friend
class
internal
::
WindowsDeathTest
;
friend
class
internal
::
FuchsiaDeathTest
;
// Gets the vector of TestPartResults.
// Gets the vector of TestPartResults.
const
std
::
vector
<
TestPartResult
>&
test_part_results
()
const
{
const
std
::
vector
<
TestPartResult
>&
test_part_results
()
const
{
...
@@ -594,7 +621,7 @@ class GTEST_API_ TestResult {
...
@@ -594,7 +621,7 @@ class GTEST_API_ TestResult {
// Adds a failure if the key is a reserved attribute of Google Test
// Adds a failure if the key is a reserved attribute of Google Test
// testcase tags. Returns true if the property is valid.
// 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
,
static
bool
ValidateTestProperty
(
const
std
::
string
&
xml_element
,
const
TestProperty
&
test_property
);
const
TestProperty
&
test_property
);
...
@@ -675,6 +702,9 @@ class GTEST_API_ TestInfo {
...
@@ -675,6 +702,9 @@ class GTEST_API_ TestInfo {
// Returns the line where this test is defined.
// Returns the line where this test is defined.
int
line
()
const
{
return
location_
.
line
;
}
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
// 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
// disabled (or it is disabled but the also_run_disabled_tests flag has
// been specified) and its full name matches the user-specified filter.
// been specified) and its full name matches the user-specified filter.
...
@@ -695,10 +725,9 @@ class GTEST_API_ TestInfo {
...
@@ -695,10 +725,9 @@ class GTEST_API_ TestInfo {
// Returns true iff this test will appear in the XML report.
// Returns true iff this test will appear in the XML report.
bool
is_reportable
()
const
{
bool
is_reportable
()
const
{
// For now, the XML report includes all tests matching the filter.
// The XML report includes tests matching the filter, excluding those
// In the future, we may trim tests that are excluded because of
// run in other shards.
// sharding.
return
matches_filter_
&&
!
is_in_another_shard_
;
return
matches_filter_
;
}
}
// Returns the result of the test.
// Returns the result of the test.
...
@@ -762,6 +791,7 @@ class GTEST_API_ TestInfo {
...
@@ -762,6 +791,7 @@ class GTEST_API_ TestInfo {
bool
is_disabled_
;
// True iff this test is disabled
bool
is_disabled_
;
// True iff this test is disabled
bool
matches_filter_
;
// True if this test matches the
bool
matches_filter_
;
// True if this test matches the
// user-specified filter.
// user-specified filter.
bool
is_in_another_shard_
;
// Will be run in another shard.
internal
::
TestFactoryBase
*
const
factory_
;
// The factory that creates
internal
::
TestFactoryBase
*
const
factory_
;
// The factory that creates
// the test object
// the test object
...
@@ -986,6 +1016,18 @@ class Environment {
...
@@ -986,6 +1016,18 @@ class Environment {
virtual
Setup_should_be_spelled_SetUp
*
Setup
()
{
return
NULL
;
}
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 interface for tracing execution of tests. The methods are organized in
// the order the corresponding events are fired.
// the order the corresponding events are fired.
class
TestEventListener
{
class
TestEventListener
{
...
@@ -1014,6 +1056,8 @@ class TestEventListener {
...
@@ -1014,6 +1056,8 @@ class TestEventListener {
virtual
void
OnTestStart
(
const
TestInfo
&
test_info
)
=
0
;
virtual
void
OnTestStart
(
const
TestInfo
&
test_info
)
=
0
;
// Fired after a failed assertion or a SUCCEED() invocation.
// 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
;
virtual
void
OnTestPartResult
(
const
TestPartResult
&
test_part_result
)
=
0
;
// Fired after the test ends.
// Fired after the test ends.
...
@@ -1180,14 +1224,12 @@ class GTEST_API_ UnitTest {
...
@@ -1180,14 +1224,12 @@ class GTEST_API_ UnitTest {
// Returns the random seed used at the start of the current test run.
// Returns the random seed used at the start of the current test run.
int
random_seed
()
const
;
int
random_seed
()
const
;
#if GTEST_HAS_PARAM_TEST
// Returns the ParameterizedTestCaseRegistry object used to keep track of
// Returns the ParameterizedTestCaseRegistry object used to keep track of
// value-parameterized tests and instantiate and register them.
// value-parameterized tests and instantiate and register them.
//
//
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
internal
::
ParameterizedTestCaseRegistry
&
parameterized_test_registry
()
internal
::
ParameterizedTestCaseRegistry
&
parameterized_test_registry
()
GTEST_LOCK_EXCLUDED_
(
mutex_
);
GTEST_LOCK_EXCLUDED_
(
mutex_
);
#endif // GTEST_HAS_PARAM_TEST
// Gets the number of successful test cases.
// Gets the number of successful test cases.
int
successful_test_case_count
()
const
;
int
successful_test_case_count
()
const
;
...
@@ -1289,9 +1331,9 @@ class GTEST_API_ UnitTest {
...
@@ -1289,9 +1331,9 @@ class GTEST_API_ UnitTest {
// These classes and functions are friends as they need to access private
// These classes and functions are friends as they need to access private
// members of UnitTest.
// members of UnitTest.
friend
class
ScopedTrace
;
friend
class
Test
;
friend
class
Test
;
friend
class
internal
::
AssertHelper
;
friend
class
internal
::
AssertHelper
;
friend
class
internal
::
ScopedTrace
;
friend
class
internal
::
StreamingListenerTest
;
friend
class
internal
::
StreamingListenerTest
;
friend
class
internal
::
UnitTestRecordPropertyTestHelper
;
friend
class
internal
::
UnitTestRecordPropertyTestHelper
;
friend
Environment
*
AddGlobalTestEnvironment
(
Environment
*
env
);
friend
Environment
*
AddGlobalTestEnvironment
(
Environment
*
env
);
...
@@ -1388,11 +1430,9 @@ AssertionResult CmpHelperEQ(const char* lhs_expression,
...
@@ -1388,11 +1430,9 @@ AssertionResult CmpHelperEQ(const char* lhs_expression,
const
char
*
rhs_expression
,
const
char
*
rhs_expression
,
const
T1
&
lhs
,
const
T1
&
lhs
,
const
T2
&
rhs
)
{
const
T2
&
rhs
)
{
GTEST_DISABLE_MSC_WARNINGS_PUSH_
(
4389
/* signed/unsigned mismatch */
)
if
(
lhs
==
rhs
)
{
if
(
lhs
==
rhs
)
{
return
AssertionSuccess
();
return
AssertionSuccess
();
}
}
GTEST_DISABLE_MSC_WARNINGS_POP_
()
return
CmpHelperEQFailure
(
lhs_expression
,
rhs_expression
,
lhs
,
rhs
);
return
CmpHelperEQFailure
(
lhs_expression
,
rhs_expression
,
lhs
,
rhs
);
}
}
...
@@ -1706,7 +1746,6 @@ class GTEST_API_ AssertHelper {
...
@@ -1706,7 +1746,6 @@ class GTEST_API_ AssertHelper {
}
// namespace internal
}
// namespace internal
#if GTEST_HAS_PARAM_TEST
// The pure interface class that all value-parameterized tests inherit from.
// The pure interface class that all value-parameterized tests inherit from.
// A value-parameterized class must inherit from both ::testing::Test and
// A value-parameterized class must inherit from both ::testing::Test and
// ::testing::WithParamInterface. In most cases that just means inheriting
// ::testing::WithParamInterface. In most cases that just means inheriting
...
@@ -1783,8 +1822,6 @@ template <typename T>
...
@@ -1783,8 +1822,6 @@ template <typename T>
class
TestWithParam
:
public
Test
,
public
WithParamInterface
<
T
>
{
class
TestWithParam
:
public
Test
,
public
WithParamInterface
<
T
>
{
};
};
#endif // GTEST_HAS_PARAM_TEST
// Macros for indicating success/failure in test code.
// Macros for indicating success/failure in test code.
// ADD_FAILURE unconditionally adds a failure to the current test.
// ADD_FAILURE unconditionally adds a failure to the current test.
...
@@ -1857,22 +1894,18 @@ class TestWithParam : public Test, public WithParamInterface<T> {
...
@@ -1857,22 +1894,18 @@ class TestWithParam : public Test, public WithParamInterface<T> {
// AssertionResult. For more information on how to use AssertionResult with
// AssertionResult. For more information on how to use AssertionResult with
// these macros see comments on that class.
// these macros see comments on that class.
#define EXPECT_TRUE(condition) \
#define EXPECT_TRUE(condition) \
GTEST_TEST_BOOLEAN_(
(
condition
)
, #condition, false, true, \
GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \
GTEST_NONFATAL_FAILURE_)
GTEST_NONFATAL_FAILURE_)
#define EXPECT_FALSE(condition) \
#define EXPECT_FALSE(condition) \
GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
GTEST_NONFATAL_FAILURE_)
GTEST_NONFATAL_FAILURE_)
#define ASSERT_TRUE(condition) \
#define ASSERT_TRUE(condition) \
GTEST_TEST_BOOLEAN_(
(
condition
)
, #condition, false, true, \
GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \
GTEST_FATAL_FAILURE_)
GTEST_FATAL_FAILURE_)
#define ASSERT_FALSE(condition) \
#define ASSERT_FALSE(condition) \
GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
GTEST_FATAL_FAILURE_)
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.
// Macros for testing equalities and inequalities.
//
//
// * {ASSERT|EXPECT}_EQ(v1, v2): Tests that v1 == v2
// * {ASSERT|EXPECT}_EQ(v1, v2): Tests that v1 == v2
...
@@ -1914,8 +1947,8 @@ class TestWithParam : public Test, public WithParamInterface<T> {
...
@@ -1914,8 +1947,8 @@ class TestWithParam : public Test, public WithParamInterface<T> {
//
//
// Examples:
// Examples:
//
//
// EXPECT_NE(
5,
Foo());
// EXPECT_NE(Foo()
, 5
);
// EXPECT_EQ(
NULL,
a_pointer);
// EXPECT_EQ(a_pointer
, NULL
);
// ASSERT_LT(i, array_size);
// ASSERT_LT(i, array_size);
// ASSERT_GT(records.size(), 0) << "There is no record left.";
// ASSERT_GT(records.size(), 0) << "There is no record left.";
...
@@ -2101,6 +2134,57 @@ GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2,
...
@@ -2101,6 +2134,57 @@ GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2,
#define EXPECT_NO_FATAL_FAILURE(statement) \
#define EXPECT_NO_FATAL_FAILURE(statement) \
GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_)
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
// Causes a trace (including the source file path, the current line
// number, and the given message) to be included in every test failure
// number, and the given message) to be included in every test failure
// message generated by code in the current scope. The effect is
// 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,
...
@@ -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
// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s
// to appear in the same block - as long as they are on different
// to appear in the same block - as long as they are on different
// lines.
// 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) \
#define SCOPED_TRACE(message) \
::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\
::testing::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\
__FILE__, __LINE__, ::testing::Message() << (message))
__FILE__, __LINE__, (message))
// Compile-time assertion for type equality.
// Compile-time assertion for type equality.
// StaticAssertTypeEq<type1, type2>() compiles iff type1 and type2 are
// StaticAssertTypeEq<type1, type2>() compiles iff type1 and type2 are
...
@@ -2209,8 +2298,8 @@ bool StaticAssertTypeEq() {
...
@@ -2209,8 +2298,8 @@ bool StaticAssertTypeEq() {
// }
// }
//
//
// TEST_F(FooTest, ReturnsElementCountCorrectly) {
// TEST_F(FooTest, ReturnsElementCountCorrectly) {
// EXPECT_EQ(
0,
a_.size());
// EXPECT_EQ(a_.size()
, 0
);
// EXPECT_EQ(
1,
b_.size());
// EXPECT_EQ(b_.size()
, 1
);
// }
// }
#define TEST_F(test_fixture, test_name)\
#define TEST_F(test_fixture, test_name)\
...
@@ -2221,6 +2310,10 @@ bool StaticAssertTypeEq() {
...
@@ -2221,6 +2310,10 @@ bool StaticAssertTypeEq() {
// Tries to determine an appropriate directory for the platform.
// Tries to determine an appropriate directory for the platform.
GTEST_API_
std
::
string
TempDir
();
GTEST_API_
std
::
string
TempDir
();
#ifdef _MSC_VER
# pragma warning(pop)
#endif
}
// namespace testing
}
// namespace testing
// Use this function in main() to run all tests. It returns 0 if all
// 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 @@
...
@@ -27,18 +27,19 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 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!
// 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND!
//
//
// Implements a family of generic predicate assertion macros.
// Implements a family of generic predicate assertion macros.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
#define 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.
#include "gtest/gtest.h"
#ifndef GTEST_INCLUDE_GTEST_GTEST_H_
# error Do not include gtest_pred_impl.h directly. Include gtest.h instead.
namespace
testing
{
#endif // GTEST_INCLUDE_GTEST_GTEST_H_
// This header implements a family of generic predicate assertion
// This header implements a family of generic predicate assertion
// macros:
// macros:
...
@@ -66,8 +67,6 @@
...
@@ -66,8 +67,6 @@
// We also define the EXPECT_* variations.
// We also define the EXPECT_* variations.
//
//
// For now we only support predicates whose arity is at most 5.
// 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
// GTEST_ASSERT_ is the basic statement to which all of the assertions
// in this file reduce. Don't use this in your code.
// in this file reduce. Don't use this in your code.
...
@@ -355,4 +354,6 @@ AssertionResult AssertPred5Helper(const char* pred_text,
...
@@ -355,4 +354,6 @@ AssertionResult AssertPred5Helper(const char* pred_text,
}
// namespace testing
#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
googletest/include/gtest/gtest_prod.h
View file @
21e51855
...
@@ -26,10 +26,10 @@
...
@@ -26,10 +26,10 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//
// Author: wan@google.com (Zhanyong Wan)
// Google C++ Testing and Mocking Framework definitions useful in production code.
//
// GOOGLETEST_CM0003 DO NOT DELETE
// Google C++ Testing Framework definitions useful in production code.
#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_
#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_
#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_
#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_
...
@@ -40,17 +40,20 @@
...
@@ -40,17 +40,20 @@
//
//
// class MyClass {
// class MyClass {
// private:
// private:
// void
My
Method();
// void
Private
Method();
// FRIEND_TEST(MyClassTest,
My
Method);
// FRIEND_TEST(MyClassTest,
Private
Method
Works
);
// };
// };
//
//
// class MyClassTest : public testing::Test {
// class MyClassTest : public testing::Test {
// // ...
// // ...
// };
// };
//
//
// TEST_F(MyClassTest,
My
Method) {
// TEST_F(MyClassTest,
Private
Method
Works
) {
// // Can call MyClass::
My
Method() here.
// // 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)\
#define FRIEND_TEST(test_case_name, test_name)\
friend class test_case_name##_##test_name##_Test
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 @@
...
@@ -27,42 +27,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//
// Injection point for custom user configurations.
// Injection point for custom user configurations. See README for details
// 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.
//
//
// ** Custom implementation starts here **
// ** Custom implementation starts here **
...
...
googletest/include/gtest/internal/custom/gtest-printers.h
View file @
21e51855
...
@@ -31,8 +31,8 @@
...
@@ -31,8 +31,8 @@
// installation of gTest.
// installation of gTest.
// It will be included from gtest-printers.h and the overrides in this file
// It will be included from gtest-printers.h and the overrides in this file
// will be visible to everyone.
// 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 **
// ** Custom implementation starts here **
...
...
googletest/include/gtest/internal/custom/gtest.h
View file @
21e51855
...
@@ -27,16 +27,8 @@
...
@@ -27,16 +27,8 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//
// Injection point for custom user configurations.
// Injection point for custom user configurations. See README for details
// 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.
//
// ** Custom implementation starts here **
// ** Custom implementation starts here **
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_H_
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_H_
...
...
googletest/include/gtest/internal/gtest-death-test-internal.h
View file @
21e51855
...
@@ -27,12 +27,11 @@
...
@@ -27,12 +27,11 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 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 and Mocking Framework (Google Test)
//
// The Google C++ Testing Framework (Google Test)
//
//
// This header file defines internal utilities needed for implementing
// This header file defines internal utilities needed for implementing
// death tests. They are subject to change without notice.
// death tests. They are subject to change without notice.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
#define 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);
...
@@ -218,14 +217,18 @@ GTEST_API_ bool ExitedUnsuccessfully(int exit_status);
// can be streamed.
// can be streamed.
// This macro is for implementing ASSERT/EXPECT_DEBUG_DEATH when compiled in
// 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
// NDEBUG mode. In this case we need the statements to be executed and the macro
// ignored, and the macro must accept a streamed message even though the message
// must accept a streamed message even though the message is never printed.
// is never printed.
// The regex object is not evaluated, but it is used to prevent "unused"
# define GTEST_EXECUTE_STATEMENT_(statement, regex) \
// warnings and to avoid an expression that doesn't compile in debug mode.
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
#define GTEST_EXECUTE_STATEMENT_(statement, regex) \
if (::testing::internal::AlwaysTrue()) { \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
if (::testing::internal::AlwaysTrue()) { \
} else \
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()
::testing::Message()
// A class representing the parsed contents of the
// A class representing the parsed contents of the
...
@@ -264,53 +267,6 @@ class InternalRunDeathTestFlag {
...
@@ -264,53 +267,6 @@ class InternalRunDeathTestFlag {
// the flag is specified; otherwise returns NULL.
// the flag is specified; otherwise returns NULL.
InternalRunDeathTestFlag
*
ParseInternalRunDeathTestFlag
();
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
#endif // GTEST_HAS_DEATH_TEST
}
// namespace internal
}
// namespace internal
...
...
googletest/include/gtest/internal/gtest-filepath.h
View file @
21e51855
...
@@ -27,16 +27,16 @@
...
@@ -27,16 +27,16 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//
// Author: keith.ray@gmail.com (Keith Ray)
//
// Google Test filepath utilities
// Google Test filepath utilities
//
//
// This header file declares classes and functions used internally by
// This header file declares classes and functions used internally by
// Google Test. They are subject to change without notice.
// 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!
// Do not include this header file separately!
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
#define 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 @@
...
@@ -27,13 +27,13 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 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 and Mocking Framework (Google Test)
//
// The Google C++ Testing Framework (Google Test)
//
//
// This header file declares functions and macros used internally by
// This header file declares functions and macros used internally by
// Google Test. They are subject to change without notice.
// Google Test. They are subject to change without notice.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
...
@@ -61,8 +61,8 @@
...
@@ -61,8 +61,8 @@
#include <vector>
#include <vector>
#include "gtest/gtest-message.h"
#include "gtest/gtest-message.h"
#include "gtest/internal/gtest-string.h"
#include "gtest/internal/gtest-filepath.h"
#include "gtest/internal/gtest-filepath.h"
#include "gtest/internal/gtest-string.h"
#include "gtest/internal/gtest-type-util.h"
#include "gtest/internal/gtest-type-util.h"
// Due to C++ preprocessor weirdness, we need double indirection to
// Due to C++ preprocessor weirdness, we need double indirection to
...
@@ -76,6 +76,9 @@
...
@@ -76,6 +76,9 @@
#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)
#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)
#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar
#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar
// Stringifies its argument.
#define GTEST_STRINGIFY_(name) #name
class
ProtocolMessage
;
class
ProtocolMessage
;
namespace
proto2
{
class
Message
;
}
namespace
proto2
{
class
Message
;
}
...
@@ -96,7 +99,6 @@ template <typename T>
...
@@ -96,7 +99,6 @@ template <typename T>
namespace
internal
{
namespace
internal
{
struct
TraceInfo
;
// Information about a trace point.
struct
TraceInfo
;
// Information about a trace point.
class
ScopedTrace
;
// Implements scoped trace.
class
TestInfoImpl
;
// Opaque implementation of TestInfo
class
TestInfoImpl
;
// Opaque implementation of TestInfo
class
UnitTestImpl
;
// Opaque implementation of UnitTest
class
UnitTestImpl
;
// Opaque implementation of UnitTest
...
@@ -152,25 +154,6 @@ class GTEST_API_ GoogleTestFailureException : public ::std::runtime_error {
...
@@ -152,25 +154,6 @@ class GTEST_API_ GoogleTestFailureException : public ::std::runtime_error {
#endif // GTEST_HAS_EXCEPTIONS
#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
{
namespace
edit_distance
{
// Returns the optimal edits to go from 'left' to 'right'.
// Returns the optimal edits to go from 'left' to 'right'.
// All edits cost the same, with replace having lower priority than
// All edits cost the same, with replace having lower priority than
...
@@ -628,7 +611,7 @@ class TypeParameterizedTest {
...
@@ -628,7 +611,7 @@ class TypeParameterizedTest {
// Types). Valid values for 'index' are [0, N - 1] where N is the
// Types). Valid values for 'index' are [0, N - 1] where N is the
// length of Types.
// length of Types.
static
bool
Register
(
const
char
*
prefix
,
static
bool
Register
(
const
char
*
prefix
,
CodeLocation
code_location
,
const
CodeLocation
&
code_location
,
const
char
*
case_name
,
const
char
*
test_names
,
const
char
*
case_name
,
const
char
*
test_names
,
int
index
)
{
int
index
)
{
typedef
typename
Types
::
Head
Type
;
typedef
typename
Types
::
Head
Type
;
...
@@ -659,7 +642,7 @@ class TypeParameterizedTest {
...
@@ -659,7 +642,7 @@ class TypeParameterizedTest {
template
<
GTEST_TEMPLATE_
Fixture
,
class
TestSel
>
template
<
GTEST_TEMPLATE_
Fixture
,
class
TestSel
>
class
TypeParameterizedTest
<
Fixture
,
TestSel
,
Types0
>
{
class
TypeParameterizedTest
<
Fixture
,
TestSel
,
Types0
>
{
public:
public:
static
bool
Register
(
const
char
*
/*prefix*/
,
CodeLocation
,
static
bool
Register
(
const
char
*
/*prefix*/
,
const
CodeLocation
&
,
const
char
*
/*case_name*/
,
const
char
*
/*test_names*/
,
const
char
*
/*case_name*/
,
const
char
*
/*test_names*/
,
int
/*index*/
)
{
int
/*index*/
)
{
return
true
;
return
true
;
...
@@ -705,7 +688,7 @@ class TypeParameterizedTestCase {
...
@@ -705,7 +688,7 @@ class TypeParameterizedTestCase {
template
<
GTEST_TEMPLATE_
Fixture
,
typename
Types
>
template
<
GTEST_TEMPLATE_
Fixture
,
typename
Types
>
class
TypeParameterizedTestCase
<
Fixture
,
Templates0
,
Types
>
{
class
TypeParameterizedTestCase
<
Fixture
,
Templates0
,
Types
>
{
public:
public:
static
bool
Register
(
const
char
*
/*prefix*/
,
CodeLocation
,
static
bool
Register
(
const
char
*
/*prefix*/
,
const
CodeLocation
&
,
const
TypedTestCasePState
*
/*state*/
,
const
TypedTestCasePState
*
/*state*/
,
const
char
*
/*case_name*/
,
const
char
*
/*test_names*/
)
{
const
char
*
/*case_name*/
,
const
char
*
/*test_names*/
)
{
return
true
;
return
true
;
...
@@ -824,31 +807,6 @@ struct RemoveConst<T[N]> {
...
@@ -824,31 +807,6 @@ struct RemoveConst<T[N]> {
#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \
#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \
GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(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
// ImplicitlyConvertible<From, To>::value is a compile-time bool
// constant that's true iff type From can be implicitly converted to
// constant that's true iff type From can be implicitly converted to
// type To.
// type To.
...
@@ -918,8 +876,11 @@ struct IsAProtocolMessage
...
@@ -918,8 +876,11 @@ struct IsAProtocolMessage
// a container class by checking the type of IsContainerTest<C>(0).
// a container class by checking the type of IsContainerTest<C>(0).
// The value of the expression is insignificant.
// The value of the expression is insignificant.
//
//
// Note that we look for both C::iterator and C::const_iterator. The
// In C++11 mode we check the existence of a const_iterator and that an
// reason is that C++ injects the name of a class as a member of the
// 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
// class itself (e.g. you can refer to class iterator as either
// 'iterator' or 'iterator::iterator'). If we look for C::iterator
// 'iterator' or 'iterator::iterator'). If we look for C::iterator
// only, for example, we would mistakenly think that a class named
// only, for example, we would mistakenly think that a class named
...
@@ -929,40 +890,94 @@ struct IsAProtocolMessage
...
@@ -929,40 +890,94 @@ struct IsAProtocolMessage
// IsContainerTest(typename C::const_iterator*) and
// IsContainerTest(typename C::const_iterator*) and
// IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++.
// IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++.
typedef
int
IsContainer
;
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
>
template
<
class
C
>
IsContainer
IsContainerTest
(
int
/* dummy */
,
IsContainer
IsContainerTest
(
int
/* dummy */
,
typename
C
::
iterator
*
/* it */
=
NULL
,
typename
C
::
iterator
*
/* it */
=
NULL
,
typename
C
::
const_iterator
*
/* const_it */
=
NULL
)
{
typename
C
::
const_iterator
*
/* const_it */
=
NULL
)
{
return
0
;
return
0
;
}
}
#endif // GTEST_LANG_CXX11
typedef
char
IsNotContainer
;
typedef
char
IsNotContainer
;
template
<
class
C
>
template
<
class
C
>
IsNotContainer
IsContainerTest
(
long
/* dummy */
)
{
return
'\0'
;
}
IsNotContainer
IsContainerTest
(
long
/* dummy */
)
{
return
'\0'
;
}
template
<
typename
C
,
bool
=
// Trait to detect whether a type T is a hash table.
sizeof
(
IsContainerTest
<
C
>(
0
))
==
sizeof
(
IsContainer
)
// 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
;
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
>
template
<
typename
C
>
struct
IsRecursiveContainerImpl
<
C
,
false
>
:
public
false_type
{};
struct
IsRecursiveContainerImpl
<
C
,
true
,
false
>
:
public
false_type
{};
template
<
typename
C
>
template
<
typename
C
>
struct
IsRecursiveContainerImpl
<
C
,
true
>
{
struct
IsRecursiveContainerImpl
<
C
,
true
,
true
>
{
typedef
#if GTEST_LANG_CXX11
typename
IteratorTraits
<
typename
C
::
iterator
>::
value_type
typedef
typename
IteratorTraits
<
typename
C
::
const_iterator
>::
value_type
value_type
;
value_type
;
#else
typedef
typename
IteratorTraits
<
typename
C
::
iterator
>::
value_type
value_type
;
#endif
typedef
is_same
<
value_type
,
C
>
type
;
typedef
is_same
<
value_type
,
C
>
type
;
};
};
// IsRecursiveContainer<Type> is a unary compile-time predicate that
// 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
// type is a container type whose value_type is equal to the container type
// itself. An example for a recursive container type is
// 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, whose iterator has a value_type that is equal to
// boost::filesystem::path.
// boost::filesystem::path.
template
<
typename
C
>
template
<
typename
C
>
struct
IsRecursiveContainer
:
public
IsRecursiveContainerImpl
<
C
>::
type
{};
struct
IsRecursiveContainer
:
public
IsRecursiveContainerImpl
<
C
>::
type
{};
// EnableIf<condition>::type is void when 'Cond' is true, and
// EnableIf<condition>::type is void when 'Cond' is true, and
...
@@ -1096,7 +1111,7 @@ class NativeArray {
...
@@ -1096,7 +1111,7 @@ class NativeArray {
private:
private:
enum
{
enum
{
kCheckTypeIsNotConstOrAReference
=
StaticAssertTypeEqHelper
<
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.
// Initializes this object with a copy of the input.
...
@@ -1141,7 +1156,7 @@ class NativeArray {
...
@@ -1141,7 +1156,7 @@ class NativeArray {
#define GTEST_SUCCESS_(message) \
#define GTEST_SUCCESS_(message) \
GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess)
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
// statement if it returns or throws (or doesn't return or throw in some
// situations).
// situations).
#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \
#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 {\
...
@@ -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()
void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
googletest/include/gtest/internal/gtest-linked_ptr.h
View file @
21e51855
...
@@ -27,8 +27,6 @@
...
@@ -27,8 +27,6 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 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
// A "smart" pointer type with reference tracking. Every pointer to a
// particular object is kept on a circular linked list. When the last pointer
// particular object is kept on a circular linked list. When the last pointer
// to an object is destroyed or reassigned, the object is deleted.
// to an object is destroyed or reassigned, the object is deleted.
...
@@ -62,9 +60,11 @@
...
@@ -62,9 +60,11 @@
// raw pointer (e.g. via get()) concurrently, and
// raw pointer (e.g. via get()) concurrently, and
// - it's safe to write to two linked_ptrs that point to the same
// - it's safe to write to two linked_ptrs that point to the same
// shared object concurrently.
// 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.
// confusion with normal linked_ptr.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
#define 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 @@
...
@@ -30,8 +30,7 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 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.
// Type and function utilities for implementing parameterized tests.
// This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
// This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
...
@@ -43,17 +42,14 @@
...
@@ -43,17 +42,14 @@
// by the maximum arity of the implementation of tuple which is
// by the maximum arity of the implementation of tuple which is
// currently set at 10.
// currently set at 10.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
#define 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-param-util.h"
#include "gtest/internal/gtest-port.h"
#include "gtest/internal/gtest-port.h"
#if GTEST_HAS_PARAM_TEST
namespace
testing
{
namespace
testing
{
// Forward declarations of ValuesIn(), which is implemented in
// Forward declarations of ValuesIn(), which is implemented in
...
@@ -3208,7 +3204,7 @@ class CartesianProductGenerator2
...
@@ -3208,7 +3204,7 @@ class CartesianProductGenerator2
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
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
{
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
// iterator is of the same type and we can downcast.
...
@@ -3240,7 +3236,7 @@ class CartesianProductGenerator2
...
@@ -3240,7 +3236,7 @@ class CartesianProductGenerator2
void
ComputeCurrentValue
()
{
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
);
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
)
)
;
}
}
bool
AtEnd
()
const
{
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
// We must report iterator past the end of the range when either of the
...
@@ -3262,7 +3258,7 @@ class CartesianProductGenerator2
...
@@ -3262,7 +3258,7 @@ class CartesianProductGenerator2
const
typename
ParamGenerator
<
T2
>::
iterator
begin2_
;
const
typename
ParamGenerator
<
T2
>::
iterator
begin2_
;
const
typename
ParamGenerator
<
T2
>::
iterator
end2_
;
const
typename
ParamGenerator
<
T2
>::
iterator
end2_
;
typename
ParamGenerator
<
T2
>::
iterator
current2_
;
typename
ParamGenerator
<
T2
>::
iterator
current2_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator2::Iterator
};
// class CartesianProductGenerator2::Iterator
// No implementation - assignment is unsupported.
// No implementation - assignment is unsupported.
...
@@ -3331,7 +3327,7 @@ class CartesianProductGenerator3
...
@@ -3331,7 +3327,7 @@ class CartesianProductGenerator3
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
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
{
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
// iterator is of the same type and we can downcast.
...
@@ -3367,7 +3363,7 @@ class CartesianProductGenerator3
...
@@ -3367,7 +3363,7 @@ class CartesianProductGenerator3
void
ComputeCurrentValue
()
{
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
);
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
)
)
;
}
}
bool
AtEnd
()
const
{
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
// We must report iterator past the end of the range when either of the
...
@@ -3393,7 +3389,7 @@ class CartesianProductGenerator3
...
@@ -3393,7 +3389,7 @@ class CartesianProductGenerator3
const
typename
ParamGenerator
<
T3
>::
iterator
begin3_
;
const
typename
ParamGenerator
<
T3
>::
iterator
begin3_
;
const
typename
ParamGenerator
<
T3
>::
iterator
end3_
;
const
typename
ParamGenerator
<
T3
>::
iterator
end3_
;
typename
ParamGenerator
<
T3
>::
iterator
current3_
;
typename
ParamGenerator
<
T3
>::
iterator
current3_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator3::Iterator
};
// class CartesianProductGenerator3::Iterator
// No implementation - assignment is unsupported.
// No implementation - assignment is unsupported.
...
@@ -3472,7 +3468,7 @@ class CartesianProductGenerator4
...
@@ -3472,7 +3468,7 @@ class CartesianProductGenerator4
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
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
{
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
// iterator is of the same type and we can downcast.
...
@@ -3512,8 +3508,8 @@ class CartesianProductGenerator4
...
@@ -3512,8 +3508,8 @@ class CartesianProductGenerator4
void
ComputeCurrentValue
()
{
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
);
*
current4_
)
)
;
}
}
bool
AtEnd
()
const
{
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
// We must report iterator past the end of the range when either of the
...
@@ -3543,7 +3539,7 @@ class CartesianProductGenerator4
...
@@ -3543,7 +3539,7 @@ class CartesianProductGenerator4
const
typename
ParamGenerator
<
T4
>::
iterator
begin4_
;
const
typename
ParamGenerator
<
T4
>::
iterator
begin4_
;
const
typename
ParamGenerator
<
T4
>::
iterator
end4_
;
const
typename
ParamGenerator
<
T4
>::
iterator
end4_
;
typename
ParamGenerator
<
T4
>::
iterator
current4_
;
typename
ParamGenerator
<
T4
>::
iterator
current4_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator4::Iterator
};
// class CartesianProductGenerator4::Iterator
// No implementation - assignment is unsupported.
// No implementation - assignment is unsupported.
...
@@ -3630,7 +3626,7 @@ class CartesianProductGenerator5
...
@@ -3630,7 +3626,7 @@ class CartesianProductGenerator5
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
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
{
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
// iterator is of the same type and we can downcast.
...
@@ -3674,8 +3670,8 @@ class CartesianProductGenerator5
...
@@ -3674,8 +3670,8 @@ class CartesianProductGenerator5
void
ComputeCurrentValue
()
{
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
);
*
current4_
,
*
current5_
)
)
;
}
}
bool
AtEnd
()
const
{
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
// We must report iterator past the end of the range when either of the
...
@@ -3709,7 +3705,7 @@ class CartesianProductGenerator5
...
@@ -3709,7 +3705,7 @@ class CartesianProductGenerator5
const
typename
ParamGenerator
<
T5
>::
iterator
begin5_
;
const
typename
ParamGenerator
<
T5
>::
iterator
begin5_
;
const
typename
ParamGenerator
<
T5
>::
iterator
end5_
;
const
typename
ParamGenerator
<
T5
>::
iterator
end5_
;
typename
ParamGenerator
<
T5
>::
iterator
current5_
;
typename
ParamGenerator
<
T5
>::
iterator
current5_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator5::Iterator
};
// class CartesianProductGenerator5::Iterator
// No implementation - assignment is unsupported.
// No implementation - assignment is unsupported.
...
@@ -3807,7 +3803,7 @@ class CartesianProductGenerator6
...
@@ -3807,7 +3803,7 @@ class CartesianProductGenerator6
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
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
{
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
// iterator is of the same type and we can downcast.
...
@@ -3855,8 +3851,8 @@ class CartesianProductGenerator6
...
@@ -3855,8 +3851,8 @@ class CartesianProductGenerator6
void
ComputeCurrentValue
()
{
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
,
*
current6_
);
*
current4_
,
*
current5_
,
*
current6_
)
)
;
}
}
bool
AtEnd
()
const
{
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
// We must report iterator past the end of the range when either of the
...
@@ -3894,7 +3890,7 @@ class CartesianProductGenerator6
...
@@ -3894,7 +3890,7 @@ class CartesianProductGenerator6
const
typename
ParamGenerator
<
T6
>::
iterator
begin6_
;
const
typename
ParamGenerator
<
T6
>::
iterator
begin6_
;
const
typename
ParamGenerator
<
T6
>::
iterator
end6_
;
const
typename
ParamGenerator
<
T6
>::
iterator
end6_
;
typename
ParamGenerator
<
T6
>::
iterator
current6_
;
typename
ParamGenerator
<
T6
>::
iterator
current6_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator6::Iterator
};
// class CartesianProductGenerator6::Iterator
// No implementation - assignment is unsupported.
// No implementation - assignment is unsupported.
...
@@ -4001,7 +3997,7 @@ class CartesianProductGenerator7
...
@@ -4001,7 +3997,7 @@ class CartesianProductGenerator7
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
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
{
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
// iterator is of the same type and we can downcast.
...
@@ -4053,8 +4049,8 @@ class CartesianProductGenerator7
...
@@ -4053,8 +4049,8 @@ class CartesianProductGenerator7
void
ComputeCurrentValue
()
{
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
);
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
)
)
;
}
}
bool
AtEnd
()
const
{
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
// We must report iterator past the end of the range when either of the
...
@@ -4096,7 +4092,7 @@ class CartesianProductGenerator7
...
@@ -4096,7 +4092,7 @@ class CartesianProductGenerator7
const
typename
ParamGenerator
<
T7
>::
iterator
begin7_
;
const
typename
ParamGenerator
<
T7
>::
iterator
begin7_
;
const
typename
ParamGenerator
<
T7
>::
iterator
end7_
;
const
typename
ParamGenerator
<
T7
>::
iterator
end7_
;
typename
ParamGenerator
<
T7
>::
iterator
current7_
;
typename
ParamGenerator
<
T7
>::
iterator
current7_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator7::Iterator
};
// class CartesianProductGenerator7::Iterator
// No implementation - assignment is unsupported.
// No implementation - assignment is unsupported.
...
@@ -4214,7 +4210,7 @@ class CartesianProductGenerator8
...
@@ -4214,7 +4210,7 @@ class CartesianProductGenerator8
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
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
{
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
// iterator is of the same type and we can downcast.
...
@@ -4270,8 +4266,8 @@ class CartesianProductGenerator8
...
@@ -4270,8 +4266,8 @@ class CartesianProductGenerator8
void
ComputeCurrentValue
()
{
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
,
*
current8_
);
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
,
*
current8_
)
)
;
}
}
bool
AtEnd
()
const
{
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
// We must report iterator past the end of the range when either of the
...
@@ -4317,7 +4313,7 @@ class CartesianProductGenerator8
...
@@ -4317,7 +4313,7 @@ class CartesianProductGenerator8
const
typename
ParamGenerator
<
T8
>::
iterator
begin8_
;
const
typename
ParamGenerator
<
T8
>::
iterator
begin8_
;
const
typename
ParamGenerator
<
T8
>::
iterator
end8_
;
const
typename
ParamGenerator
<
T8
>::
iterator
end8_
;
typename
ParamGenerator
<
T8
>::
iterator
current8_
;
typename
ParamGenerator
<
T8
>::
iterator
current8_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator8::Iterator
};
// class CartesianProductGenerator8::Iterator
// No implementation - assignment is unsupported.
// No implementation - assignment is unsupported.
...
@@ -4443,7 +4439,7 @@ class CartesianProductGenerator9
...
@@ -4443,7 +4439,7 @@ class CartesianProductGenerator9
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
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
{
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
// iterator is of the same type and we can downcast.
...
@@ -4503,9 +4499,9 @@ class CartesianProductGenerator9
...
@@ -4503,9 +4499,9 @@ class CartesianProductGenerator9
void
ComputeCurrentValue
()
{
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
,
*
current8_
,
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
,
*
current8_
,
*
current9_
);
*
current9_
)
)
;
}
}
bool
AtEnd
()
const
{
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
// We must report iterator past the end of the range when either of the
...
@@ -4555,7 +4551,7 @@ class CartesianProductGenerator9
...
@@ -4555,7 +4551,7 @@ class CartesianProductGenerator9
const
typename
ParamGenerator
<
T9
>::
iterator
begin9_
;
const
typename
ParamGenerator
<
T9
>::
iterator
begin9_
;
const
typename
ParamGenerator
<
T9
>::
iterator
end9_
;
const
typename
ParamGenerator
<
T9
>::
iterator
end9_
;
typename
ParamGenerator
<
T9
>::
iterator
current9_
;
typename
ParamGenerator
<
T9
>::
iterator
current9_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator9::Iterator
};
// class CartesianProductGenerator9::Iterator
// No implementation - assignment is unsupported.
// No implementation - assignment is unsupported.
...
@@ -4690,7 +4686,7 @@ class CartesianProductGenerator10
...
@@ -4690,7 +4686,7 @@ class CartesianProductGenerator10
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
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
{
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
// iterator is of the same type and we can downcast.
...
@@ -4754,9 +4750,9 @@ class CartesianProductGenerator10
...
@@ -4754,9 +4750,9 @@ class CartesianProductGenerator10
void
ComputeCurrentValue
()
{
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
if
(
!
AtEnd
())
current_value_
=
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
current_value_
.
reset
(
new
ParamType
(
*
current1_
,
*
current2_
,
*
current3_
,
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
,
*
current8_
,
*
current4_
,
*
current5_
,
*
current6_
,
*
current7_
,
*
current8_
,
*
current9_
,
*
current10_
);
*
current9_
,
*
current10_
)
)
;
}
}
bool
AtEnd
()
const
{
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
// We must report iterator past the end of the range when either of the
...
@@ -4810,7 +4806,7 @@ class CartesianProductGenerator10
...
@@ -4810,7 +4806,7 @@ class CartesianProductGenerator10
const
typename
ParamGenerator
<
T10
>::
iterator
begin10_
;
const
typename
ParamGenerator
<
T10
>::
iterator
begin10_
;
const
typename
ParamGenerator
<
T10
>::
iterator
end10_
;
const
typename
ParamGenerator
<
T10
>::
iterator
end10_
;
typename
ParamGenerator
<
T10
>::
iterator
current10_
;
typename
ParamGenerator
<
T10
>::
iterator
current10_
;
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator10::Iterator
};
// class CartesianProductGenerator10::Iterator
// No implementation - assignment is unsupported.
// No implementation - assignment is unsupported.
...
@@ -5141,6 +5137,4 @@ CartesianProductHolder10(const Generator1& g1, const Generator2& g2,
...
@@ -5141,6 +5137,4 @@ CartesianProductHolder10(const Generator1& g1, const Generator2& g2,
}
// namespace internal
}
// namespace internal
}
// namespace testing
}
// namespace testing
#endif // GTEST_HAS_PARAM_TEST
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
#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.
...
@@ -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
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 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.
// Type and function utilities for implementing parameterized tests.
// This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
// 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.
...
@@ -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
// by the maximum arity of the implementation of tuple which is
// currently set at $maxtuple.
// currently set at $maxtuple.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
#define 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-param-util.h"
#include "gtest/internal/gtest-port.h"
#include "gtest/internal/gtest-port.h"
#if GTEST_HAS_PARAM_TEST
namespace
testing
{
namespace
testing
{
// Forward declarations of ValuesIn(), which is implemented in
// Forward declarations of ValuesIn(), which is implemented in
...
@@ -165,7 +161,7 @@ $for k [[
...
@@ -165,7 +161,7 @@ $for k [[
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
virtual
ParamIteratorInterface
<
ParamType
>*
Clone
()
const
{
return
new
Iterator
(
*
this
);
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
{
virtual
bool
Equals
(
const
ParamIteratorInterface
<
ParamType
>&
other
)
const
{
// Having the same base generator guarantees that the other
// Having the same base generator guarantees that the other
// iterator is of the same type and we can downcast.
// iterator is of the same type and we can downcast.
...
@@ -197,7 +193,7 @@ $for k [[
...
@@ -197,7 +193,7 @@ $for k [[
void
ComputeCurrentValue
()
{
void
ComputeCurrentValue
()
{
if
(
!
AtEnd
())
if
(
!
AtEnd
())
current_value_
=
ParamType
(
$
for
j
,
[[
*
current
$
(
j
)
_
]]);
current_value_
.
reset
(
new
ParamType
(
$
for
j
,
[[
*
current
$
(
j
)
_
]])
)
;
}
}
bool
AtEnd
()
const
{
bool
AtEnd
()
const
{
// We must report iterator past the end of the range when either of the
// We must report iterator past the end of the range when either of the
...
@@ -222,7 +218,7 @@ $for j [[
...
@@ -222,7 +218,7 @@ $for j [[
typename
ParamGenerator
<
T
$
j
>::
iterator
current
$
(
j
)
_
;
typename
ParamGenerator
<
T
$
j
>::
iterator
current
$
(
j
)
_
;
]]
]]
ParamType
current_value_
;
linked_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator$i::Iterator
};
// class CartesianProductGenerator$i::Iterator
// No implementation - assignment is unsupported.
// No implementation - assignment is unsupported.
...
@@ -281,6 +277,4 @@ $for j [[
...
@@ -281,6 +277,4 @@ $for j [[
}
// namespace internal
}
// namespace internal
}
// namespace testing
}
// namespace testing
#endif // GTEST_HAS_PARAM_TEST
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
#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