Index: ui/wm/core/window_util_unittest.cc |
diff --git a/ui/wm/core/window_util_unittest.cc b/ui/wm/core/window_util_unittest.cc |
index 4a7fedb1af7aa45c7b7e9b9168341383b349a764..10de1caa0997b33458924bd36ef8fd8db6639659 100644 |
--- a/ui/wm/core/window_util_unittest.cc |
+++ b/ui/wm/core/window_util_unittest.cc |
@@ -6,6 +6,7 @@ |
#include <memory> |
+#include "base/bind.h" |
#include "ui/aura/test/aura_test_base.h" |
#include "ui/aura/test/test_windows.h" |
#include "ui/aura/window.h" |
@@ -50,4 +51,52 @@ TEST_F(WindowUtilTest, RecreateLayers) { |
window11.reset(); |
} |
+// Test if map_func is correctly executed in RecreateLayerWithClosure. |
+TEST_F(WindowUtilTest, RecreateLayersWithClosure) { |
+ std::unique_ptr<aura::Window> window1( |
+ aura::test::CreateTestWindowWithId(0, NULL)); |
+ std::unique_ptr<aura::Window> window11( |
+ aura::test::CreateTestWindowWithId(1, window1.get())); |
+ std::unique_ptr<aura::Window> window12( |
+ aura::test::CreateTestWindowWithId(2, window1.get())); |
+ |
+ ASSERT_EQ(2u, window1->layer()->children().size()); |
+ |
+ auto tree_empty = wm::RecreateLayersWithClosure( |
+ window1.get(), |
+ base::BindRepeating( |
+ [](const aura::Window* to_filter, |
+ ui::LayerOwner* owner) -> std::unique_ptr<ui::Layer> { |
+ if (owner->layer() == to_filter->layer()) |
+ return nullptr; |
+ return owner->RecreateLayer(); |
+ }, |
+ window1.get())); |
+ |
+ // The root is filtered. RecreateLayersWithClosure should return nullptr. |
+ ASSERT_FALSE(tree_empty); |
+ |
+ auto tree = wm::RecreateLayersWithClosure( |
+ window1.get(), |
+ base::BindRepeating( |
+ [](const aura::Window* to_filter, |
+ ui::LayerOwner* owner) -> std::unique_ptr<ui::Layer> { |
+ if (owner->layer() == to_filter->layer()) |
+ return nullptr; |
+ return owner->RecreateLayer(); |
+ }, |
+ window12.get())); |
+ |
+ ASSERT_TRUE(tree); |
+ // window12 is filtered out in the above recreation logic. |
+ ASSERT_EQ(1u, tree->root()->children().size()); |
+ // Child layer is new instance. |
+ EXPECT_NE(window11->layer(), tree->root()->children()[0]); |
+ |
+ // The original window should have both. |
+ ASSERT_EQ(2u, window1->layer()->children().size()); |
+ EXPECT_EQ(window11->layer(), window1->layer()->children()[0]); |
+ EXPECT_EQ(window12->layer(), window1->layer()->children()[1]); |
+} |
+ |
} // namespace wm |