|  | // Copyright 2018 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef COMPONENTS_UI_DEVTOOLS_UI_DEVTOOLS_UNITTEST_UTILS_H_ | 
|  | #define COMPONENTS_UI_DEVTOOLS_UI_DEVTOOLS_UNITTEST_UTILS_H_ | 
|  |  | 
|  | #include <vector> | 
|  |  | 
|  | #include "components/ui_devtools/protocol.h" | 
|  | #include "components/ui_devtools/ui_element.h" | 
|  | #include "components/ui_devtools/ui_element_delegate.h" | 
|  | #include "testing/gmock/include/gmock/gmock.h" | 
|  |  | 
|  | namespace ui_devtools { | 
|  |  | 
|  | class FakeFrontendChannel : public protocol::FrontendChannel { | 
|  | public: | 
|  | FakeFrontendChannel(); | 
|  |  | 
|  | FakeFrontendChannel(const FakeFrontendChannel&) = delete; | 
|  | FakeFrontendChannel& operator=(const FakeFrontendChannel&) = delete; | 
|  |  | 
|  | ~FakeFrontendChannel() override; | 
|  |  | 
|  | int CountProtocolNotificationMessageStartsWith(const std::string& message); | 
|  |  | 
|  | int CountProtocolNotificationMessage(const std::string& message); | 
|  |  | 
|  | void SetAllowNotifications(bool allow_notifications) { | 
|  | allow_notifications_ = allow_notifications; | 
|  | } | 
|  |  | 
|  | // FrontendChannel: | 
|  | void SendProtocolResponse( | 
|  | int callId, | 
|  | std::unique_ptr<protocol::Serializable> message) override {} | 
|  | void FlushProtocolNotifications() override {} | 
|  | void FallThrough(int call_id, | 
|  | crdtp::span<uint8_t> method, | 
|  | crdtp::span<uint8_t> message) override {} | 
|  | void SendProtocolNotification( | 
|  | std::unique_ptr<protocol::Serializable> message) override; | 
|  |  | 
|  | private: | 
|  | std::vector<std::string> protocol_notification_messages_; | 
|  | bool allow_notifications_ = true; | 
|  | }; | 
|  |  | 
|  | class MockUIElementDelegate : public UIElementDelegate { | 
|  | public: | 
|  | MockUIElementDelegate(); | 
|  | ~MockUIElementDelegate() override; | 
|  |  | 
|  | MOCK_METHOD2(OnUIElementAdded, void(UIElement*, UIElement*)); | 
|  | MOCK_METHOD2(OnUIElementReordered, void(UIElement*, UIElement*)); | 
|  | MOCK_METHOD1(OnUIElementRemoved, void(UIElement*)); | 
|  | MOCK_METHOD1(OnUIElementBoundsChanged, void(UIElement*)); | 
|  | }; | 
|  |  | 
|  | class FakeUIElement : public UIElement { | 
|  | public: | 
|  | explicit FakeUIElement(UIElementDelegate* ui_element_delegate) | 
|  | : UIElement(UIElementType::ROOT, ui_element_delegate, nullptr) {} | 
|  |  | 
|  | ~FakeUIElement() override = default; | 
|  | void GetBounds(gfx::Rect* bounds) const override; | 
|  | void SetBounds(const gfx::Rect& bounds) override; | 
|  | void GetVisible(bool* visible) const override; | 
|  | void SetVisible(bool visible) override; | 
|  | std::vector<std::string> GetAttributes() const override; | 
|  | std::pair<gfx::NativeWindow, gfx::Rect> GetNodeWindowAndScreenBounds() | 
|  | const override; | 
|  | gfx::Rect GetNodeBoundsInScreen() const override; | 
|  | void AddSource(std::string path, int line); | 
|  | bool visible() const { return visible_; } | 
|  | gfx::Rect bounds() const { return bounds_; } | 
|  |  | 
|  | private: | 
|  | gfx::Rect bounds_; | 
|  | bool visible_ = false; | 
|  | }; | 
|  |  | 
|  | }  // namespace ui_devtools | 
|  |  | 
|  | #endif  // COMPONENTS_UI_DEVTOOLS_UI_DEVTOOLS_UNITTEST_UTILS_H_ |