commit
718fd88d8f
|
@ -47,10 +47,9 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "gtest/gtest.h"
|
||||||
#include "gmock/internal/gmock-internal-utils.h"
|
#include "gmock/internal/gmock-internal-utils.h"
|
||||||
#include "gmock/internal/gmock-port.h"
|
#include "gmock/internal/gmock-port.h"
|
||||||
#include "gtest/gtest.h"
|
|
||||||
|
|
||||||
#if GTEST_HAS_STD_INITIALIZER_LIST_
|
#if GTEST_HAS_STD_INITIALIZER_LIST_
|
||||||
# include <initializer_list> // NOLINT -- must be after gtest.h
|
# include <initializer_list> // NOLINT -- must be after gtest.h
|
||||||
|
|
|
@ -53,6 +53,22 @@ MATCHER(IsEmpty, negation ? "isn't empty" : "is empty") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Define a matcher that matches a value that evaluates in boolean
|
||||||
|
// context to true. Useful for types that define "explicit operator
|
||||||
|
// bool" operators and so can't be compared for equality with true
|
||||||
|
// and false.
|
||||||
|
MATCHER(IsTrue, negation ? "is false" : "is true") {
|
||||||
|
return static_cast<bool>(arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define a matcher that matches a value that evaluates in boolean
|
||||||
|
// context to false. Useful for types that define "explicit operator
|
||||||
|
// bool" operators and so can't be compared for equality with true
|
||||||
|
// and false.
|
||||||
|
MATCHER(IsFalse, negation ? "is true" : "is false") {
|
||||||
|
return !static_cast<bool>(arg);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace testing
|
} // namespace testing
|
||||||
|
|
||||||
#endif // GMOCK_GMOCK_MORE_MATCHERS_H_
|
#endif // GMOCK_GMOCK_MORE_MATCHERS_H_
|
||||||
|
|
|
@ -65,11 +65,6 @@
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#if GTEST_HAS_EXCEPTIONS
|
|
||||||
# include <stdexcept> // NOLINT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "gmock/gmock-actions.h"
|
#include "gmock/gmock-actions.h"
|
||||||
#include "gmock/gmock-cardinalities.h"
|
#include "gmock/gmock-cardinalities.h"
|
||||||
#include "gmock/gmock-matchers.h"
|
#include "gmock/gmock-matchers.h"
|
||||||
|
@ -77,6 +72,10 @@
|
||||||
#include "gmock/internal/gmock-port.h"
|
#include "gmock/internal/gmock-port.h"
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
#if GTEST_HAS_EXCEPTIONS
|
||||||
|
# include <stdexcept> // NOLINT
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace testing {
|
namespace testing {
|
||||||
|
|
||||||
// An abstract handle of an expectation.
|
// An abstract handle of an expectation.
|
||||||
|
|
|
@ -59,8 +59,8 @@
|
||||||
#include "gmock/gmock-cardinalities.h"
|
#include "gmock/gmock-cardinalities.h"
|
||||||
#include "gmock/gmock-generated-actions.h"
|
#include "gmock/gmock-generated-actions.h"
|
||||||
#include "gmock/gmock-generated-function-mockers.h"
|
#include "gmock/gmock-generated-function-mockers.h"
|
||||||
#include "gmock/gmock-generated-nice-strict.h"
|
|
||||||
#include "gmock/gmock-generated-matchers.h"
|
#include "gmock/gmock-generated-matchers.h"
|
||||||
|
#include "gmock/gmock-generated-nice-strict.h"
|
||||||
#include "gmock/gmock-matchers.h"
|
#include "gmock/gmock-matchers.h"
|
||||||
#include "gmock/gmock-more-actions.h"
|
#include "gmock/gmock-more-actions.h"
|
||||||
#include "gmock/gmock-more-matchers.h"
|
#include "gmock/gmock-more-matchers.h"
|
||||||
|
|
|
@ -90,42 +90,48 @@ struct MatcherTuple< ::testing::tuple<A1, A2, A3> > {
|
||||||
|
|
||||||
template <typename A1, typename A2, typename A3, typename A4>
|
template <typename A1, typename A2, typename A3, typename A4>
|
||||||
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4> > {
|
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4> > {
|
||||||
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>,
|
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4> >
|
||||||
Matcher<A4> > type;
|
type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename A1, typename A2, typename A3, typename A4, typename A5>
|
template <typename A1, typename A2, typename A3, typename A4, typename A5>
|
||||||
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4, A5> > {
|
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4, A5> > {
|
||||||
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
|
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
|
||||||
Matcher<A5> > type;
|
Matcher<A5> >
|
||||||
|
type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename A1, typename A2, typename A3, typename A4, typename A5,
|
template <typename A1, typename A2, typename A3, typename A4, typename A5,
|
||||||
typename A6>
|
typename A6>
|
||||||
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4, A5, A6> > {
|
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4, A5, A6> > {
|
||||||
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
|
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
|
||||||
Matcher<A5>, Matcher<A6> > type;
|
Matcher<A5>, Matcher<A6> >
|
||||||
|
type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename A1, typename A2, typename A3, typename A4, typename A5,
|
template <typename A1, typename A2, typename A3, typename A4, typename A5,
|
||||||
typename A6, typename A7>
|
typename A6, typename A7>
|
||||||
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4, A5, A6, A7> > {
|
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4, A5, A6, A7> > {
|
||||||
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
|
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
|
||||||
Matcher<A5>, Matcher<A6>, Matcher<A7> > type;
|
Matcher<A5>, Matcher<A6>, Matcher<A7> >
|
||||||
|
type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename A1, typename A2, typename A3, typename A4, typename A5,
|
template <typename A1, typename A2, typename A3, typename A4, typename A5,
|
||||||
typename A6, typename A7, typename A8>
|
typename A6, typename A7, typename A8>
|
||||||
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8> > {
|
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8> > {
|
||||||
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
|
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
|
||||||
Matcher<A5>, Matcher<A6>, Matcher<A7>, Matcher<A8> > type;
|
Matcher<A5>, Matcher<A6>, Matcher<A7>, Matcher<A8> >
|
||||||
|
type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename A1, typename A2, typename A3, typename A4, typename A5,
|
template <typename A1, typename A2, typename A3, typename A4, typename A5,
|
||||||
typename A6, typename A7, typename A8, typename A9>
|
typename A6, typename A7, typename A8, typename A9>
|
||||||
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9> > {
|
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9> > {
|
||||||
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
|
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
|
||||||
Matcher<A5>, Matcher<A6>, Matcher<A7>, Matcher<A8>, Matcher<A9> > type;
|
Matcher<A5>, Matcher<A6>, Matcher<A7>, Matcher<A8>,
|
||||||
|
Matcher<A9> >
|
||||||
|
type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename A1, typename A2, typename A3, typename A4, typename A5,
|
template <typename A1, typename A2, typename A3, typename A4, typename A5,
|
||||||
|
@ -133,8 +139,9 @@ template <typename A1, typename A2, typename A3, typename A4, typename A5,
|
||||||
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9,
|
struct MatcherTuple< ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9,
|
||||||
A10> > {
|
A10> > {
|
||||||
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
|
typedef ::testing::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
|
||||||
Matcher<A5>, Matcher<A6>, Matcher<A7>, Matcher<A8>, Matcher<A9>,
|
Matcher<A5>, Matcher<A6>, Matcher<A7>, Matcher<A8>,
|
||||||
Matcher<A10> > type;
|
Matcher<A9>, Matcher<A10> >
|
||||||
|
type;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Template struct Function<F>, where F must be a function type, contains
|
// Template struct Function<F>, where F must be a function type, contains
|
||||||
|
|
|
@ -41,7 +41,6 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ostream> // NOLINT
|
#include <ostream> // NOLINT
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "gmock/internal/gmock-generated-internal-utils.h"
|
#include "gmock/internal/gmock-generated-internal-utils.h"
|
||||||
#include "gmock/internal/gmock-port.h"
|
#include "gmock/internal/gmock-port.h"
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
|
@ -49,11 +48,15 @@
|
||||||
namespace testing {
|
namespace testing {
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
||||||
|
// Joins a vector of strings as if they are fields of a tuple; returns
|
||||||
|
// the joined string.
|
||||||
|
GTEST_API_ std::string JoinAsTuple(const Strings& fields);
|
||||||
|
|
||||||
// Converts an identifier name to a space-separated list of lower-case
|
// Converts an identifier name to a space-separated list of lower-case
|
||||||
// words. Each maximum substring of the form [A-Za-z][a-z]*|\d+ is
|
// words. Each maximum substring of the form [A-Za-z][a-z]*|\d+ is
|
||||||
// treated as one word. For example, both "FooBar123" and
|
// treated as one word. For example, both "FooBar123" and
|
||||||
// "foo_bar_123" are converted to "foo bar 123".
|
// "foo_bar_123" are converted to "foo bar 123".
|
||||||
GTEST_API_ string ConvertIdentifierNameToWords(const char* id_name);
|
GTEST_API_ std::string ConvertIdentifierNameToWords(const char* id_name);
|
||||||
|
|
||||||
// PointeeOf<Pointer>::type is the type of a value pointed to by a
|
// PointeeOf<Pointer>::type is the type of a value pointed to by a
|
||||||
// Pointer, which can be either a smart pointer or a raw pointer. The
|
// Pointer, which can be either a smart pointer or a raw pointer. The
|
||||||
|
@ -503,8 +506,38 @@ struct RemoveConstFromKey<std::pair<const K, V> > {
|
||||||
template <bool kValue>
|
template <bool kValue>
|
||||||
struct BooleanConstant {};
|
struct BooleanConstant {};
|
||||||
|
|
||||||
|
// Emit an assertion failure due to incorrect DoDefault() usage. Out-of-lined to
|
||||||
|
// reduce code size.
|
||||||
|
void IllegalDoDefault(const char* file, int line);
|
||||||
|
|
||||||
|
#if GTEST_LANG_CXX11
|
||||||
|
// Helper types for Apply() below.
|
||||||
|
template <size_t... Is> struct int_pack { typedef int_pack type; };
|
||||||
|
|
||||||
|
template <class Pack, size_t I> struct append;
|
||||||
|
template <size_t... Is, size_t I>
|
||||||
|
struct append<int_pack<Is...>, I> : int_pack<Is..., I> {};
|
||||||
|
|
||||||
|
template <size_t C>
|
||||||
|
struct make_int_pack : append<typename make_int_pack<C - 1>::type, C - 1> {};
|
||||||
|
template <> struct make_int_pack<0> : int_pack<> {};
|
||||||
|
|
||||||
|
template <typename F, typename Tuple, size_t... Idx>
|
||||||
|
auto ApplyImpl(F&& f, Tuple&& args, int_pack<Idx...>) -> decltype(
|
||||||
|
std::forward<F>(f)(std::get<Idx>(std::forward<Tuple>(args))...)) {
|
||||||
|
return std::forward<F>(f)(std::get<Idx>(std::forward<Tuple>(args))...);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply the function to a tuple of arguments.
|
||||||
|
template <typename F, typename Tuple>
|
||||||
|
auto Apply(F&& f, Tuple&& args)
|
||||||
|
-> decltype(ApplyImpl(std::forward<F>(f), std::forward<Tuple>(args),
|
||||||
|
make_int_pack<std::tuple_size<Tuple>::value>())) {
|
||||||
|
return ApplyImpl(std::forward<F>(f), std::forward<Tuple>(args),
|
||||||
|
make_int_pack<std::tuple_size<Tuple>::value>());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
} // namespace testing
|
} // namespace testing
|
||||||
|
|
||||||
#endif // GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_INTERNAL_UTILS_H_
|
#endif // GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_INTERNAL_UTILS_H_
|
||||||
|
|
||||||
|
|
|
@ -50,15 +50,11 @@
|
||||||
// portability utilities to Google Test's gtest-port.h instead of
|
// portability utilities to Google Test's gtest-port.h instead of
|
||||||
// here, as Google Mock depends on Google Test. Only add a utility
|
// here, as Google Mock depends on Google Test. Only add a utility
|
||||||
// here if it's truly specific to Google Mock.
|
// here if it's truly specific to Google Mock.
|
||||||
|
|
||||||
#include "gtest/internal/gtest-linked_ptr.h"
|
#include "gtest/internal/gtest-linked_ptr.h"
|
||||||
#include "gtest/internal/gtest-port.h"
|
#include "gtest/internal/gtest-port.h"
|
||||||
#include "gmock/internal/custom/gmock-port.h"
|
#include "gmock/internal/custom/gmock-port.h"
|
||||||
|
|
||||||
// To avoid conditional compilation everywhere, we make it
|
|
||||||
// gmock-port.h's responsibility to #include the header implementing
|
|
||||||
// tr1/tuple. gmock-port.h does this via gtest-port.h, which is
|
|
||||||
// guaranteed to pull in the tuple header.
|
|
||||||
|
|
||||||
// For MS Visual C++, check the compiler version. At least VS 2003 is
|
// For MS Visual C++, check the compiler version. At least VS 2003 is
|
||||||
// required to compile Google Mock.
|
// required to compile Google Mock.
|
||||||
#if defined(_MSC_VER) && _MSC_VER < 1310
|
#if defined(_MSC_VER) && _MSC_VER < 1310
|
||||||
|
|
|
@ -33,12 +33,13 @@
|
||||||
// threads concurrently.
|
// threads concurrently.
|
||||||
|
|
||||||
#include "gmock/gmock.h"
|
#include "gmock/gmock.h"
|
||||||
|
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
namespace testing {
|
namespace testing {
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
// From <gtest/internal/gtest-port.h>.
|
// From "gtest/internal/gtest-port.h".
|
||||||
using ::testing::internal::ThreadWithParam;
|
using ::testing::internal::ThreadWithParam;
|
||||||
|
|
||||||
// The maximum number of test threads (not including helper threads)
|
// The maximum number of test threads (not including helper threads)
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
|
#include "gtest/internal/custom/gtest.h"
|
||||||
|
|
||||||
#if !defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)
|
#if !defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)
|
||||||
|
|
||||||
|
@ -51,9 +52,9 @@ void TestInitGoogleMock(const Char* (&argv)[M], const Char* (&new_argv)[N],
|
||||||
const ::std::string& expected_gmock_verbose) {
|
const ::std::string& expected_gmock_verbose) {
|
||||||
const ::std::string old_verbose = GMOCK_FLAG(verbose);
|
const ::std::string old_verbose = GMOCK_FLAG(verbose);
|
||||||
|
|
||||||
int argc = M;
|
int argc = M - 1;
|
||||||
InitGoogleMock(&argc, const_cast<Char**>(argv));
|
InitGoogleMock(&argc, const_cast<Char**>(argv));
|
||||||
ASSERT_EQ(N, argc) << "The new argv has wrong number of elements.";
|
ASSERT_EQ(N - 1, argc) << "The new argv has wrong number of elements.";
|
||||||
|
|
||||||
for (int i = 0; i < N; i++) {
|
for (int i = 0; i < N; i++) {
|
||||||
EXPECT_STREQ(new_argv[i], argv[i]);
|
EXPECT_STREQ(new_argv[i], argv[i]);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user