Index: ui/app_list/search/mixer_unittest.cc |
diff --git a/ui/app_list/search/mixer_unittest.cc b/ui/app_list/search/mixer_unittest.cc |
index 2b1d79c5f7eecfd34e625f06ddfb6ca73c90d145..4518c299e22b7f51ecdb280d1851f4dd77e94390 100644 |
--- a/ui/app_list/search/mixer_unittest.cc |
+++ b/ui/app_list/search/mixer_unittest.cc |
@@ -2,6 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include <set> |
#include <string> |
#include "base/memory/scoped_vector.h" |
@@ -28,6 +29,8 @@ class TestSearchResult : public SearchResult { |
} |
~TestSearchResult() override {} |
+ using SearchResult::set_voice_result; |
+ |
// SearchResult overrides: |
void Open(int event_flags) override {} |
void InvokeAction(int action_index, int event_flags) override {} |
@@ -64,24 +67,30 @@ class TestSearchProvider : public SearchProvider { |
const std::string id = |
base::StringPrintf("%s%d", prefix_.c_str(), static_cast<int>(i)); |
const double relevance = 1.0 - i / 10.0; |
- Add(scoped_ptr<SearchResult>(new TestSearchResult(id, relevance)).Pass()); |
+ TestSearchResult* result = new TestSearchResult(id, relevance); |
+ if (voice_result_indices.find(i) != voice_result_indices.end()) |
+ result->set_voice_result(true); |
+ Add(scoped_ptr<SearchResult>(result).Pass()); |
} |
} |
void Stop() override {} |
void set_prefix(const std::string& prefix) { prefix_ = prefix; } |
void set_count(size_t count) { count_ = count; } |
+ void set_as_voice_result(size_t index) { voice_result_indices.insert(index); } |
private: |
std::string prefix_; |
size_t count_; |
+ // Indices of results that will have the |voice_result| flag set. |
+ std::set<size_t> voice_result_indices; |
DISALLOW_COPY_AND_ASSIGN(TestSearchProvider); |
}; |
class MixerTest : public testing::Test { |
public: |
- MixerTest() {} |
+ MixerTest() : is_voice_query_(false) {} |
~MixerTest() override {} |
// testing::Test overrides: |
@@ -93,6 +102,8 @@ class MixerTest : public testing::Test { |
providers_.push_back(new TestSearchProvider("webstore")); |
providers_.push_back(new TestSearchProvider("people")); |
+ is_voice_query_ = false; |
+ |
mixer_.reset(new Mixer(results_.get())); |
mixer_->Init(); |
mixer_->AddProviderToGroup(Mixer::MAIN_GROUP, providers_[0]); |
@@ -109,7 +120,7 @@ class MixerTest : public testing::Test { |
providers_[i]->Stop(); |
} |
- mixer_->MixAndPublish(KnownResults()); |
+ mixer_->MixAndPublish(is_voice_query_, KnownResults()); |
} |
std::string GetResults() const { |
@@ -130,10 +141,17 @@ class MixerTest : public testing::Test { |
TestSearchProvider* webstore_provider() { return providers_[2]; } |
TestSearchProvider* people_provider() { return providers_[3]; } |
+ // Sets whether test runs should be treated as a voice query. |
+ void set_is_voice_query(bool is_voice_query) { |
+ is_voice_query_ = is_voice_query; |
+ } |
+ |
private: |
scoped_ptr<Mixer> mixer_; |
scoped_ptr<AppListModel::SearchResults> results_; |
+ bool is_voice_query_; |
+ |
ScopedVector<TestSearchProvider> providers_; |
DISALLOW_COPY_AND_ASSIGN(MixerTest); |
@@ -200,6 +218,28 @@ TEST_F(MixerTest, RemoveDuplicates) { |
EXPECT_EQ("dup0,dup1,dup2", GetResults()); |
} |
+TEST_F(MixerTest, VoiceQuery) { |
+ omnibox_provider()->set_count(3); |
+ RunQuery(); |
+ EXPECT_EQ("omnibox0,omnibox1,omnibox2", GetResults()); |
+ |
+ // Set "omnibox1" as a voice result. Do not expect any changes (as this is not |
+ // a voice query). |
+ omnibox_provider()->set_as_voice_result(1); |
+ RunQuery(); |
+ EXPECT_EQ("omnibox0,omnibox1,omnibox2", GetResults()); |
+ |
+ // Perform a voice query. Expect voice result first. |
+ set_is_voice_query(true); |
+ RunQuery(); |
+ EXPECT_EQ("omnibox1,omnibox0,omnibox2", GetResults()); |
+ |
+ // All voice results should appear before non-voice results. |
+ omnibox_provider()->set_as_voice_result(2); |
+ RunQuery(); |
+ EXPECT_EQ("omnibox1,omnibox2,omnibox0", GetResults()); |
+} |
+ |
TEST_F(MixerTest, Publish) { |
scoped_ptr<SearchResult> result1(new TestSearchResult("app1", 0)); |
scoped_ptr<SearchResult> result2(new TestSearchResult("app2", 0)); |