1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_AUTOFILL_POPUP_POPUP_PIXEL_TEST_H_
#define CHROME_BROWSER_UI_VIEWS_AUTOFILL_POPUP_POPUP_PIXEL_TEST_H_
#include <concepts>
#include <string>
#include <tuple>
#include "base/i18n/rtl.h"
#include "base/memory/raw_ptr.h"
#include "base/strings/strcat.h"
#include "chrome/browser/ui/autofill/autofill_popup_view_delegate.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/test/test_browser_ui.h"
#include "chrome/browser/ui/views/autofill/popup/popup_base_view.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "content/public/test/browser_test.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/ui_base_switches.h"
namespace autofill {
using TestParameterType = std::tuple<bool, bool>;
// A base class to do pixel tests for classes that derive from `PopupBaseView`.
// By default, the test class has two parameters: Dark vs light mode and RTL vs
// LTR for the text direction of the browser language.
template <std::derived_from<PopupBaseView> View,
std::derived_from<AutofillPopupViewDelegate> Controller,
typename ParameterType = TestParameterType>
class PopupPixelTest : public UiBrowserTest,
public testing::WithParamInterface<ParameterType> {
public:
PopupPixelTest() = default;
~PopupPixelTest() override = default;
static bool IsDarkModeOn(const ParameterType& param) {
return std::get<0>(param);
}
static bool IsBrowserLanguageRTL(const ParameterType& param) {
return std::get<1>(param);
}
static std::string GetTestSuffix(
const testing::TestParamInfo<ParameterType>& param_info) {
return base::StrCat(
{IsDarkModeOn(param_info.param) ? "Dark" : "Light",
IsBrowserLanguageRTL(param_info.param) ? "BrowserRTL" : "BrowserLTR"});
}
void SetUpCommandLine(base::CommandLine* command_line) override {
if (IsDarkModeOn(this->GetParam())) {
command_line->AppendSwitch(switches::kForceDarkMode);
}
}
void SetUpOnMainThread() override {
UiBrowserTest::SetUpOnMainThread();
base::i18n::SetRTLForTesting(IsBrowserLanguageRTL(this->GetParam()));
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
ON_CALL(controller(), GetWebContents())
.WillByDefault(testing::Return(web_contents));
ON_CALL(controller(), container_view())
.WillByDefault(testing::Return(web_contents->GetNativeView()));
}
void ShowUi(const std::string& name) override {
view_ = CreateView(controller());
}
bool VerifyUi() override {
if (!view_) {
return false;
}
views::Widget* widget = view_->GetWidget();
if (!widget) {
return false;
}
auto* test_info = testing::UnitTest::GetInstance()->current_test_info();
return VerifyPixelUi(widget, test_info->test_suite_name(),
test_info->name()) != ui::test::ActionResult::kFailed;
}
void WaitForUserDismissal() override {}
void TearDownOnMainThread() override {
EXPECT_CALL(controller_, ViewDestroyed);
view_ = nullptr;
UiBrowserTest::TearDownOnMainThread();
}
protected:
virtual View* CreateView(Controller& controlled) = 0;
Controller& controller() { return controller_; }
raw_ptr<View>& view() { return view_; }
private:
testing::NiceMock<Controller> controller_;
raw_ptr<View> view_ = nullptr;
};
} // namespace autofill
#endif // CHROME_BROWSER_UI_VIEWS_AUTOFILL_POPUP_POPUP_PIXEL_TEST_H_
|