| 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 8b8daad4a87968d99a46ff5009e256a0eec9b22e..248f0774b0e22d10cf98fdd3535027f050d1b417 100644
|
| --- a/ui/app_list/search/mixer_unittest.cc
|
| +++ b/ui/app_list/search/mixer_unittest.cc
|
| @@ -6,9 +6,11 @@
|
| #include <string>
|
|
|
| #include "base/memory/scoped_vector.h"
|
| +#include "base/metrics/field_trial.h"
|
| #include "base/strings/string16.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "base/test/mock_entropy_provider.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "ui/app_list/app_list_model.h"
|
| #include "ui/app_list/search/history_types.h"
|
| @@ -101,15 +103,21 @@ class TestSearchProvider : public SearchProvider {
|
| DISALLOW_COPY_AND_ASSIGN(TestSearchProvider);
|
| };
|
|
|
| -// TODO(mgiuca): Parameterize this test so it tests both the default and
|
| -// "Blended" states for the AppListMixer field trial.
|
| -class MixerTest : public testing::Test {
|
| +// Test is parameterized with bool. True enables the "Blended" field trial.
|
| +class MixerTest : public testing::Test,
|
| + public testing::WithParamInterface<bool> {
|
| public:
|
| - MixerTest() : is_voice_query_(false) {}
|
| + MixerTest()
|
| + : is_voice_query_(false),
|
| + field_trial_list_(new base::MockEntropyProvider()) {}
|
| ~MixerTest() override {}
|
|
|
| // testing::Test overrides:
|
| void SetUp() override {
|
| + // If the parameter is true, enable the field trial.
|
| + const char* field_trial_name = GetParam() ? "Blended" : "default";
|
| + base::FieldTrialList::CreateFieldTrial("AppListMixer", field_trial_name);
|
| +
|
| results_.reset(new AppListModel::SearchResults);
|
|
|
| providers_.push_back(new TestSearchProvider("app"));
|
| @@ -180,36 +188,137 @@ class MixerTest : public testing::Test {
|
|
|
| ScopedVector<TestSearchProvider> providers_;
|
|
|
| + base::FieldTrialList field_trial_list_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(MixerTest);
|
| };
|
|
|
| -TEST_F(MixerTest, Basic) {
|
| +TEST_P(MixerTest, Basic) {
|
| + // Note: Some cases in |expected_blended| have vastly more results than
|
| + // others, due to the "at least 6" mechanism. If it gets at least 6 results
|
| + // from all providers, it stops at 6. If not, it fetches potentially many more
|
| + // results from all providers. Not ideal, but currently by design.
|
| struct TestCase {
|
| const size_t app_results;
|
| const size_t omnibox_results;
|
| const size_t webstore_results;
|
| const size_t people_results;
|
| - const char* expected;
|
| + const char* expected_default; // Expected results with trial off.
|
| + const char* expected_blended; // Expected results with trial on.
|
| } kTestCases[] = {
|
| - {0, 0, 0, 0, ""},
|
| - {10, 0, 0, 0, "app0,app1,app2,app3"},
|
| - {0, 0, 10, 0, "webstore0,webstore1"},
|
| - {0, 0, 0, 10, "people0,people1"},
|
| - {4, 6, 0, 0, "app0,app1,app2,app3,omnibox0,omnibox1"},
|
| - {4, 6, 2, 0, "app0,app1,app2,app3,omnibox0,webstore0"},
|
| - {4, 6, 0, 2, "app0,app1,app2,app3,omnibox0,people0"},
|
| - {10, 10, 10, 0, "app0,app1,app2,app3,omnibox0,webstore0"},
|
| - {0, 10, 0, 0, "omnibox0,omnibox1,omnibox2,omnibox3,omnibox4,omnibox5"},
|
| - {0, 10, 1, 0, "omnibox0,omnibox1,omnibox2,omnibox3,omnibox4,webstore0"},
|
| - {0, 10, 2, 0, "omnibox0,omnibox1,omnibox2,omnibox3,webstore0,webstore1"},
|
| - {1, 10, 0, 0, "app0,omnibox0,omnibox1,omnibox2,omnibox3,omnibox4"},
|
| - {2, 10, 0, 0, "app0,app1,omnibox0,omnibox1,omnibox2,omnibox3"},
|
| - {2, 10, 1, 0, "app0,app1,omnibox0,omnibox1,omnibox2,webstore0"},
|
| - {2, 10, 2, 0, "app0,app1,omnibox0,omnibox1,webstore0,webstore1"},
|
| - {2, 0, 2, 0, "app0,app1,webstore0,webstore1"},
|
| - {10, 0, 10, 10, "app0,app1,app2,app3,webstore0,webstore1"},
|
| - {10, 10, 10, 10, "app0,app1,app2,app3,omnibox0,webstore0"},
|
| - {0, 0, 0, 0, ""},
|
| + {0, 0, 0, 0, "", ""},
|
| + {10,
|
| + 0,
|
| + 0,
|
| + 0,
|
| + "app0,app1,app2,app3",
|
| + "app0,app1,app2,app3,app4,app5,app6,app7,app8,app9"},
|
| + {0,
|
| + 0,
|
| + 10,
|
| + 0,
|
| + "webstore0,webstore1",
|
| + "webstore0,webstore1,webstore2,webstore3,webstore4,webstore5,webstore6,"
|
| + "webstore7,webstore8,webstore9"},
|
| + {0,
|
| + 0,
|
| + 0,
|
| + 10,
|
| + "people0,people1",
|
| + "people0,people1,people2,people3,people4,people5,people6,people7,"
|
| + "people8,people9"},
|
| + {4,
|
| + 6,
|
| + 0,
|
| + 0,
|
| + "app0,app1,app2,app3,omnibox0,omnibox1",
|
| + "app0,omnibox0,app1,omnibox1,app2,omnibox2,app3,omnibox3"},
|
| + {4,
|
| + 6,
|
| + 2,
|
| + 0,
|
| + "app0,app1,app2,app3,omnibox0,webstore0",
|
| + "app0,omnibox0,app1,omnibox1,app2,omnibox2,app3,omnibox3,webstore0,"
|
| + "webstore1"},
|
| + {4,
|
| + 6,
|
| + 0,
|
| + 2,
|
| + "app0,app1,app2,app3,omnibox0,people0",
|
| + "app0,omnibox0,people0,app1,omnibox1,people1,app2,omnibox2,app3,"
|
| + "omnibox3"},
|
| + {10,
|
| + 10,
|
| + 10,
|
| + 0,
|
| + "app0,app1,app2,app3,omnibox0,webstore0",
|
| + "app0,omnibox0,app1,omnibox1,app2,omnibox2,app3,omnibox3,webstore0,"
|
| + "webstore1"},
|
| + {0,
|
| + 10,
|
| + 0,
|
| + 0,
|
| + "omnibox0,omnibox1,omnibox2,omnibox3,omnibox4,omnibox5",
|
| + "omnibox0,omnibox1,omnibox2,omnibox3,omnibox4,omnibox5,omnibox6,"
|
| + "omnibox7,omnibox8,omnibox9"},
|
| + {0,
|
| + 10,
|
| + 1,
|
| + 0,
|
| + "omnibox0,omnibox1,omnibox2,omnibox3,omnibox4,webstore0",
|
| + "omnibox0,omnibox1,omnibox2,omnibox3,webstore0,omnibox4,omnibox5,"
|
| + "omnibox6,omnibox7,omnibox8,omnibox9"},
|
| + {0,
|
| + 10,
|
| + 2,
|
| + 0,
|
| + "omnibox0,omnibox1,omnibox2,omnibox3,webstore0,webstore1",
|
| + "omnibox0,omnibox1,omnibox2,omnibox3,webstore0,webstore1"},
|
| + {1,
|
| + 10,
|
| + 0,
|
| + 0,
|
| + "app0,omnibox0,omnibox1,omnibox2,omnibox3,omnibox4",
|
| + "app0,omnibox0,omnibox1,omnibox2,omnibox3,omnibox4,omnibox5,omnibox6,"
|
| + "omnibox7,omnibox8,omnibox9"},
|
| + {2,
|
| + 10,
|
| + 0,
|
| + 0,
|
| + "app0,app1,omnibox0,omnibox1,omnibox2,omnibox3",
|
| + "app0,omnibox0,app1,omnibox1,omnibox2,omnibox3"},
|
| + {2,
|
| + 10,
|
| + 1,
|
| + 0,
|
| + "app0,app1,omnibox0,omnibox1,omnibox2,webstore0",
|
| + "app0,omnibox0,app1,omnibox1,omnibox2,omnibox3,webstore0"},
|
| + {2,
|
| + 10,
|
| + 2,
|
| + 0,
|
| + "app0,app1,omnibox0,omnibox1,webstore0,webstore1",
|
| + "app0,omnibox0,app1,omnibox1,omnibox2,omnibox3,webstore0,webstore1"},
|
| + {2,
|
| + 0,
|
| + 2,
|
| + 0,
|
| + "app0,app1,webstore0,webstore1",
|
| + "app0,app1,webstore0,webstore1"},
|
| + {10,
|
| + 0,
|
| + 10,
|
| + 10,
|
| + "app0,app1,app2,app3,webstore0,webstore1",
|
| + "app0,people0,app1,people1,app2,app3,webstore0,webstore1"},
|
| + {10,
|
| + 10,
|
| + 10,
|
| + 10,
|
| + "app0,app1,app2,app3,omnibox0,webstore0",
|
| + "app0,omnibox0,people0,app1,omnibox1,people1,app2,omnibox2,app3,"
|
| + "omnibox3,webstore0,webstore1"},
|
| + {0, 0, 0, 0, "", ""},
|
| };
|
|
|
| for (size_t i = 0; i < arraysize(kTestCases); ++i) {
|
| @@ -219,11 +328,13 @@ TEST_F(MixerTest, Basic) {
|
| people_provider()->set_count(kTestCases[i].people_results);
|
| RunQuery();
|
|
|
| - EXPECT_EQ(kTestCases[i].expected, GetResults()) << "Case " << i;
|
| + const char* expected = GetParam() ? kTestCases[i].expected_blended
|
| + : kTestCases[i].expected_default;
|
| + EXPECT_EQ(expected, GetResults()) << "Case " << i;
|
| }
|
| }
|
|
|
| -TEST_F(MixerTest, RemoveDuplicates) {
|
| +TEST_P(MixerTest, RemoveDuplicates) {
|
| const std::string dup = "dup";
|
|
|
| // This gives "dup0,dup1,dup2".
|
| @@ -245,7 +356,7 @@ TEST_F(MixerTest, RemoveDuplicates) {
|
| }
|
|
|
| // Tests that "known results" have priority over others.
|
| -TEST_F(MixerTest, KnownResultsPriority) {
|
| +TEST_P(MixerTest, KnownResultsPriority) {
|
| // This gives omnibox 0 -- 5.
|
| omnibox_provider()->set_count(6);
|
|
|
| @@ -263,7 +374,7 @@ TEST_F(MixerTest, KnownResultsPriority) {
|
| GetResults());
|
| }
|
|
|
| -TEST_F(MixerTest, VoiceQuery) {
|
| +TEST_P(MixerTest, VoiceQuery) {
|
| omnibox_provider()->set_count(3);
|
| RunQuery();
|
| EXPECT_EQ("omnibox0,omnibox1,omnibox2", GetResults());
|
| @@ -285,7 +396,7 @@ TEST_F(MixerTest, VoiceQuery) {
|
| EXPECT_EQ("omnibox1,omnibox2,omnibox0", GetResults());
|
| }
|
|
|
| -TEST_F(MixerTest, BadRelevanceRange) {
|
| +TEST_P(MixerTest, BadRelevanceRange) {
|
| // This gives relevance scores: (10.0, 0.0). Even though providers are
|
| // supposed to give scores within the range [0.0, 1.0], we cannot rely on
|
| // providers to do this, since they retrieve results from disparate and
|
| @@ -304,7 +415,7 @@ TEST_F(MixerTest, BadRelevanceRange) {
|
| EXPECT_EQ("people1,people0", GetResults());
|
| }
|
|
|
| -TEST_F(MixerTest, Publish) {
|
| +TEST_P(MixerTest, Publish) {
|
| scoped_ptr<SearchResult> result1(new TestSearchResult("app1", 0));
|
| scoped_ptr<SearchResult> result2(new TestSearchResult("app2", 0));
|
| scoped_ptr<SearchResult> result3(new TestSearchResult("app3", 0));
|
| @@ -392,5 +503,7 @@ TEST_F(MixerTest, Publish) {
|
| TestSearchResult::GetInstanceId(ui_results.GetItemAt(2)));
|
| }
|
|
|
| +INSTANTIATE_TEST_CASE_P(MixerTestInstance, MixerTest, testing::Bool());
|
| +
|
| } // namespace test
|
| } // namespace app_list
|
|
|