// 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.
#import "ios/chrome/browser/ui/omnibox/omnibox_view_ios.h"
#import <stddef.h>
#import <string>
#import <utility>
#import "base/functional/callback_helpers.h"
#import "base/memory/raw_ptr.h"
#import "base/strings/string_util.h"
#import "base/strings/utf_string_conversions.h"
#import "base/test/scoped_feature_list.h"
#import "base/test/task_environment.h"
#import "build/build_config.h"
#import "components/bookmarks/browser/bookmark_model.h"
#import "components/omnibox/browser/autocomplete_match.h"
#import "components/omnibox/browser/omnibox_controller.h"
#import "components/omnibox/browser/test_omnibox_client.h"
#import "components/omnibox/browser/test_omnibox_edit_model.h"
#import "components/omnibox/browser/test_omnibox_view.h"
#import "ios/chrome/browser/ui/omnibox/omnibox_view_consumer.h"
#import "testing/platform_test.h"
#import "third_party/ocmock/OCMock/OCMock.h"
#import "third_party/ocmock/gtest_support.h"
namespace {
class OmniboxViewIOSTest : public PlatformTest {
public:
OmniboxViewIOSTest() {
textfield_ = [[OmniboxTextFieldIOS alloc] init];
auto omnibox_client = std::make_unique<TestOmniboxClient>();
omnibox_client_ = omnibox_client.get();
mock_consumer_ =
[OCMockObject mockForProtocol:@protocol(OmniboxViewConsumer)];
view_ = std::make_unique<OmniboxViewIOS>(
textfield_, std::move(omnibox_client), /*browser_state=*/nullptr,
/*omnibox_focuser=*/nil, /*focus_delegate=*/nil,
/*toolbar_commands_handler=*/nil, mock_consumer_);
view_->controller()->SetEditModelForTesting(
std::make_unique<TestOmniboxEditModel>(view_->controller(), view_.get(),
/*pref_service=*/nullptr));
}
~OmniboxViewIOSTest() override { omnibox_client_ = nullptr; }
protected:
base::test::TaskEnvironment task_environment_;
OmniboxTextFieldIOS* textfield_;
raw_ptr<TestOmniboxClient> omnibox_client_;
OCMockObject<OmniboxViewConsumer>* mock_consumer_;
std::unique_ptr<OmniboxViewIOS> view_;
};
// Tests that reverting all edits restore the thumbnail after deletion.
TEST_F(OmniboxViewIOSTest, RevertThumbnailEdit) {
UIImage* image = [[UIImage alloc] init];
// Add a thumbnail.
OCMExpect([mock_consumer_ setThumbnailImage:image]);
view_->SetThumbnailImage(image);
// Remove the thumbnail.
OCMExpect([mock_consumer_ setThumbnailImage:nil]);
view_->RemoveThumbnail();
// Revert edits.
OCMExpect([mock_consumer_ setThumbnailImage:image]);
view_->RevertAll();
EXPECT_OCMOCK_VERIFY(mock_consumer_);
}
} // namespace