// Copyright 2017 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_OMNIBOX_TEST_OMNIBOX_VIEW_H_
#define CHROME_BROWSER_UI_OMNIBOX_TEST_OMNIBOX_VIEW_H_

#include <stddef.h>

#include <string>

#include "chrome/browser/ui/omnibox/omnibox_view.h"
#include "ui/gfx/range/range.h"

struct AutocompleteMatch;

// Fake implementation of OmniboxView for use in tests.
class TestOmniboxView : public OmniboxView {
 public:
  explicit TestOmniboxView(OmniboxController* controller)
      : OmniboxView(controller) {}

  TestOmniboxView(const TestOmniboxView&) = delete;
  TestOmniboxView& operator=(const TestOmniboxView&) = delete;

  const std::u16string& inline_autocompletion() const {
    return inline_autocompletion_;
  }

  static State CreateState(std::string text, size_t sel_start, size_t sel_end);

  // OmniboxView:
  void Update() override {}
  std::u16string GetText() const override;
  void SetWindowTextAndCaretPos(const std::u16string& text,
                                size_t caret_pos,
                                bool update_popup,
                                bool notify_text_changed) override;
  void SetCaretPos(size_t caret_pos) override {}
  void SetAdditionalText(const std::u16string& text) override {}
  void EnterKeywordModeForDefaultSearchProvider() override {}
  bool IsSelectAll() const override;
  gfx::Range GetSelectionBounds() const override;
  void SetSelectionBounds(gfx::Range selection) override;
  bool HasSelection() const override;
  void SelectAll(bool reversed) override;
  void UpdatePopup() override {}
  void SetFocus(bool is_user_initiated) override {}
  void ApplyFocusRingToAimButton(bool focus_aim) override {}
  bool AimButtonVisible() const override;
  void ApplyCaretVisibility() override {}
  void OnTemporaryTextMaybeChanged(const std::u16string& display_text,
                                   const AutocompleteMatch& match,
                                   bool save_original_selection,
                                   bool notify_text_changed) override;
  void OnInlineAutocompleteTextMaybeChanged(
      const std::u16string& user_text,
      const std::u16string& inline_autocompletion) override;
  void OnInlineAutocompleteTextCleared() override;
  void OnRevertTemporaryText(const std::u16string& display_text,
                             const AutocompleteMatch& match) override;
  void OnBeforePossibleChange() override {}
  bool OnAfterPossibleChange(bool allow_keyword_ui_change) override;
  int GetOmniboxTextLength() const override;
  void EmphasizeURLComponents() override {}
  void SetEmphasis(bool emphasize, const gfx::Range& range) override {}
  void UpdateSchemeStyle(const gfx::Range& range) override {}
  using OmniboxView::GetStateChanges;

 private:
  std::u16string text_;
  std::u16string inline_autocompletion_;
  gfx::Range selection_;
  gfx::Range saved_temporary_selection_;
};

#endif  // CHROME_BROWSER_UI_OMNIBOX_TEST_OMNIBOX_VIEW_H_
