1 // Copyright 2019 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 #ifndef CHROME_BROWSER_AUTOFILL_MOCK_AUTOFILL_POPUP_CONTROLLER_H_
6 #define CHROME_BROWSER_AUTOFILL_MOCK_AUTOFILL_POPUP_CONTROLLER_H_
7 
8 #include <memory>
9 #include <vector>
10 
11 #include "base/memory/weak_ptr.h"
12 #include "base/no_destructor.h"
13 #include "build/build_config.h"
14 #include "chrome/browser/ui/autofill/autofill_popup_controller.h"
15 #include "components/autofill/core/browser/ui/suggestion.h"
16 #include "testing/gmock/include/gmock/gmock.h"
17 #include "ui/gfx/geometry/rect_f.h"
18 
19 namespace autofill {
20 
21 class MockAutofillPopupController
22     : public AutofillPopupController,
23       public base::SupportsWeakPtr<MockAutofillPopupController> {
24  public:
25   MockAutofillPopupController();
26   ~MockAutofillPopupController();
27 
28   // AutofillPopupViewDelegate
29   MOCK_METHOD1(Hide, void(PopupHidingReason reason));
30   MOCK_METHOD0(ViewDestroyed, void());
31   MOCK_METHOD1(SetSelectionAtPoint, void(const gfx::Point& point));
32   MOCK_METHOD0(AcceptSelectedLine, bool());
33   MOCK_METHOD0(SelectionCleared, void());
34   MOCK_CONST_METHOD0(HasSelection, bool());
35   MOCK_CONST_METHOD0(popup_bounds, gfx::Rect());
36   MOCK_CONST_METHOD0(container_view, gfx::NativeView());
37   MOCK_CONST_METHOD0(GetWebContents, content::WebContents*());
element_bounds()38   const gfx::RectF& element_bounds() const override {
39     static base::NoDestructor<gfx::RectF> bounds({100, 100, 250, 50});
40     return *bounds;
41   }
42   MOCK_CONST_METHOD0(IsRTL, bool());
43 
44   // AutofillPopupController
45   MOCK_METHOD0(OnSuggestionsChanged, void());
46   MOCK_METHOD1(AcceptSuggestion, void(int index));
GetSuggestions()47   std::vector<Suggestion> GetSuggestions() const override {
48     return suggestions_;
49   }
50 
GetLineCount()51   int GetLineCount() const override { return suggestions_.size(); }
52 
GetSuggestionAt(int row)53   const autofill::Suggestion& GetSuggestionAt(int row) const override {
54     return suggestions_[row];
55   }
56 
GetSuggestionValueAt(int i)57   const base::string16& GetSuggestionValueAt(int i) const override {
58     return suggestions_[i].value;
59   }
60 
GetSuggestionLabelAt(int row)61   const base::string16& GetSuggestionLabelAt(int row) const override {
62     return suggestions_[row].label;
63   }
64 
GetWeakPtr()65   base::WeakPtr<MockAutofillPopupController> GetWeakPtr() {
66     return weak_ptr_factory_.GetWeakPtr();
67   }
68 
69   MOCK_METHOD3(GetRemovalConfirmationText,
70                bool(int index, base::string16* title, base::string16* body));
71   MOCK_METHOD1(RemoveSuggestion, bool(int index));
72   MOCK_METHOD1(SetSelectedLine, void(base::Optional<int> selected_line));
73   MOCK_CONST_METHOD0(selected_line, base::Optional<int>());
74   MOCK_CONST_METHOD0(GetPopupType, PopupType());
75 
set_suggestions(const std::vector<int> & ids)76   void set_suggestions(const std::vector<int>& ids) {
77     for (const auto& id : ids)
78       suggestions_.push_back(autofill::Suggestion("", "", "", id));
79   }
80 
set_suggestions(const std::vector<Suggestion> & suggestions)81   void set_suggestions(const std::vector<Suggestion>& suggestions) {
82     suggestions_ = suggestions;
83   }
84 
85  private:
86   std::vector<autofill::Suggestion> suggestions_;
87 
88   base::WeakPtrFactory<MockAutofillPopupController> weak_ptr_factory_{this};
89 };
90 
91 }  // namespace autofill
92 
93 #endif  // CHROME_BROWSER_AUTOFILL_MOCK_AUTOFILL_POPUP_CONTROLLER_H_
94