chromeos: Move //ash/common files into //ash
//ash contains the "Aura Shell" system UI used by Chrome OS. For the
mustash servicification project we initially started moving files into
//ash/mus vs. //ash/aura vs. //ash/common. This allowed us to use DEPS
to ban aura includes. We now support aura on mus all the time, so we
don't need this directory structure.
BUG=690096
TEST=compiles, ash_unittests
[email protected]
Change-Id: I682586877b6c537d2db613664318bbc0365362c6
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:closure_compilation
Change-Id: I682586877b6c537d2db613664318bbc0365362c6
Reviewed-on: https://chromium-review.googlesource.com/472548
Reviewed-by: James Cook <[email protected]>
Cr-Commit-Position: refs/heads/master@{#463140}
diff --git a/ash/window_user_data_unittest.cc b/ash/window_user_data_unittest.cc
new file mode 100644
index 0000000..a76d9a1
--- /dev/null
+++ b/ash/window_user_data_unittest.cc
@@ -0,0 +1,80 @@
+// Copyright 2016 The Chromium 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 "ash/window_user_data.h"
+
+#include <memory>
+
+#include "ash/test/ash_test.h"
+#include "ash/window_user_data.h"
+#include "base/memory/ptr_util.h"
+#include "ui/aura/window.h"
+#include "ui/compositor/layer_type.h"
+
+namespace ash {
+namespace {
+
+// Class that sets a bool* to true from the destructor. Used to track
+// destruction.
+class Data {
+ public:
+ explicit Data(bool* delete_setter) : delete_setter_(delete_setter) {}
+ ~Data() { *delete_setter_ = true; }
+
+ private:
+ bool* delete_setter_;
+
+ DISALLOW_COPY_AND_ASSIGN(Data);
+};
+
+} // namespace
+
+using WindowUserDataTest = AshTest;
+
+// Verifies clear() deletes the data associated with a window.
+TEST_F(WindowUserDataTest, ClearDestroys) {
+ WindowUserData<Data> user_data;
+ aura::Window window(nullptr, ui::wm::WINDOW_TYPE_UNKNOWN);
+ window.Init(ui::LAYER_NOT_DRAWN);
+ bool data_deleted = false;
+ user_data.Set(&window, base::MakeUnique<Data>(&data_deleted));
+ EXPECT_FALSE(data_deleted);
+ user_data.clear();
+ EXPECT_TRUE(data_deleted);
+}
+
+// Verifies Set() called with an existing window replaces the existing data.
+TEST_F(WindowUserDataTest, ReplaceDestroys) {
+ WindowUserData<Data> user_data;
+ std::unique_ptr<aura::Window> window(
+ base::MakeUnique<aura::Window>(nullptr, ui::wm::WINDOW_TYPE_UNKNOWN));
+ window->Init(ui::LAYER_NOT_DRAWN);
+ bool data1_deleted = false;
+ user_data.Set(window.get(), base::MakeUnique<Data>(&data1_deleted));
+ EXPECT_FALSE(data1_deleted);
+ bool data2_deleted = false;
+ user_data.Set(window.get(), base::MakeUnique<Data>(&data2_deleted));
+ EXPECT_TRUE(data1_deleted);
+ EXPECT_FALSE(data2_deleted);
+ ASSERT_EQ(1u, user_data.GetWindows().size());
+ EXPECT_EQ(window.get(), *user_data.GetWindows().begin());
+ window.reset();
+ EXPECT_TRUE(data2_deleted);
+ EXPECT_TRUE(user_data.GetWindows().empty());
+}
+
+// Verifies Set() with null deletes existing data.
+TEST_F(WindowUserDataTest, NullClears) {
+ WindowUserData<Data> user_data;
+ aura::Window window(nullptr, ui::wm::WINDOW_TYPE_UNKNOWN);
+ window.Init(ui::LAYER_NOT_DRAWN);
+ bool data1_deleted = false;
+ user_data.Set(&window, base::MakeUnique<Data>(&data1_deleted));
+ EXPECT_FALSE(data1_deleted);
+ user_data.Set(&window, nullptr);
+ EXPECT_TRUE(data1_deleted);
+ EXPECT_TRUE(user_data.GetWindows().empty());
+}
+
+} // namespace ash