blob: 81b75132a55781c8094f7da03a87d407e99cefbe [file] [log] [blame]
// Copyright 2018 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 "ui/aura/mus/gesture_synchronizer.h"
#include <memory>
#include "ui/aura/env.h"
#include "ui/aura/mus/window_mus.h"
#include "ui/aura/mus/window_tree_host_mus.h"
#include "ui/aura/mus/window_tree_host_mus_init_params.h"
#include "ui/aura/test/aura_mus_test_base.h"
#include "ui/aura/test/mus/test_window_tree.h"
#include "ui/aura/test/test_window_delegate.h"
#include "ui/aura/test/test_windows.h"
#include "ui/events/test/event_generator.h"
namespace aura {
class GestureSynchronizerTest : public test::AuraMusClientTestBase {
public:
GestureSynchronizerTest() = default;
~GestureSynchronizerTest() override = default;
protected:
ui::GestureRecognizer* gesture_recognizer() {
return Env::GetInstance()->gesture_recognizer();
}
std::unique_ptr<Window> NewWindow(aura::WindowDelegate* delegate = nullptr) {
return std::unique_ptr<Window>(aura::test::CreateTestWindowWithDelegate(
delegate, 0, gfx::Rect(0, 0, 100, 100), root_window()));
}
private:
DISALLOW_COPY_AND_ASSIGN(GestureSynchronizerTest);
};
TEST_F(GestureSynchronizerTest, CancelActiveTouchesExcept) {
std::unique_ptr<Window> window = NewWindow();
gesture_recognizer()->CancelActiveTouchesExcept(window.get());
EXPECT_EQ(window_tree()->last_not_cancelled_window_id(),
WindowMus::Get(window.get())->server_id());
}
TEST_F(GestureSynchronizerTest, CancelActiveTouchesExceptForNullptr) {
gesture_recognizer()->CancelActiveTouchesExcept(nullptr);
EXPECT_EQ(window_tree()->last_not_cancelled_window_id(), kInvalidServerId);
}
TEST_F(GestureSynchronizerTest, CancelActiveTouches) {
aura::test::TestWindowDelegate delegate;
std::unique_ptr<Window> window = NewWindow(&delegate);
ui::test::EventGenerator event_generator(root_window());
event_generator.MoveTouch(window->GetBoundsInScreen().CenterPoint());
event_generator.PressTouch();
gesture_recognizer()->CancelActiveTouches(window.get());
EXPECT_EQ(window_tree()->last_cancelled_window_id(),
WindowMus::Get(window.get())->server_id());
}
TEST_F(GestureSynchronizerTest, CancelActiveTouchesNotSentWithoutTouches) {
aura::test::TestWindowDelegate delegate;
std::unique_ptr<Window> window = NewWindow(&delegate);
gesture_recognizer()->CancelActiveTouches(window.get());
EXPECT_EQ(window_tree()->last_cancelled_window_id(), 0u);
}
TEST_F(GestureSynchronizerTest, TransferGestureEventsTo) {
std::unique_ptr<Window> window1 = NewWindow();
std::unique_ptr<Window> window2 = NewWindow();
gesture_recognizer()->TransferEventsTo(window1.get(), window2.get(),
ui::TransferTouchesBehavior::kCancel);
EXPECT_EQ(window_tree()->last_transfer_current(),
WindowMus::Get(window1.get())->server_id());
EXPECT_EQ(window_tree()->last_transfer_new(),
WindowMus::Get(window2.get())->server_id());
EXPECT_TRUE(window_tree()->last_transfer_should_cancel());
gesture_recognizer()->TransferEventsTo(
window2.get(), window1.get(), ui::TransferTouchesBehavior::kDontCancel);
EXPECT_EQ(window_tree()->last_transfer_current(),
WindowMus::Get(window2.get())->server_id());
EXPECT_EQ(window_tree()->last_transfer_new(),
WindowMus::Get(window1.get())->server_id());
EXPECT_FALSE(window_tree()->last_transfer_should_cancel());
}
} // namespace aura