Removing the template arguments and most of the mutating methods from CleanUp makes it easier to understand and reuse. In its present state, CleanUp would be too cumbersome to adapt to cases where multiple objects need to be released. Take for example this change in swift-lldb: https://github.com/apple/swift-lldb/pull/334/files#diff-6f474df750f75c8ba675f2a8408a5629R219 This change is simple to express with the new CleanUp, but not so simple with the old version. Differential Revision: https://reviews.llvm.org/D43662 llvm-svn: 325964
48 lines
1009 B
C++
48 lines
1009 B
C++
//===-- CleanUpTest.cpp -----------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/Utility/CleanUp.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace lldb_private;
|
|
|
|
TEST(CleanUpTest, no_args) {
|
|
bool f = false;
|
|
{
|
|
CleanUp cleanup([&] { f = true; });
|
|
}
|
|
ASSERT_TRUE(f);
|
|
}
|
|
|
|
TEST(CleanUpTest, multiple_args) {
|
|
bool f1 = false;
|
|
bool f2 = false;
|
|
bool f3 = false;
|
|
{
|
|
CleanUp cleanup(
|
|
[](bool arg1, bool *arg2, bool &arg3) {
|
|
ASSERT_FALSE(arg1);
|
|
*arg2 = true;
|
|
arg3 = true;
|
|
},
|
|
f1, &f2, f3);
|
|
}
|
|
ASSERT_TRUE(f2);
|
|
ASSERT_FALSE(f3);
|
|
}
|
|
|
|
TEST(CleanUpTest, disable) {
|
|
bool f = false;
|
|
{
|
|
CleanUp cleanup([&] { f = true; });
|
|
cleanup.disable();
|
|
}
|
|
ASSERT_FALSE(f);
|
|
}
|