mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-08-05 17:38:35 +02:00
ThirdParty: Update included gtest
This commit is contained in:
+178
-48
@@ -32,11 +32,13 @@
|
||||
//
|
||||
// This file tests the built-in actions.
|
||||
|
||||
// Silence C4800 (C4800: 'int *const ': forcing value
|
||||
// to bool 'true' or 'false') for MSVC 15
|
||||
// Silence C4100 (unreferenced formal parameter) for MSVC
|
||||
#ifdef _MSC_VER
|
||||
#if _MSC_VER == 1900
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable:4100)
|
||||
#if _MSC_VER == 1900
|
||||
// and silence C4800 (C4800: 'int *const ': forcing value
|
||||
// to bool 'true' or 'false') for MSVC 15
|
||||
# pragma warning(disable:4800)
|
||||
#endif
|
||||
#endif
|
||||
@@ -46,6 +48,7 @@
|
||||
#include <iterator>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <type_traits>
|
||||
#include "gmock/gmock.h"
|
||||
#include "gmock/internal/gmock-port.h"
|
||||
#include "gtest/gtest.h"
|
||||
@@ -53,36 +56,34 @@
|
||||
|
||||
namespace {
|
||||
|
||||
// This list should be kept sorted.
|
||||
using testing::_;
|
||||
using testing::Action;
|
||||
using testing::ActionInterface;
|
||||
using testing::Assign;
|
||||
using testing::ByMove;
|
||||
using testing::ByRef;
|
||||
using testing::DefaultValue;
|
||||
using testing::DoAll;
|
||||
using testing::DoDefault;
|
||||
using testing::IgnoreResult;
|
||||
using testing::Invoke;
|
||||
using testing::InvokeWithoutArgs;
|
||||
using testing::MakePolymorphicAction;
|
||||
using testing::Ne;
|
||||
using testing::PolymorphicAction;
|
||||
using testing::Return;
|
||||
using testing::ReturnNull;
|
||||
using testing::ReturnRef;
|
||||
using testing::ReturnRefOfCopy;
|
||||
using testing::SetArgPointee;
|
||||
using testing::SetArgumentPointee;
|
||||
using testing::Unused;
|
||||
using testing::WithArgs;
|
||||
using testing::internal::BuiltInDefaultValue;
|
||||
using testing::internal::Int64;
|
||||
using testing::internal::UInt64;
|
||||
using ::testing::_;
|
||||
using ::testing::Action;
|
||||
using ::testing::ActionInterface;
|
||||
using ::testing::Assign;
|
||||
using ::testing::ByMove;
|
||||
using ::testing::ByRef;
|
||||
using ::testing::DefaultValue;
|
||||
using ::testing::DoAll;
|
||||
using ::testing::DoDefault;
|
||||
using ::testing::IgnoreResult;
|
||||
using ::testing::Invoke;
|
||||
using ::testing::InvokeWithoutArgs;
|
||||
using ::testing::MakePolymorphicAction;
|
||||
using ::testing::PolymorphicAction;
|
||||
using ::testing::Return;
|
||||
using ::testing::ReturnNew;
|
||||
using ::testing::ReturnNull;
|
||||
using ::testing::ReturnRef;
|
||||
using ::testing::ReturnRefOfCopy;
|
||||
using ::testing::ReturnRoundRobin;
|
||||
using ::testing::SetArgPointee;
|
||||
using ::testing::SetArgumentPointee;
|
||||
using ::testing::Unused;
|
||||
using ::testing::WithArgs;
|
||||
using ::testing::internal::BuiltInDefaultValue;
|
||||
|
||||
#if !GTEST_OS_WINDOWS_MOBILE
|
||||
using testing::SetErrnoAndReturn;
|
||||
using ::testing::SetErrnoAndReturn;
|
||||
#endif
|
||||
|
||||
// Tests that BuiltInDefaultValue<T*>::Get() returns NULL.
|
||||
@@ -105,10 +106,6 @@ TEST(BuiltInDefaultValueTest, IsZeroForNumericTypes) {
|
||||
EXPECT_EQ(0U, BuiltInDefaultValue<unsigned char>::Get());
|
||||
EXPECT_EQ(0, BuiltInDefaultValue<signed char>::Get());
|
||||
EXPECT_EQ(0, BuiltInDefaultValue<char>::Get());
|
||||
#if GMOCK_HAS_SIGNED_WCHAR_T_
|
||||
EXPECT_EQ(0U, BuiltInDefaultValue<unsigned wchar_t>::Get());
|
||||
EXPECT_EQ(0, BuiltInDefaultValue<signed wchar_t>::Get());
|
||||
#endif
|
||||
#if GMOCK_WCHAR_T_IS_NATIVE_
|
||||
#if !defined(__WCHAR_UNSIGNED__)
|
||||
EXPECT_EQ(0, BuiltInDefaultValue<wchar_t>::Get());
|
||||
@@ -125,8 +122,9 @@ TEST(BuiltInDefaultValueTest, IsZeroForNumericTypes) {
|
||||
EXPECT_EQ(0U, BuiltInDefaultValue<unsigned long>::Get()); // NOLINT
|
||||
EXPECT_EQ(0, BuiltInDefaultValue<signed long>::Get()); // NOLINT
|
||||
EXPECT_EQ(0, BuiltInDefaultValue<long>::Get()); // NOLINT
|
||||
EXPECT_EQ(0U, BuiltInDefaultValue<UInt64>::Get());
|
||||
EXPECT_EQ(0, BuiltInDefaultValue<Int64>::Get());
|
||||
EXPECT_EQ(0U, BuiltInDefaultValue<unsigned long long>::Get()); // NOLINT
|
||||
EXPECT_EQ(0, BuiltInDefaultValue<signed long long>::Get()); // NOLINT
|
||||
EXPECT_EQ(0, BuiltInDefaultValue<long long>::Get()); // NOLINT
|
||||
EXPECT_EQ(0, BuiltInDefaultValue<float>::Get());
|
||||
EXPECT_EQ(0, BuiltInDefaultValue<double>::Get());
|
||||
}
|
||||
@@ -137,10 +135,6 @@ TEST(BuiltInDefaultValueTest, ExistsForNumericTypes) {
|
||||
EXPECT_TRUE(BuiltInDefaultValue<unsigned char>::Exists());
|
||||
EXPECT_TRUE(BuiltInDefaultValue<signed char>::Exists());
|
||||
EXPECT_TRUE(BuiltInDefaultValue<char>::Exists());
|
||||
#if GMOCK_HAS_SIGNED_WCHAR_T_
|
||||
EXPECT_TRUE(BuiltInDefaultValue<unsigned wchar_t>::Exists());
|
||||
EXPECT_TRUE(BuiltInDefaultValue<signed wchar_t>::Exists());
|
||||
#endif
|
||||
#if GMOCK_WCHAR_T_IS_NATIVE_
|
||||
EXPECT_TRUE(BuiltInDefaultValue<wchar_t>::Exists());
|
||||
#endif
|
||||
@@ -153,8 +147,9 @@ TEST(BuiltInDefaultValueTest, ExistsForNumericTypes) {
|
||||
EXPECT_TRUE(BuiltInDefaultValue<unsigned long>::Exists()); // NOLINT
|
||||
EXPECT_TRUE(BuiltInDefaultValue<signed long>::Exists()); // NOLINT
|
||||
EXPECT_TRUE(BuiltInDefaultValue<long>::Exists()); // NOLINT
|
||||
EXPECT_TRUE(BuiltInDefaultValue<UInt64>::Exists());
|
||||
EXPECT_TRUE(BuiltInDefaultValue<Int64>::Exists());
|
||||
EXPECT_TRUE(BuiltInDefaultValue<unsigned long long>::Exists()); // NOLINT
|
||||
EXPECT_TRUE(BuiltInDefaultValue<signed long long>::Exists()); // NOLINT
|
||||
EXPECT_TRUE(BuiltInDefaultValue<long long>::Exists()); // NOLINT
|
||||
EXPECT_TRUE(BuiltInDefaultValue<float>::Exists());
|
||||
EXPECT_TRUE(BuiltInDefaultValue<double>::Exists());
|
||||
}
|
||||
@@ -581,8 +576,6 @@ class FromType {
|
||||
|
||||
private:
|
||||
bool* const converted_;
|
||||
|
||||
GTEST_DISALLOW_ASSIGN_(FromType);
|
||||
};
|
||||
|
||||
class ToType {
|
||||
@@ -654,6 +647,41 @@ TEST(ReturnRefTest, IsCovariant) {
|
||||
EXPECT_EQ(&derived, &a.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
template <typename T, typename = decltype(ReturnRef(std::declval<T&&>()))>
|
||||
bool CanCallReturnRef(T&&) { return true; }
|
||||
bool CanCallReturnRef(Unused) { return false; }
|
||||
|
||||
// Tests that ReturnRef(v) is working with non-temporaries (T&)
|
||||
TEST(ReturnRefTest, WorksForNonTemporary) {
|
||||
int scalar_value = 123;
|
||||
EXPECT_TRUE(CanCallReturnRef(scalar_value));
|
||||
|
||||
std::string non_scalar_value("ABC");
|
||||
EXPECT_TRUE(CanCallReturnRef(non_scalar_value));
|
||||
|
||||
const int const_scalar_value{321};
|
||||
EXPECT_TRUE(CanCallReturnRef(const_scalar_value));
|
||||
|
||||
const std::string const_non_scalar_value("CBA");
|
||||
EXPECT_TRUE(CanCallReturnRef(const_non_scalar_value));
|
||||
}
|
||||
|
||||
// Tests that ReturnRef(v) is not working with temporaries (T&&)
|
||||
TEST(ReturnRefTest, DoesNotWorkForTemporary) {
|
||||
auto scalar_value = []() -> int { return 123; };
|
||||
EXPECT_FALSE(CanCallReturnRef(scalar_value()));
|
||||
|
||||
auto non_scalar_value = []() -> std::string { return "ABC"; };
|
||||
EXPECT_FALSE(CanCallReturnRef(non_scalar_value()));
|
||||
|
||||
// cannot use here callable returning "const scalar type",
|
||||
// because such const for scalar return type is ignored
|
||||
EXPECT_FALSE(CanCallReturnRef(static_cast<const int>(321)));
|
||||
|
||||
auto const_non_scalar_value = []() -> const std::string { return "CBA"; };
|
||||
EXPECT_FALSE(CanCallReturnRef(const_non_scalar_value()));
|
||||
}
|
||||
|
||||
// Tests that ReturnRefOfCopy(v) works for reference types.
|
||||
TEST(ReturnRefOfCopyTest, WorksForReference) {
|
||||
int n = 42;
|
||||
@@ -678,6 +706,31 @@ TEST(ReturnRefOfCopyTest, IsCovariant) {
|
||||
EXPECT_NE(&derived, &a.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
// Tests that ReturnRoundRobin(v) works with initializer lists
|
||||
TEST(ReturnRoundRobinTest, WorksForInitList) {
|
||||
Action<int()> ret = ReturnRoundRobin({1, 2, 3});
|
||||
|
||||
EXPECT_EQ(1, ret.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(2, ret.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(3, ret.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(1, ret.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(2, ret.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(3, ret.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
// Tests that ReturnRoundRobin(v) works with vectors
|
||||
TEST(ReturnRoundRobinTest, WorksForVector) {
|
||||
std::vector<double> v = {4.4, 5.5, 6.6};
|
||||
Action<double()> ret = ReturnRoundRobin(v);
|
||||
|
||||
EXPECT_EQ(4.4, ret.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(5.5, ret.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(6.6, ret.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(4.4, ret.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(5.5, ret.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(6.6, ret.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
// Tests that DoDefault() does the default action for the mock method.
|
||||
|
||||
class MockClass {
|
||||
@@ -742,7 +795,7 @@ TEST(DoDefaultDeathTest, DiesIfUsedInCompositeAction) {
|
||||
}
|
||||
|
||||
// Tests that DoDefault() returns the default value set by
|
||||
// DefaultValue<T>::Set() when it's not overriden by an ON_CALL().
|
||||
// DefaultValue<T>::Set() when it's not overridden by an ON_CALL().
|
||||
TEST(DoDefaultTest, ReturnsUserSpecifiedPerTypeDefaultValueWhenThereIsOne) {
|
||||
DefaultValue<int>::Set(1);
|
||||
MockClass mock;
|
||||
@@ -1238,6 +1291,52 @@ TEST(ByRefTest, PrintsCorrectly) {
|
||||
EXPECT_EQ(expected.str(), actual.str());
|
||||
}
|
||||
|
||||
struct UnaryConstructorClass {
|
||||
explicit UnaryConstructorClass(int v) : value(v) {}
|
||||
int value;
|
||||
};
|
||||
|
||||
// Tests using ReturnNew() with a unary constructor.
|
||||
TEST(ReturnNewTest, Unary) {
|
||||
Action<UnaryConstructorClass*()> a = ReturnNew<UnaryConstructorClass>(4000);
|
||||
UnaryConstructorClass* c = a.Perform(std::make_tuple());
|
||||
EXPECT_EQ(4000, c->value);
|
||||
delete c;
|
||||
}
|
||||
|
||||
TEST(ReturnNewTest, UnaryWorksWhenMockMethodHasArgs) {
|
||||
Action<UnaryConstructorClass*(bool, int)> a =
|
||||
ReturnNew<UnaryConstructorClass>(4000);
|
||||
UnaryConstructorClass* c = a.Perform(std::make_tuple(false, 5));
|
||||
EXPECT_EQ(4000, c->value);
|
||||
delete c;
|
||||
}
|
||||
|
||||
TEST(ReturnNewTest, UnaryWorksWhenMockMethodReturnsPointerToConst) {
|
||||
Action<const UnaryConstructorClass*()> a =
|
||||
ReturnNew<UnaryConstructorClass>(4000);
|
||||
const UnaryConstructorClass* c = a.Perform(std::make_tuple());
|
||||
EXPECT_EQ(4000, c->value);
|
||||
delete c;
|
||||
}
|
||||
|
||||
class TenArgConstructorClass {
|
||||
public:
|
||||
TenArgConstructorClass(int a1, int a2, int a3, int a4, int a5, int a6, int a7,
|
||||
int a8, int a9, int a10)
|
||||
: value_(a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10) {}
|
||||
int value_;
|
||||
};
|
||||
|
||||
// Tests using ReturnNew() with a 10-argument constructor.
|
||||
TEST(ReturnNewTest, ConstructorThatTakes10Arguments) {
|
||||
Action<TenArgConstructorClass*()> a = ReturnNew<TenArgConstructorClass>(
|
||||
1000000000, 200000000, 30000000, 4000000, 500000, 60000, 7000, 800, 90,
|
||||
0);
|
||||
TenArgConstructorClass* c = a.Perform(std::make_tuple());
|
||||
EXPECT_EQ(1234567890, c->value_);
|
||||
delete c;
|
||||
}
|
||||
|
||||
std::unique_ptr<int> UniquePtrSource() {
|
||||
return std::unique_ptr<int>(new int(19));
|
||||
@@ -1416,8 +1515,19 @@ TEST(FunctorActionTest, TypeConversion) {
|
||||
EXPECT_EQ(1, s2.Perform(std::make_tuple("hello")));
|
||||
|
||||
// Also between the lambda and the action itself.
|
||||
const Action<bool(std::string)> x = [](Unused) { return 42; };
|
||||
EXPECT_TRUE(x.Perform(std::make_tuple("hello")));
|
||||
const Action<bool(std::string)> x1 = [](Unused) { return 42; };
|
||||
const Action<bool(std::string)> x2 = [] { return 42; };
|
||||
EXPECT_TRUE(x1.Perform(std::make_tuple("hello")));
|
||||
EXPECT_TRUE(x2.Perform(std::make_tuple("hello")));
|
||||
|
||||
// Ensure decay occurs where required.
|
||||
std::function<int()> f = [] { return 7; };
|
||||
Action<int(int)> d = f;
|
||||
f = nullptr;
|
||||
EXPECT_EQ(7, d.Perform(std::make_tuple(1)));
|
||||
|
||||
// Ensure creation of an empty action succeeds.
|
||||
Action<void(int)>(nullptr);
|
||||
}
|
||||
|
||||
TEST(FunctorActionTest, UnusedArguments) {
|
||||
@@ -1442,6 +1552,26 @@ TEST(MoveOnlyArgumentsTest, ReturningActions) {
|
||||
EXPECT_EQ(x, 3);
|
||||
}
|
||||
|
||||
ACTION(ReturnArity) {
|
||||
return std::tuple_size<args_type>::value;
|
||||
}
|
||||
|
||||
TEST(ActionMacro, LargeArity) {
|
||||
EXPECT_EQ(
|
||||
1, testing::Action<int(int)>(ReturnArity()).Perform(std::make_tuple(0)));
|
||||
EXPECT_EQ(
|
||||
10,
|
||||
testing::Action<int(int, int, int, int, int, int, int, int, int, int)>(
|
||||
ReturnArity())
|
||||
.Perform(std::make_tuple(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)));
|
||||
EXPECT_EQ(
|
||||
20,
|
||||
testing::Action<int(int, int, int, int, int, int, int, int, int, int, int,
|
||||
int, int, int, int, int, int, int, int, int)>(
|
||||
ReturnArity())
|
||||
.Perform(std::make_tuple(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
|
||||
14, 15, 16, 17, 18, 19)));
|
||||
}
|
||||
|
||||
} // Unnamed namespace
|
||||
|
||||
|
||||
Reference in New Issue
Block a user