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 "components/search/search.h"
6
7#include "base/metrics/field_trial.h"
8#include "base/metrics/statistics_recorder.h"
9#include "components/variations/entropy_provider.h"
10#include "testing/gtest/include/gtest/gtest.h"
11
12namespace chrome {
13
14class EmbeddedSearchFieldTrialTest : public testing::Test {
15 protected:
16  virtual void SetUp() {
17    field_trial_list_.reset(new base::FieldTrialList(
18        new metrics::SHA1EntropyProvider("42")));
19    base::StatisticsRecorder::Initialize();
20  }
21
22 private:
23  scoped_ptr<base::FieldTrialList> field_trial_list_;
24};
25
26TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoEmptyAndValid) {
27  FieldTrialFlags flags;
28
29  EXPECT_TRUE(GetFieldTrialInfo(&flags));
30  EXPECT_EQ(0ul, flags.size());
31
32  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
33                                                     "Group77"));
34  EXPECT_TRUE(GetFieldTrialInfo(&flags));
35  EXPECT_EQ(0ul, flags.size());
36}
37
38TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoInvalidNumber) {
39  FieldTrialFlags flags;
40
41  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
42                                                     "Group77.2"));
43  EXPECT_TRUE(GetFieldTrialInfo(&flags));
44  EXPECT_EQ(0ul, flags.size());
45}
46
47TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoInvalidName) {
48  FieldTrialFlags flags;
49
50  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
51                                                     "Invalid77"));
52  EXPECT_TRUE(GetFieldTrialInfo(&flags));
53  EXPECT_EQ(0ul, flags.size());
54}
55
56TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoValidGroup) {
57  FieldTrialFlags flags;
58
59  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
60                                                     "Group77"));
61  EXPECT_TRUE(GetFieldTrialInfo(&flags));
62  EXPECT_EQ(0ul, flags.size());
63}
64
65TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoValidFlag) {
66  FieldTrialFlags flags;
67
68  EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
69  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
70                                                     "Group77 foo:6"));
71  EXPECT_TRUE(GetFieldTrialInfo(&flags));
72  EXPECT_EQ(1ul, flags.size());
73  EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
74}
75
76TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoNewName) {
77  FieldTrialFlags flags;
78
79  EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
80  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
81                                                     "Group77 foo:6"));
82  EXPECT_TRUE(GetFieldTrialInfo(&flags));
83  EXPECT_EQ(1ul, flags.size());
84  EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
85}
86
87TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoNewNameOverridesOld) {
88  FieldTrialFlags flags;
89
90  EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
91  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
92                                                     "Group77 foo:6"));
93  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended",
94                                                     "Group78 foo:5"));
95  EXPECT_TRUE(GetFieldTrialInfo(&flags));
96  EXPECT_EQ(1ul, flags.size());
97  EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
98}
99
100TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoLotsOfFlags) {
101  FieldTrialFlags flags;
102
103  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
104      "EmbeddedSearch", "Group77 bar:1 baz:7 cat:dogs"));
105  EXPECT_TRUE(GetFieldTrialInfo(&flags));
106  EXPECT_EQ(3ul, flags.size());
107  EXPECT_EQ(true, GetBoolValueForFlagWithDefault("bar", false, flags));
108  EXPECT_EQ(7ul, GetUInt64ValueForFlagWithDefault("baz", 0, flags));
109  EXPECT_EQ("dogs",
110            GetStringValueForFlagWithDefault("cat", std::string(), flags));
111  EXPECT_EQ("default",
112            GetStringValueForFlagWithDefault("moose", "default", flags));
113}
114
115TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoDisabled) {
116  FieldTrialFlags flags;
117
118  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
119      "EmbeddedSearch", "Group77 bar:1 baz:7 cat:dogs DISABLED"));
120  EXPECT_FALSE(GetFieldTrialInfo(&flags));
121  EXPECT_EQ(0ul, flags.size());
122}
123
124TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoControlFlags) {
125  FieldTrialFlags flags;
126
127  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
128      "EmbeddedSearch", "Control77 bar:1 baz:7 cat:dogs"));
129  EXPECT_TRUE(GetFieldTrialInfo(&flags));
130  EXPECT_EQ(3ul, flags.size());
131}
132
133typedef EmbeddedSearchFieldTrialTest ShouldHideTopVerbatimTest;
134
135TEST_F(ShouldHideTopVerbatimTest, DoNotHideByDefault) {
136  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
137                                                     "Control"));
138  EXPECT_FALSE(ShouldHideTopVerbatimMatch());
139}
140
141TEST_F(ShouldHideTopVerbatimTest, DoNotHideInInstantExtended) {
142  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
143                                                     "Group1"));
144  EXPECT_FALSE(ShouldHideTopVerbatimMatch());
145}
146
147TEST_F(ShouldHideTopVerbatimTest, EnableByFlagInInstantExtended) {
148  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
149                                                     "Group1 hide_verbatim:1"));
150  EXPECT_TRUE(ShouldHideTopVerbatimMatch());
151}
152
153TEST_F(ShouldHideTopVerbatimTest, EnableByFlagOutsideInstantExtended) {
154  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
155      "EmbeddedSearch", "Controll1 hide_verbatim:1"));
156  EXPECT_TRUE(ShouldHideTopVerbatimMatch());
157}
158
159TEST_F(ShouldHideTopVerbatimTest, DisableByFlag) {
160  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
161                                                     "Group1 hide_verbatim:0"));
162  EXPECT_FALSE(ShouldHideTopVerbatimMatch());
163}
164
165}  // namespace chrome
166