blob: 98d7baa084827ce1cde8c686984fe41b72f89cdc [file] [log] [blame]
bruthig0d89d6a2015-06-26 19:37:491// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <string>
6
bruthig0d89d6a2015-06-26 19:37:497#include "base/macros.h"
Peter Kastingd77428352018-10-26 15:20:258#include "base/scoped_observer.h"
Guido Urdanetaef4e91942020-11-09 15:06:249#include "base/test/bind.h"
bruthig0d89d6a2015-06-26 19:37:4910#include "testing/gtest/include/gtest/gtest.h"
Peter Kastingf81f0d52020-03-11 01:51:0811#include "ui/base/pointer/touch_ui_controller.h"
bruthig0d89d6a2015-06-26 19:37:4912
13namespace ui {
Robert Liaodee80a62018-10-19 18:45:1614
bruthig0d89d6a2015-06-26 19:37:4915namespace {
16
Peter Kasting47bb7e32020-03-10 23:48:0717class TestObserver {
Peter Kastingd77428352018-10-26 15:20:2518 public:
Peter Kastingf81f0d52020-03-11 01:51:0819 explicit TestObserver(TouchUiController* controller)
20 : subscription_(controller->RegisterCallback(
Peter Kasting47bb7e32020-03-10 23:48:0721 base::BindLambdaForTesting([this]() { ++touch_ui_changes_; }))) {}
22 ~TestObserver() = default;
Peter Kastingd77428352018-10-26 15:20:2523
Peter Kastingcb472112018-10-26 22:02:0924 int touch_ui_changes() const { return touch_ui_changes_; }
Peter Kastingd77428352018-10-26 15:20:2525
26 private:
Peter Kastingcb472112018-10-26 22:02:0927 int touch_ui_changes_ = 0;
Peter Kastingf81f0d52020-03-11 01:51:0828 std::unique_ptr<ui::TouchUiController::Subscription> subscription_;
Robert Liaodee80a62018-10-19 18:45:1629};
30
bruthig0d89d6a2015-06-26 19:37:4931} // namespace
Robert Liaodee80a62018-10-19 18:45:1632
Peter Kastingd77428352018-10-26 15:20:2533// Verifies that non-touch is the default.
Peter Kastingf81f0d52020-03-11 01:51:0834TEST(TouchUiControllerTest, DefaultIsNonTouch) {
35 TouchUiController controller;
Peter Kastingc6fd7f2d2020-03-10 21:21:0836 EXPECT_FALSE(controller.touch_ui());
Robert Liaodee80a62018-10-19 18:45:1637}
38
Peter Kastingc6fd7f2d2020-03-10 21:21:0839// Verifies that kDisabled maps to non-touch.
Peter Kastingf81f0d52020-03-11 01:51:0840TEST(TouchUiControllerTest, DisabledIsNonTouch) {
41 TouchUiController controller(TouchUiController::TouchUiState::kDisabled);
Peter Kastingc6fd7f2d2020-03-10 21:21:0842 EXPECT_FALSE(controller.touch_ui());
Peter Kastingd77428352018-10-26 15:20:2543}
Robert Liaodee80a62018-10-19 18:45:1644
Peter Kastingc6fd7f2d2020-03-10 21:21:0845// Verifies that kAuto maps to non-touch (the default).
Peter Kastingf81f0d52020-03-11 01:51:0846TEST(TouchUiControllerTest, AutoIsNonTouch) {
47 TouchUiController controller(TouchUiController::TouchUiState::kAuto);
Peter Kastingc6fd7f2d2020-03-10 21:21:0848 EXPECT_FALSE(controller.touch_ui());
Peter Kastingd77428352018-10-26 15:20:2549}
Robert Liaodee80a62018-10-19 18:45:1650
Peter Kastingc6fd7f2d2020-03-10 21:21:0851// Verifies that kEnabled maps to touch.
Peter Kastingf81f0d52020-03-11 01:51:0852TEST(TouchUiControllerTest, EnabledIsNonTouch) {
53 TouchUiController controller(TouchUiController::TouchUiState::kEnabled);
Peter Kastingc6fd7f2d2020-03-10 21:21:0854 EXPECT_TRUE(controller.touch_ui());
Peter Kastingd77428352018-10-26 15:20:2555}
Robert Liaodee80a62018-10-19 18:45:1656
Peter Kastingd77428352018-10-26 15:20:2557// Verifies that when the mode is set to non-touch and the tablet mode toggles,
58// the touch UI state does not change.
Peter Kastingf81f0d52020-03-11 01:51:0859TEST(TouchUiControllerTest, TabletToggledOnTouchUiDisabled) {
60 TouchUiController controller(TouchUiController::TouchUiState::kDisabled);
Peter Kastingc6fd7f2d2020-03-10 21:21:0861 TestObserver observer(&controller);
Robert Liaodee80a62018-10-19 18:45:1662
Peter Kastingc6fd7f2d2020-03-10 21:21:0863 controller.OnTabletModeToggled(true);
64 EXPECT_FALSE(controller.touch_ui());
Peter Kastingcb472112018-10-26 22:02:0965 EXPECT_EQ(0, observer.touch_ui_changes());
Robert Liaodee80a62018-10-19 18:45:1666
Peter Kastingc6fd7f2d2020-03-10 21:21:0867 controller.OnTabletModeToggled(false);
68 EXPECT_FALSE(controller.touch_ui());
Peter Kastingcb472112018-10-26 22:02:0969 EXPECT_EQ(0, observer.touch_ui_changes());
Peter Kastingd77428352018-10-26 15:20:2570}
Robert Liaodee80a62018-10-19 18:45:1671
Peter Kastingd77428352018-10-26 15:20:2572// Verifies that when the mode is set to auto and the tablet mode toggles, the
73// touch UI state changes and the observer gets called back.
Peter Kastingf81f0d52020-03-11 01:51:0874TEST(TouchUiControllerTest, TabletToggledOnTouchUiAuto) {
75 TouchUiController controller(TouchUiController::TouchUiState::kAuto);
Peter Kastingc6fd7f2d2020-03-10 21:21:0876 TestObserver observer(&controller);
Peter Kastingd77428352018-10-26 15:20:2577
Peter Kastingc6fd7f2d2020-03-10 21:21:0878 controller.OnTabletModeToggled(true);
79 EXPECT_TRUE(controller.touch_ui());
Peter Kastingcb472112018-10-26 22:02:0980 EXPECT_EQ(1, observer.touch_ui_changes());
Peter Kastingd77428352018-10-26 15:20:2581
Peter Kastingc6fd7f2d2020-03-10 21:21:0882 controller.OnTabletModeToggled(false);
83 EXPECT_FALSE(controller.touch_ui());
Peter Kastingcb472112018-10-26 22:02:0984 EXPECT_EQ(2, observer.touch_ui_changes());
Robert Liaodee80a62018-10-19 18:45:1685}
86
bruthig0d89d6a2015-06-26 19:37:4987} // namespace ui