Index: ui/aura/window_unittest.cc |
diff --git a/ui/aura/window_unittest.cc b/ui/aura/window_unittest.cc |
index 668abad81ab6901f1f82cf4c9890e46215912ea6..cb7ad0ec7e7458e3d53053a91fefb2af2dd9201c 100644 |
--- a/ui/aura/window_unittest.cc |
+++ b/ui/aura/window_unittest.cc |
@@ -8,6 +8,7 @@ |
#include "base/basictypes.h" |
#include "base/compiler_specific.h" |
+#include "base/string_number_conversions.h" |
#include "base/stringprintf.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "ui/aura/client/capture_client.h" |
@@ -583,7 +584,9 @@ TEST_F(WindowTest, WindowAddedToRootWindowShouldNotifyChildAndNotParent) { |
AddedToRootWindowObserver parent_observer; |
AddedToRootWindowObserver child_observer; |
scoped_ptr<Window> parent_window(CreateTestWindowWithId(1, NULL)); |
- scoped_ptr<Window> child_window(CreateTestWindowWithId(1, NULL)); |
+ scoped_ptr<Window> child_window(new Window(NULL)); |
+ child_window->Init(ui::LAYER_TEXTURED); |
+ child_window->Show(); |
parent_window->AddObserver(&parent_observer); |
child_window->AddObserver(&child_observer); |
@@ -2461,5 +2464,53 @@ TEST_F(WindowTest, DelegateNotifiedAsBoundsChangeInHiddenLayer) { |
EXPECT_NE("0,0 100x100", window->bounds().ToString()); |
} |
+namespace { |
+ |
+// Used by AddChildNotifications to track notification counts. |
+class AddChildNotificationsObserver : public WindowObserver { |
+ public: |
+ AddChildNotificationsObserver() : added_count_(0), removed_count_(0) {} |
+ |
+ std::string CountStringAndReset() { |
+ std::string result = base::IntToString(added_count_) + " " + |
+ base::IntToString(removed_count_); |
+ added_count_ = removed_count_ = 0; |
+ return result; |
+ } |
+ |
+ // WindowObserver overrides: |
+ virtual void OnWindowAddedToRootWindow(Window* window) OVERRIDE { |
+ added_count_++; |
+ } |
+ virtual void OnWindowRemovingFromRootWindow(Window* window) OVERRIDE { |
+ removed_count_++; |
+ } |
+ |
+ private: |
+ int added_count_; |
+ int removed_count_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AddChildNotificationsObserver); |
+}; |
+ |
+} // namespace |
+ |
+// Assertions around when root window notifications are sent. |
+TEST_F(WindowTest, AddChildNotifications) { |
+ AddChildNotificationsObserver observer; |
+ scoped_ptr<Window> w1(CreateTestWindowWithId(1, NULL)); |
+ scoped_ptr<Window> w2(CreateTestWindowWithId(1, NULL)); |
+ w2->AddObserver(&observer); |
+ w2->Focus(); |
+ EXPECT_TRUE(w2->HasFocus()); |
+ |
+ // Move |w2| to be a child of |w1|. |
+ w1->AddChild(w2.get()); |
+ // Sine we moved in the same root, observer shouldn't be notified. |
+ EXPECT_EQ("0 0", observer.CountStringAndReset()); |
+ // |w2| should still have focus after moving. |
+ EXPECT_TRUE(w2->HasFocus()); |
+} |
+ |
} // namespace test |
} // namespace aura |