diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/testing/gtest_extensions/probe.h | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/testing/gtest_extensions/probe.h')
-rw-r--r-- | library/cpp/testing/gtest_extensions/probe.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/library/cpp/testing/gtest_extensions/probe.h b/library/cpp/testing/gtest_extensions/probe.h new file mode 100644 index 0000000000..7d1fee83d3 --- /dev/null +++ b/library/cpp/testing/gtest_extensions/probe.h @@ -0,0 +1,81 @@ +#pragma once + +#include <util/system/yassert.h> + +#include <library/cpp/testing/common/probe.h> + +#include <gtest/gtest.h> +#include <gmock/gmock.h> + +namespace testing { + using NTesting::TProbe; + using NTesting::TProbeState; + using NTesting::TCoercibleToProbe; + + // A helper functor which extracts from probe-like objectss their state. + struct TProbableTraits { + static const TProbeState& ExtractState(const TProbeState& probe) { + return probe; + } + + static const TProbeState& ExtractState(const TProbeState* probe) { + return *probe; + } + + static const TProbeState& ExtractState(const TProbe& probe) { + return *probe.State; + } + + static const TProbeState& ExtractState(const TCoercibleToProbe& probe) { + return *probe.State; + } + }; + + void PrintTo(const TProbeState& state, ::std::ostream* os); + + inline void PrintTo(const TProbe& probe, ::std::ostream* os) { + PrintTo(TProbableTraits::ExtractState(probe), os); + } + + inline void PrintTo(const TCoercibleToProbe& probe, ::std::ostream* os) { + PrintTo(TProbableTraits::ExtractState(probe), os); + } + + MATCHER(IsAlive, "is alive") { + Y_UNUSED(result_listener); + const auto& state = TProbableTraits::ExtractState(arg); + return state.Destructors < state.Constructors + state.CopyConstructors + state.CopyAssignments; + } + + MATCHER(IsDead, "is dead") { + Y_UNUSED(result_listener); + const auto& state = TProbableTraits::ExtractState(arg); + return state.Destructors == state.Constructors + state.CopyConstructors + state.CopyAssignments; + } + + MATCHER_P2(HasCopyMoveCounts, copyCount, moveCount, "" + \ + PrintToString(copyCount) + " copy constructors and " + \ + PrintToString(moveCount) + " move constructors were called") { + Y_UNUSED(result_listener); + const auto& state = TProbableTraits::ExtractState(arg); + return state.CopyConstructors == copyCount && state.MoveConstructors == moveCount; + } + + MATCHER(NoCopies, "no copies were made") { + Y_UNUSED(result_listener); + const auto& state = TProbableTraits::ExtractState(arg); + return 0 == state.CopyConstructors && 0 == state.CopyAssignments; + } + + MATCHER(NoMoves, "no moves were made") { + Y_UNUSED(result_listener); + const auto& state = TProbableTraits::ExtractState(arg); + return 0 == state.MoveConstructors && 0 == state.MoveAssignments; + } + + MATCHER(NoAssignments, "no assignments were made") { + Y_UNUSED(result_listener); + const auto& state = TProbableTraits::ExtractState(arg); + return 0 == state.CopyAssignments && 0 == state.MoveAssignments; + } +} |