15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/search/search.h"
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/metrics/field_trial.h"
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/metrics/statistics_recorder.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/variations/entropy_provider.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace chrome {
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class EmbeddedSearchFieldTrialTest : public testing::Test {
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protected:
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void SetUp() {
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    field_trial_list_.reset(new base::FieldTrialList(
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        new metrics::SHA1EntropyProvider("42")));
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    base::StatisticsRecorder::Initialize();
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private:
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<base::FieldTrialList> field_trial_list_;
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoEmptyAndValid) {
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  FieldTrialFlags flags;
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(GetFieldTrialInfo(&flags));
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0ul, flags.size());
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                     "Group77"));
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(GetFieldTrialInfo(&flags));
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0ul, flags.size());
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoInvalidNumber) {
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  FieldTrialFlags flags;
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                     "Group77.2"));
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(GetFieldTrialInfo(&flags));
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0ul, flags.size());
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoInvalidName) {
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  FieldTrialFlags flags;
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                     "Invalid77"));
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(GetFieldTrialInfo(&flags));
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0ul, flags.size());
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoValidGroup) {
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  FieldTrialFlags flags;
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                     "Group77"));
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(GetFieldTrialInfo(&flags));
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0ul, flags.size());
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoValidFlag) {
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  FieldTrialFlags flags;
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                     "Group77 foo:6"));
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(GetFieldTrialInfo(&flags));
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(1ul, flags.size());
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoNewName) {
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  FieldTrialFlags flags;
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                     "Group77 foo:6"));
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(GetFieldTrialInfo(&flags));
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(1ul, flags.size());
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoNewNameOverridesOld) {
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  FieldTrialFlags flags;
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                     "Group77 foo:6"));
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended",
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                     "Group78 foo:5"));
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(GetFieldTrialInfo(&flags));
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(1ul, flags.size());
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoLotsOfFlags) {
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  FieldTrialFlags flags;
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "EmbeddedSearch", "Group77 bar:1 baz:7 cat:dogs"));
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(GetFieldTrialInfo(&flags));
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(3ul, flags.size());
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(true, GetBoolValueForFlagWithDefault("bar", false, flags));
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(7ul, GetUInt64ValueForFlagWithDefault("baz", 0, flags));
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ("dogs",
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            GetStringValueForFlagWithDefault("cat", std::string(), flags));
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ("default",
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            GetStringValueForFlagWithDefault("moose", "default", flags));
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoDisabled) {
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  FieldTrialFlags flags;
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "EmbeddedSearch", "Group77 bar:1 baz:7 cat:dogs DISABLED"));
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_FALSE(GetFieldTrialInfo(&flags));
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0ul, flags.size());
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoControlFlags) {
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  FieldTrialFlags flags;
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "EmbeddedSearch", "Control77 bar:1 baz:7 cat:dogs"));
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(GetFieldTrialInfo(&flags));
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(3ul, flags.size());
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)typedef EmbeddedSearchFieldTrialTest ShouldHideTopVerbatimTest;
1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(ShouldHideTopVerbatimTest, DoNotHideByDefault) {
1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                                     "Control"));
1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_FALSE(ShouldHideTopVerbatimMatch());
1396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(ShouldHideTopVerbatimTest, DoNotHideInInstantExtended) {
1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                                     "Group1"));
1446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_FALSE(ShouldHideTopVerbatimMatch());
1456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(ShouldHideTopVerbatimTest, EnableByFlagInInstantExtended) {
1486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
1496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                                     "Group1 hide_verbatim:1"));
1506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_TRUE(ShouldHideTopVerbatimMatch());
1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(ShouldHideTopVerbatimTest, EnableByFlagOutsideInstantExtended) {
1546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
1556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      "EmbeddedSearch", "Controll1 hide_verbatim:1"));
1566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_TRUE(ShouldHideTopVerbatimMatch());
1576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(ShouldHideTopVerbatimTest, DisableByFlag) {
1606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch",
1616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                                     "Group1 hide_verbatim:0"));
1626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_FALSE(ShouldHideTopVerbatimMatch());
1636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace chrome
166