Commit 6f95ef81 authored by mgiuca's avatar mgiuca Committed by Commit bot

Parameterized MixerTest to run both with and without field trial.

This runs the full suite of tests with the AppListMixer field trial set
to both "default" and "Blended", for full coverage of both code paths.

Also, MixerTest.Basic now has different expectations in the "Blended"
case, because the mixing behaviour has (deliberately) changed.

BUG=487494

Review URL: https://codereview.chromium.org/1128683005

Cr-Commit-Position: refs/heads/master@{#329605}
parent 6291cb72
...@@ -6,9 +6,11 @@ ...@@ -6,9 +6,11 @@
#include <string> #include <string>
#include "base/memory/scoped_vector.h" #include "base/memory/scoped_vector.h"
#include "base/metrics/field_trial.h"
#include "base/strings/string16.h" #include "base/strings/string16.h"
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/test/mock_entropy_provider.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "ui/app_list/app_list_model.h" #include "ui/app_list/app_list_model.h"
#include "ui/app_list/search/history_types.h" #include "ui/app_list/search/history_types.h"
...@@ -101,15 +103,21 @@ class TestSearchProvider : public SearchProvider { ...@@ -101,15 +103,21 @@ class TestSearchProvider : public SearchProvider {
DISALLOW_COPY_AND_ASSIGN(TestSearchProvider); DISALLOW_COPY_AND_ASSIGN(TestSearchProvider);
}; };
// TODO(mgiuca): Parameterize this test so it tests both the default and // Test is parameterized with bool. True enables the "Blended" field trial.
// "Blended" states for the AppListMixer field trial. class MixerTest : public testing::Test,
class MixerTest : public testing::Test { public testing::WithParamInterface<bool> {
public: public:
MixerTest() : is_voice_query_(false) {} MixerTest()
: is_voice_query_(false),
field_trial_list_(new base::MockEntropyProvider()) {}
~MixerTest() override {} ~MixerTest() override {}
// testing::Test overrides: // testing::Test overrides:
void SetUp() override { 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); results_.reset(new AppListModel::SearchResults);
providers_.push_back(new TestSearchProvider("app")); providers_.push_back(new TestSearchProvider("app"));
...@@ -180,36 +188,137 @@ class MixerTest : public testing::Test { ...@@ -180,36 +188,137 @@ class MixerTest : public testing::Test {
ScopedVector<TestSearchProvider> providers_; ScopedVector<TestSearchProvider> providers_;
base::FieldTrialList field_trial_list_;
DISALLOW_COPY_AND_ASSIGN(MixerTest); 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 { struct TestCase {
const size_t app_results; const size_t app_results;
const size_t omnibox_results; const size_t omnibox_results;
const size_t webstore_results; const size_t webstore_results;
const size_t people_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[] = { } kTestCases[] = {
{0, 0, 0, 0, ""}, {0, 0, 0, 0, "", ""},
{10, 0, 0, 0, "app0,app1,app2,app3"}, {10,
{0, 0, 10, 0, "webstore0,webstore1"}, 0,
{0, 0, 0, 10, "people0,people1"}, 0,
{4, 6, 0, 0, "app0,app1,app2,app3,omnibox0,omnibox1"}, 0,
{4, 6, 2, 0, "app0,app1,app2,app3,omnibox0,webstore0"}, "app0,app1,app2,app3",
{4, 6, 0, 2, "app0,app1,app2,app3,omnibox0,people0"}, "app0,app1,app2,app3,app4,app5,app6,app7,app8,app9"},
{10, 10, 10, 0, "app0,app1,app2,app3,omnibox0,webstore0"}, {0,
{0, 10, 0, 0, "omnibox0,omnibox1,omnibox2,omnibox3,omnibox4,omnibox5"}, 0,
{0, 10, 1, 0, "omnibox0,omnibox1,omnibox2,omnibox3,omnibox4,webstore0"}, 10,
{0, 10, 2, 0, "omnibox0,omnibox1,omnibox2,omnibox3,webstore0,webstore1"}, 0,
{1, 10, 0, 0, "app0,omnibox0,omnibox1,omnibox2,omnibox3,omnibox4"}, "webstore0,webstore1",
{2, 10, 0, 0, "app0,app1,omnibox0,omnibox1,omnibox2,omnibox3"}, "webstore0,webstore1,webstore2,webstore3,webstore4,webstore5,webstore6,"
{2, 10, 1, 0, "app0,app1,omnibox0,omnibox1,omnibox2,webstore0"}, "webstore7,webstore8,webstore9"},
{2, 10, 2, 0, "app0,app1,omnibox0,omnibox1,webstore0,webstore1"}, {0,
{2, 0, 2, 0, "app0,app1,webstore0,webstore1"}, 0,
{10, 0, 10, 10, "app0,app1,app2,app3,webstore0,webstore1"}, 0,
{10, 10, 10, 10, "app0,app1,app2,app3,omnibox0,webstore0"}, 10,
{0, 0, 0, 0, ""}, "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) { for (size_t i = 0; i < arraysize(kTestCases); ++i) {
...@@ -219,11 +328,13 @@ TEST_F(MixerTest, Basic) { ...@@ -219,11 +328,13 @@ TEST_F(MixerTest, Basic) {
people_provider()->set_count(kTestCases[i].people_results); people_provider()->set_count(kTestCases[i].people_results);
RunQuery(); 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"; const std::string dup = "dup";
// This gives "dup0,dup1,dup2". // This gives "dup0,dup1,dup2".
...@@ -245,7 +356,7 @@ TEST_F(MixerTest, RemoveDuplicates) { ...@@ -245,7 +356,7 @@ TEST_F(MixerTest, RemoveDuplicates) {
} }
// Tests that "known results" have priority over others. // Tests that "known results" have priority over others.
TEST_F(MixerTest, KnownResultsPriority) { TEST_P(MixerTest, KnownResultsPriority) {
// This gives omnibox 0 -- 5. // This gives omnibox 0 -- 5.
omnibox_provider()->set_count(6); omnibox_provider()->set_count(6);
...@@ -263,7 +374,7 @@ TEST_F(MixerTest, KnownResultsPriority) { ...@@ -263,7 +374,7 @@ TEST_F(MixerTest, KnownResultsPriority) {
GetResults()); GetResults());
} }
TEST_F(MixerTest, VoiceQuery) { TEST_P(MixerTest, VoiceQuery) {
omnibox_provider()->set_count(3); omnibox_provider()->set_count(3);
RunQuery(); RunQuery();
EXPECT_EQ("omnibox0,omnibox1,omnibox2", GetResults()); EXPECT_EQ("omnibox0,omnibox1,omnibox2", GetResults());
...@@ -285,7 +396,7 @@ TEST_F(MixerTest, VoiceQuery) { ...@@ -285,7 +396,7 @@ TEST_F(MixerTest, VoiceQuery) {
EXPECT_EQ("omnibox1,omnibox2,omnibox0", GetResults()); 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 // 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 // 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 // providers to do this, since they retrieve results from disparate and
...@@ -304,7 +415,7 @@ TEST_F(MixerTest, BadRelevanceRange) { ...@@ -304,7 +415,7 @@ TEST_F(MixerTest, BadRelevanceRange) {
EXPECT_EQ("people1,people0", GetResults()); EXPECT_EQ("people1,people0", GetResults());
} }
TEST_F(MixerTest, Publish) { TEST_P(MixerTest, Publish) {
scoped_ptr<SearchResult> result1(new TestSearchResult("app1", 0)); scoped_ptr<SearchResult> result1(new TestSearchResult("app1", 0));
scoped_ptr<SearchResult> result2(new TestSearchResult("app2", 0)); scoped_ptr<SearchResult> result2(new TestSearchResult("app2", 0));
scoped_ptr<SearchResult> result3(new TestSearchResult("app3", 0)); scoped_ptr<SearchResult> result3(new TestSearchResult("app3", 0));
...@@ -392,5 +503,7 @@ TEST_F(MixerTest, Publish) { ...@@ -392,5 +503,7 @@ TEST_F(MixerTest, Publish) {
TestSearchResult::GetInstanceId(ui_results.GetItemAt(2))); TestSearchResult::GetInstanceId(ui_results.GetItemAt(2)));
} }
INSTANTIATE_TEST_CASE_P(MixerTestInstance, MixerTest, testing::Bool());
} // namespace test } // namespace test
} // namespace app_list } // namespace app_list
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment