blob: 65cc212b44a17bb459923d03713b0ef7989ca175 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/ui/browser_dialogs.h"
#include "chrome/test/base/browser_with_test_window_test.h"
#include "ui/views/bubble/bubble_dialog_model_host.h"
#include "ui/views/controls/textfield/textfield.h"
#include "ui/views/test/dialog_test.h"
#include "ui/views/test/widget_test.h"
#include "ui/views/widget/any_widget_observer.h"
#include "ui/views/window/dialog_delegate.h"
using WindowNamePromptTest = BrowserWithTestWindowTest;
namespace {
views::Widget* ShowPrompt(Browser* browser, gfx::NativeWindow context) {
views::NamedWidgetShownWaiter waiter(
views::test::AnyWidgetTestPasskey{},
views::BubbleDialogModelHost::kViewClassName);
chrome::ShowWindowNamePromptForTesting(browser, context);
return waiter.WaitIfNeededAndGet();
}
views::Textfield* FindTextfield(views::Widget* widget) {
return static_cast<views::Textfield*>(
views::test::AnyViewWithClassName(widget, "Textfield"));
}
void SetTextfieldContents(views::Widget* widget, const std::string& text) {
FindTextfield(widget)->SetText(base::UTF8ToUTF16(text));
}
std::string GetTextfieldContents(views::Widget* widget) {
return base::UTF16ToUTF8(FindTextfield(widget)->GetText());
}
TEST_F(WindowNamePromptTest, OpensWithInitialName) {
browser()->SetWindowUserTitle("foobar");
auto* widget = ShowPrompt(browser(), GetContext());
EXPECT_EQ(GetTextfieldContents(widget), "foobar");
views::test::CancelDialog(widget);
}
TEST_F(WindowNamePromptTest, AcceptNonemptySetsName) {
auto* widget = ShowPrompt(browser(), GetContext());
EXPECT_EQ(GetTextfieldContents(widget), "");
SetTextfieldContents(widget, "foo");
views::test::AcceptDialog(widget);
EXPECT_EQ(browser()->user_title(), "foo");
}
TEST_F(WindowNamePromptTest, AcceptEmptyClearsName) {
browser()->SetWindowUserTitle("foo");
auto* widget = ShowPrompt(browser(), GetContext());
EXPECT_EQ(GetTextfieldContents(widget), "foo");
SetTextfieldContents(widget, "");
views::test::AcceptDialog(widget);
EXPECT_EQ(browser()->user_title(), "");
}
TEST_F(WindowNamePromptTest, CancelDoesntTouchName) {
auto* widget = ShowPrompt(browser(), GetContext());
SetTextfieldContents(widget, "foo");
views::test::CancelDialog(widget);
EXPECT_EQ(browser()->user_title(), "");
}
} // namespace