blob: c4132d9bd4cc02de53b5fedab4c69826eb7af174 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/events/devices/input_device_observer_ios.h"
#include "build/blink_buildflags.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/events/devices/input_device_event_observer.h"
#if !BUILDFLAG(USE_BLINK)
#error File can only be included when USE_BLINK is true
#endif
namespace ui {
class MockInputDeviceEventObserver : public InputDeviceEventObserver {
public:
MOCK_METHOD(void, OnInputDeviceConfigurationChanged, (uint8_t), (override));
};
class InputDeviceObserverIOSTest : public testing::Test {
protected:
void SetUp() override { observer_ = InputDeviceObserverIOS::GetInstance(); }
void TearDown() override {
for (auto observer : added_observers_) {
observer_->RemoveObserver(observer);
}
}
raw_ptr<InputDeviceObserverIOS> observer_;
std::vector<raw_ptr<MockInputDeviceEventObserver>> added_observers_;
};
TEST_F(InputDeviceObserverIOSTest, AddRemoveObserver) {
MockInputDeviceEventObserver mock_observer;
observer_->AddObserver(&mock_observer);
added_observers_.push_back(&mock_observer);
EXPECT_CALL(mock_observer, OnInputDeviceConfigurationChanged(
InputDeviceEventObserver::kMouse))
.Times(1);
observer_->NotifyObserversDeviceConfigurationChanged(true);
observer_->RemoveObserver(&mock_observer);
added_observers_.pop_back();
EXPECT_CALL(mock_observer, OnInputDeviceConfigurationChanged(
InputDeviceEventObserver::kMouse))
.Times(0);
observer_->NotifyObserversDeviceConfigurationChanged(false);
}
TEST_F(InputDeviceObserverIOSTest, HasMouseDeviceState) {
EXPECT_FALSE(observer_->GetHasMouseDevice());
observer_->NotifyObserversDeviceConfigurationChanged(true);
EXPECT_TRUE(observer_->GetHasMouseDevice());
observer_->NotifyObserversDeviceConfigurationChanged(false);
EXPECT_FALSE(observer_->GetHasMouseDevice());
}
TEST_F(InputDeviceObserverIOSTest, NotifyMultipleObservers) {
MockInputDeviceEventObserver mock_observer1;
MockInputDeviceEventObserver mock_observer2;
observer_->AddObserver(&mock_observer1);
observer_->AddObserver(&mock_observer2);
added_observers_.push_back(&mock_observer1);
added_observers_.push_back(&mock_observer2);
EXPECT_CALL(mock_observer1, OnInputDeviceConfigurationChanged(
InputDeviceEventObserver::kMouse))
.Times(1);
EXPECT_CALL(mock_observer2, OnInputDeviceConfigurationChanged(
InputDeviceEventObserver::kMouse))
.Times(1);
observer_->NotifyObserversDeviceConfigurationChanged(true);
}
} // namespace ui