35#include "gtest/gtest.h"
36using ::testing::EmptyTestEventListener;
37using ::testing::InitGoogleTest;
39using ::testing::TestEventListeners;
40using ::testing::TestInfo;
41using ::testing::TestPartResult;
42using ::testing::UnitTest;
51 void*
operator new(
size_t allocation_size) {
53 return malloc(allocation_size);
56 void operator delete(
void* block,
size_t ) {
61 static int allocated() {
return allocated_; }
64 static int allocated_;
67int Water::allocated_ = 0;
73class LeakChecker :
public EmptyTestEventListener {
76 void OnTestStart(
const TestInfo& )
override {
77 initially_allocated_ = Water::allocated();
81 void OnTestEnd(
const TestInfo& )
override {
82 int difference = Water::allocated() - initially_allocated_;
87 EXPECT_LE(difference, 0) <<
"Leaked " << difference <<
" unit(s) of Water!";
90 int initially_allocated_;
93TEST(ListenersTest, DoesNotLeak) {
94 Water* water =
new Water;
100TEST(ListenersTest, LeaksWater) {
101 Water* water =
new Water;
102 EXPECT_TRUE(water !=
nullptr);
106int main(
int argc,
char** argv) {
107 InitGoogleTest(&argc, argv);
109 bool check_for_leaks =
false;
110 if (argc > 1 && strcmp(argv[1],
"--check_for_leaks") == 0)
111 check_for_leaks =
true;
114 "Run this program with --check_for_leaks to enable "
115 "custom leak checking in the tests.");
119 if (check_for_leaks) {
120 TestEventListeners& listeners = UnitTest::GetInstance()->listeners();
136 listeners.Append(
new LeakChecker);
138 return RUN_ALL_TESTS();
TEST(ComponentParameterTest, ParameterTest)
int main(int argc, char **argv)