1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/ui/app_list/search/omnibox_result.h"
6 
7 #include <memory>
8 
9 #include "ash/public/cpp/app_list/app_list_features.h"
10 #include "base/macros.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "chrome/browser/ui/app_list/app_list_test_util.h"
13 #include "chrome/browser/ui/app_list/test/test_app_list_controller_delegate.h"
14 #include "chrome/test/base/testing_profile.h"
15 #include "components/omnibox/browser/autocomplete_match.h"
16 #include "components/omnibox/browser/autocomplete_match_type.h"
17 #include "components/search_engines/template_url.h"
18 
19 namespace app_list {
20 namespace test {
21 
22 namespace {
23 
24 const char kFullQuery[] = "Hello World";
25 const char kExampleDescription[] = "A website";
26 const char kExampleUrl[] = "http://example.com/hello";
27 const int kRelevance = 750;
28 const double kAppListRelevance = 0.5;
29 
30 const char kExampleKeyword[] = "example.com";
31 
32 }  // namespace
33 
34 class OmniboxResultTest : public AppListTestBase {
35  public:
OmniboxResultTest()36   OmniboxResultTest() {}
~OmniboxResultTest()37   ~OmniboxResultTest() override {}
38 
39   // AppListTestBase overrides:
SetUp()40   void SetUp() override {
41     AppListTestBase::SetUp();
42 
43     app_list_controller_delegate_ =
44         std::make_unique<::test::TestAppListControllerDelegate>();
45   }
46 
CreateOmniboxResult(const std::string & original_query,int relevance,const std::string & destination_url,const std::string & contents,const std::string & description,AutocompleteMatchType::Type type,const std::string & keyword)47   std::unique_ptr<OmniboxResult> CreateOmniboxResult(
48       const std::string& original_query,
49       int relevance,
50       const std::string& destination_url,
51       const std::string& contents,
52       const std::string& description,
53       AutocompleteMatchType::Type type,
54       const std::string& keyword) {
55     AutocompleteMatch match;
56     match.search_terms_args = std::make_unique<TemplateURLRef::SearchTermsArgs>(
57         base::UTF8ToUTF16(original_query));
58     match.search_terms_args->original_query = base::UTF8ToUTF16(original_query);
59     match.relevance = relevance;
60     match.destination_url = GURL(destination_url);
61     match.contents = base::UTF8ToUTF16(contents);
62     match.description = base::UTF8ToUTF16(description);
63     match.type = type;
64     match.keyword = base::UTF8ToUTF16(keyword);
65 
66     return std::make_unique<OmniboxResult>(profile_.get(),
67                                            app_list_controller_delegate_.get(),
68                                            nullptr, match, false);
69   }
70 
GetLastOpenedUrl() const71   const GURL& GetLastOpenedUrl() const {
72     return app_list_controller_delegate_->last_opened_url();
73   }
74 
75  private:
76   std::unique_ptr<::test::TestAppListControllerDelegate>
77       app_list_controller_delegate_;
78 
79   DISALLOW_COPY_AND_ASSIGN(OmniboxResultTest);
80 };
81 
TEST_F(OmniboxResultTest,Basic)82 TEST_F(OmniboxResultTest, Basic) {
83   std::unique_ptr<OmniboxResult> result = CreateOmniboxResult(
84       kFullQuery, kRelevance, kExampleUrl, kFullQuery, kExampleDescription,
85       AutocompleteMatchType::HISTORY_URL, kExampleKeyword);
86 
87   EXPECT_EQ(base::ASCIIToUTF16(kExampleDescription), result->title());
88   EXPECT_EQ(base::ASCIIToUTF16(kFullQuery), result->details());
89   EXPECT_EQ(kAppListRelevance, result->relevance());
90 
91   result->Open(0);
92   EXPECT_EQ(kExampleUrl, GetLastOpenedUrl().spec());
93 }
94 
95 }  // namespace test
96 }  // namespace app_list
97