| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "fml/closure.h" |
| #include "gtest/gtest.h" |
| |
| TEST(ScopedCleanupClosureTest, DestructorDoesNothingWhenNoClosureSet) { |
| fml::ScopedCleanupClosure cleanup; |
| |
| // Nothing should happen. |
| } |
| |
| TEST(ScopedCleanupClosureTest, ReleaseDoesNothingWhenNoClosureSet) { |
| fml::ScopedCleanupClosure cleanup; |
| |
| // Nothing should happen. |
| EXPECT_EQ(nullptr, cleanup.Release()); |
| } |
| |
| TEST(ScopedCleanupClosureTest, ClosureInvokedOnDestructorWhenSetInConstructor) { |
| auto invoked = false; |
| |
| { |
| fml::ScopedCleanupClosure cleanup([&invoked]() { invoked = true; }); |
| |
| EXPECT_FALSE(invoked); |
| } |
| |
| EXPECT_TRUE(invoked); |
| } |
| |
| TEST(ScopedCleanupClosureTest, ClosureInvokedOnDestructorWhenSet) { |
| auto invoked = false; |
| |
| { |
| fml::ScopedCleanupClosure cleanup; |
| cleanup.SetClosure([&invoked]() { invoked = true; }); |
| |
| EXPECT_FALSE(invoked); |
| } |
| |
| EXPECT_TRUE(invoked); |
| } |
| |
| TEST(ScopedCleanupClosureTest, ClosureNotInvokedWhenMoved) { |
| auto invoked = 0; |
| |
| { |
| fml::ScopedCleanupClosure cleanup([&invoked]() { invoked++; }); |
| fml::ScopedCleanupClosure cleanup2(std::move(cleanup)); |
| |
| EXPECT_EQ(0, invoked); |
| } |
| |
| EXPECT_EQ(1, invoked); |
| } |
| |
| TEST(ScopedCleanupClosureTest, ClosureNotInvokedWhenMovedViaAssignment) { |
| auto invoked = 0; |
| |
| { |
| fml::ScopedCleanupClosure cleanup([&invoked]() { invoked++; }); |
| fml::ScopedCleanupClosure cleanup2; |
| cleanup2 = std::move(cleanup); |
| |
| EXPECT_EQ(0, invoked); |
| } |
| |
| EXPECT_EQ(1, invoked); |
| } |