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