Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(624)

Unified Diff: components/mus/example/wm/move_loop_unittest.cc

Issue 1416453005: Adds window resizing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/mus/example/wm/move_loop.cc ('k') | components/mus/public/cpp/tests/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/mus/example/wm/move_loop_unittest.cc
diff --git a/components/mus/example/wm/move_loop_unittest.cc b/components/mus/example/wm/move_loop_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d53b862c9c777f2bdea17a1d297d33c6469ea210
--- /dev/null
+++ b/components/mus/example/wm/move_loop_unittest.cc
@@ -0,0 +1,180 @@
+// Copyright 2015 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 "components/mus/example/wm/move_loop.h"
+
+#include "components/mus/public/cpp/tests/test_window.h"
+#include "mojo/converters/input_events/input_events_type_converters.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/events/event.h"
+#include "ui/gfx/geometry/point.h"
+#include "ui/gfx/geometry/rect.h"
+
+using MoveLoopTest = testing::Test;
+
+namespace {
+
+// Sets the client area for |window|. Padding is provided on the top so that
+// there is a movable region. All other edges are sized to
+// |MoveLoop::kResizeSize|.
+void SetClientArea(mus::Window* window) {
+ if (window->bounds().IsEmpty())
+ window->SetBounds(gfx::Rect(100, 200, 300, 400));
+
+ gfx::Rect client_area(window->bounds().size());
+ client_area.Inset(MoveLoop::kResizeSize, MoveLoop::kResizeSize + 10,
+ MoveLoop::kResizeSize, MoveLoop::kResizeSize);
+ window->SetClientArea(client_area);
+}
+
+mus::mojom::EventPtr CreatePointerDownEvent(const gfx::Point& location) {
+ const ui::TouchEvent event(ui::ET_TOUCH_PRESSED, gfx::PointF(location), 1,
+ base::TimeDelta());
+ return mus::mojom::Event::From(static_cast<const ui::Event&>(event));
+}
+
+mus::mojom::EventPtr CreatePointerMove(const gfx::Point& location) {
+ const ui::TouchEvent event(ui::ET_TOUCH_MOVED, gfx::PointF(location), 1,
+ base::TimeDelta());
+ return mus::mojom::Event::From(static_cast<const ui::Event&>(event));
+}
+
+enum class HorizontalLocation {
+ LEFT,
+ MIDDLE,
+ RIGHT,
+};
+
+enum class VerticalLocation {
+ TOP_MOVE,
+ TOP_RESIZE,
+ MIDDLE,
+ BOTTOM,
+};
+
+int HorizontalLocationToPoint(const mus::Window* window,
+ HorizontalLocation loc) {
+ if (loc == HorizontalLocation::LEFT)
+ return 0;
+ return loc == HorizontalLocation::MIDDLE ? window->bounds().width() / 2
+ : window->bounds().width() - 1;
+}
+
+int VerticalLocationToPoint(const mus::Window* window, VerticalLocation loc) {
+ switch (loc) {
+ case VerticalLocation::TOP_MOVE:
+ return MoveLoop::kResizeSize + 1;
+ case VerticalLocation::TOP_RESIZE:
+ return 0;
+ case VerticalLocation::MIDDLE:
+ return window->bounds().height() / 2;
+ case VerticalLocation::BOTTOM:
+ return window->bounds().height() - 1;
+ }
+ return 0;
+}
+
+gfx::Point LocationToPoint(const mus::Window* window,
+ HorizontalLocation h_loc,
+ VerticalLocation v_loc) {
+ return gfx::Point(HorizontalLocationToPoint(window, h_loc),
+ VerticalLocationToPoint(window, v_loc));
+}
+
+} // namespace
+
+TEST_F(MoveLoopTest, Move) {
+ struct TestData {
+ HorizontalLocation initial_h_loc;
+ VerticalLocation initial_v_loc;
+ // Number of values in delta_* that are valid. For example, if this is 1
+ // then only one move is generated with thye point |delta_x[0]|,
+ // |delta_y[0]|.
+ int delta_count;
+ int delta_x[3];
+ int delta_y[3];
+ gfx::Rect expected_bounds;
+ } data[] = {
+ // Move.
+ {HorizontalLocation::MIDDLE,
+ VerticalLocation::TOP_MOVE,
+ 1,
+ {1, 0, 0},
+ {2, 0, 0},
+ gfx::Rect(101, 202, 300, 400)},
+
+ // Resize from top, left.
+ {HorizontalLocation::LEFT,
+ VerticalLocation::TOP_RESIZE,
+ 1,
+ {1, 0, 0},
+ {2, 0, 0},
+ gfx::Rect(101, 202, 299, 398)},
+
+ // Resize from left.
+ {HorizontalLocation::LEFT,
+ VerticalLocation::MIDDLE,
+ 1,
+ {1, 0, 0},
+ {2, 0, 0},
+ gfx::Rect(101, 200, 299, 400)},
+
+ // Resize from bottom, left.
+ {HorizontalLocation::LEFT,
+ VerticalLocation::BOTTOM,
+ 1,
+ {-1, 0, 0},
+ {-2, 0, 0},
+ gfx::Rect(99, 200, 301, 398)},
+
+ // Resize from bottom.
+ {HorizontalLocation::MIDDLE,
+ VerticalLocation::BOTTOM,
+ 1,
+ {-1, 0, 0},
+ {4, 0, 0},
+ gfx::Rect(100, 200, 300, 404)},
+
+ // Resize from bottom, right.
+ {HorizontalLocation::RIGHT,
+ VerticalLocation::BOTTOM,
+ 1,
+ {-3, 0, 0},
+ {4, 0, 0},
+ gfx::Rect(100, 200, 297, 404)},
+
+ // Resize from right.
+ {HorizontalLocation::RIGHT,
+ VerticalLocation::MIDDLE,
+ 1,
+ {6, 0, 0},
+ {-4, 0, 0},
+ gfx::Rect(100, 200, 306, 400)},
+
+ // Resize from top, right.
+ {HorizontalLocation::RIGHT,
+ VerticalLocation::TOP_RESIZE,
+ 1,
+ {6, 0, 0},
+ {5, 0, 0},
+ gfx::Rect(100, 205, 306, 395)},
+ };
+
+ for (size_t i = 0; i < arraysize(data); ++i) {
+ mus::TestWindow window;
+ SetClientArea(&window);
+ gfx::Point pointer_location(
+ LocationToPoint(&window, data[i].initial_h_loc, data[i].initial_v_loc));
+ scoped_ptr<MoveLoop> move_loop =
+ MoveLoop::Create(&window, *CreatePointerDownEvent(pointer_location));
+ ASSERT_TRUE(move_loop.get()) << i;
+ for (int j = 0; j < data[i].delta_count; ++j) {
+ pointer_location.Offset(data[i].delta_x[j], data[i].delta_y[j]);
+ ASSERT_EQ(MoveLoop::MoveResult::CONTINUE,
+ move_loop->Move(*CreatePointerMove(pointer_location)))
+ << i << " " << j;
+ }
+ ASSERT_EQ(data[i].expected_bounds, window.bounds());
+ }
+}
« no previous file with comments | « components/mus/example/wm/move_loop.cc ('k') | components/mus/public/cpp/tests/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698