omnibox_controller_unittest.cc revision 868fa2fe829687343ffae624259930155e16dbd8
125b3c049e70834cf33790a28643ab058b507b35cBen Cheng// Copyright 2013 The Chromium Authors. All rights reserved.
225b3c049e70834cf33790a28643ab058b507b35cBen Cheng// Use of this source code is governed by a BSD-style license that can be
325b3c049e70834cf33790a28643ab058b507b35cBen Cheng// found in the LICENSE file.
425b3c049e70834cf33790a28643ab058b507b35cBen Cheng
525b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "base/prefs/pref_service.h"
625b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "chrome/browser/autocomplete/autocomplete_controller.h"
725b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "chrome/browser/autocomplete/autocomplete_provider.h"
825b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "chrome/browser/search/search.h"
925b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "chrome/browser/ui/omnibox/omnibox_controller.h"
1025b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "chrome/common/pref_names.h"
1125b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "chrome/test/base/testing_profile.h"
1225b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "testing/gtest/include/gtest/gtest.h"
1325b3c049e70834cf33790a28643ab058b507b35cBen Cheng
1425b3c049e70834cf33790a28643ab058b507b35cBen Chengclass OmniboxControllerTest : public testing::Test {
1525b3c049e70834cf33790a28643ab058b507b35cBen Cheng protected:
1625b3c049e70834cf33790a28643ab058b507b35cBen Cheng  OmniboxControllerTest();
1725b3c049e70834cf33790a28643ab058b507b35cBen Cheng  virtual ~OmniboxControllerTest();
1825b3c049e70834cf33790a28643ab058b507b35cBen Cheng
1925b3c049e70834cf33790a28643ab058b507b35cBen Cheng  void CreateController();
2025b3c049e70834cf33790a28643ab058b507b35cBen Cheng  void AssertProviders(int expected_providers);
2125b3c049e70834cf33790a28643ab058b507b35cBen Cheng
2225b3c049e70834cf33790a28643ab058b507b35cBen Cheng  PrefService* GetPrefs() { return profile_.GetPrefs(); }
2325b3c049e70834cf33790a28643ab058b507b35cBen Cheng  const ACProviders* GetAutocompleteProviders() const {
2425b3c049e70834cf33790a28643ab058b507b35cBen Cheng    return omnibox_controller_->autocomplete_controller()->providers();
2525b3c049e70834cf33790a28643ab058b507b35cBen Cheng  }
2625b3c049e70834cf33790a28643ab058b507b35cBen Cheng
2725b3c049e70834cf33790a28643ab058b507b35cBen Cheng private:
2825b3c049e70834cf33790a28643ab058b507b35cBen Cheng  TestingProfile profile_;
2925b3c049e70834cf33790a28643ab058b507b35cBen Cheng  scoped_ptr<OmniboxController> omnibox_controller_;
3025b3c049e70834cf33790a28643ab058b507b35cBen Cheng
3125b3c049e70834cf33790a28643ab058b507b35cBen Cheng  DISALLOW_COPY_AND_ASSIGN(OmniboxControllerTest);
3225b3c049e70834cf33790a28643ab058b507b35cBen Cheng};
3325b3c049e70834cf33790a28643ab058b507b35cBen Cheng
3425b3c049e70834cf33790a28643ab058b507b35cBen ChengOmniboxControllerTest::OmniboxControllerTest() {
3525b3c049e70834cf33790a28643ab058b507b35cBen Cheng}
3625b3c049e70834cf33790a28643ab058b507b35cBen Cheng
3725b3c049e70834cf33790a28643ab058b507b35cBen ChengOmniboxControllerTest::~OmniboxControllerTest() {
3825b3c049e70834cf33790a28643ab058b507b35cBen Cheng}
3925b3c049e70834cf33790a28643ab058b507b35cBen Cheng
4025b3c049e70834cf33790a28643ab058b507b35cBen Chengvoid OmniboxControllerTest::CreateController() {
4125b3c049e70834cf33790a28643ab058b507b35cBen Cheng  omnibox_controller_.reset(new OmniboxController(NULL, &profile_));
4225b3c049e70834cf33790a28643ab058b507b35cBen Cheng}
4325b3c049e70834cf33790a28643ab058b507b35cBen Cheng
4425b3c049e70834cf33790a28643ab058b507b35cBen Cheng// Checks that the list of autocomplete providers used by the OmniboxController
4525b3c049e70834cf33790a28643ab058b507b35cBen Cheng// matches the one in the |expected_providers| bit field.
4625b3c049e70834cf33790a28643ab058b507b35cBen Chengvoid OmniboxControllerTest::AssertProviders(int expected_providers) {
4725b3c049e70834cf33790a28643ab058b507b35cBen Cheng  const ACProviders* providers = GetAutocompleteProviders();
4825b3c049e70834cf33790a28643ab058b507b35cBen Cheng
4925b3c049e70834cf33790a28643ab058b507b35cBen Cheng  for (size_t i = 0; i < providers->size(); ++i) {
5025b3c049e70834cf33790a28643ab058b507b35cBen Cheng    // Ensure this is a provider we wanted.
5125b3c049e70834cf33790a28643ab058b507b35cBen Cheng    int type = providers->at(i)->type();
5225b3c049e70834cf33790a28643ab058b507b35cBen Cheng    ASSERT_TRUE(expected_providers & type);
5325b3c049e70834cf33790a28643ab058b507b35cBen Cheng
5425b3c049e70834cf33790a28643ab058b507b35cBen Cheng    // Remove it from expectations so we fail if it's there twice.
5525b3c049e70834cf33790a28643ab058b507b35cBen Cheng    expected_providers &= ~type;
5625b3c049e70834cf33790a28643ab058b507b35cBen Cheng  }
5725b3c049e70834cf33790a28643ab058b507b35cBen Cheng
5825b3c049e70834cf33790a28643ab058b507b35cBen Cheng  // Ensure we saw all the providers we expected.
5925b3c049e70834cf33790a28643ab058b507b35cBen Cheng  ASSERT_EQ(0, expected_providers);
6025b3c049e70834cf33790a28643ab058b507b35cBen Cheng}
6125b3c049e70834cf33790a28643ab058b507b35cBen Cheng
6225b3c049e70834cf33790a28643ab058b507b35cBen ChengTEST_F(OmniboxControllerTest, CheckDefaultAutocompleteProviders) {
6325b3c049e70834cf33790a28643ab058b507b35cBen Cheng  CreateController();
6425b3c049e70834cf33790a28643ab058b507b35cBen Cheng  // First collect the basic providers.
6525b3c049e70834cf33790a28643ab058b507b35cBen Cheng  int observed_providers = 0;
6625b3c049e70834cf33790a28643ab058b507b35cBen Cheng  const ACProviders* providers = GetAutocompleteProviders();
6725b3c049e70834cf33790a28643ab058b507b35cBen Cheng  for (size_t i = 0; i < providers->size(); ++i)
6825b3c049e70834cf33790a28643ab058b507b35cBen Cheng    observed_providers |= providers->at(i)->type();
6925b3c049e70834cf33790a28643ab058b507b35cBen Cheng  // Ensure we have at least one provider.
7025b3c049e70834cf33790a28643ab058b507b35cBen Cheng  ASSERT_NE(0, observed_providers);
7125b3c049e70834cf33790a28643ab058b507b35cBen Cheng
7225b3c049e70834cf33790a28643ab058b507b35cBen Cheng  // Ensure instant extended includes all the basic ones save for those that are
7325b3c049e70834cf33790a28643ab058b507b35cBen Cheng  // not expected to run in instant extended.
7425b3c049e70834cf33790a28643ab058b507b35cBen Cheng  int providers_with_instant_extended =
7525b3c049e70834cf33790a28643ab058b507b35cBen Cheng      observed_providers &
7625b3c049e70834cf33790a28643ab058b507b35cBen Cheng      ~AutocompleteProvider::TYPE_SHORTCUTS;
7725b3c049e70834cf33790a28643ab058b507b35cBen Cheng  // TODO(beaudoin): remove TYPE_SEARCH once it's no longer needed to pass
7825b3c049e70834cf33790a28643ab058b507b35cBen Cheng  // the Instant suggestion through via FinalizeInstantQuery.
7925b3c049e70834cf33790a28643ab058b507b35cBen Cheng  chrome::EnableInstantExtendedAPIForTesting();
8025b3c049e70834cf33790a28643ab058b507b35cBen Cheng  CreateController();
8125b3c049e70834cf33790a28643ab058b507b35cBen Cheng  AssertProviders(providers_with_instant_extended);
8225b3c049e70834cf33790a28643ab058b507b35cBen Cheng}
8325b3c049e70834cf33790a28643ab058b507b35cBen Cheng