1 // Copyright 2016 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 "chrome/browser/android/contextualsearch/contextual_search_field_trial.h"
6 
7 #include <memory>
8 
9 #include "base/macros.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 
12 // Tests ContextualSearchFieldTrial class.
13 class ContextualSearchFieldTrialTest : public testing::Test {
14  public:
ContextualSearchFieldTrialTest()15   ContextualSearchFieldTrialTest() {}
~ContextualSearchFieldTrialTest()16   ~ContextualSearchFieldTrialTest() override {}
17 
18   // Inner class that stubs out access to Variations and command-line switches.
19   class ContextualSearchFieldTrialStubbed : public ContextualSearchFieldTrial {
20    public:
21     // Use these to set a non-empty value to override return of a Get method.
22     void SetSwitchValue(const std::string& value);
23     void SetParamValue(const std::string& value);
24 
25    protected:
26     // These are overridden to return the Set value above.
27     bool HasSwitch(const std::string& name) override;
28     std::string GetSwitch(const std::string& name) override;
29     std::string GetParam(const std::string& name) override;
30 
31    private:
32     bool does_have_switch_;
33     std::string switch_value_;
34     std::string param_value_;
35   };
36 
37   // The class under test.
38   std::unique_ptr<ContextualSearchFieldTrialStubbed> field_trial_;
39 
40  protected:
SetUp()41   void SetUp() override {
42     field_trial_.reset(new ContextualSearchFieldTrialStubbed());
43   }
44 
TearDown()45   void TearDown() override {}
46 
47  private:
48   DISALLOW_COPY_AND_ASSIGN(ContextualSearchFieldTrialTest);
49 };
50 
51 bool ContextualSearchFieldTrialTest::ContextualSearchFieldTrialStubbed::
HasSwitch(const std::string & name)52     HasSwitch(const std::string& name) {
53   return does_have_switch_;
54 }
55 
56 void ContextualSearchFieldTrialTest::ContextualSearchFieldTrialStubbed::
SetSwitchValue(const std::string & value)57     SetSwitchValue(const std::string& value) {
58   switch_value_ = value;
59   does_have_switch_ = true;
60 }
61 
62 std::string
GetSwitch(const std::string & name)63 ContextualSearchFieldTrialTest::ContextualSearchFieldTrialStubbed::GetSwitch(
64     const std::string& name) {
65   return switch_value_;
66 }
67 
68 void ContextualSearchFieldTrialTest::ContextualSearchFieldTrialStubbed::
SetParamValue(const std::string & value)69     SetParamValue(const std::string& value) {
70   param_value_ = value;
71 }
72 
73 std::string
GetParam(const std::string & name)74 ContextualSearchFieldTrialTest::ContextualSearchFieldTrialStubbed::GetParam(
75     const std::string& name) {
76   return param_value_;
77 }
78 
TEST_F(ContextualSearchFieldTrialTest,IntegerDefaultValue)79 TEST_F(ContextualSearchFieldTrialTest, IntegerDefaultValue) {
80   // Should return this default value.
81   EXPECT_EQ(
82       ContextualSearchFieldTrial::kContextualSearchDefaultSampleSurroundingSize,
83       field_trial_->GetSampleSurroundingSize());
84 }
85 
TEST_F(ContextualSearchFieldTrialTest,IntegerParamOverrides)86 TEST_F(ContextualSearchFieldTrialTest, IntegerParamOverrides) {
87   // Params override defaults.
88   field_trial_->SetParamValue("500");
89   EXPECT_EQ(500, field_trial_->GetSampleSurroundingSize());
90 }
91 
TEST_F(ContextualSearchFieldTrialTest,IntegerSwitchOverrides)92 TEST_F(ContextualSearchFieldTrialTest, IntegerSwitchOverrides) {
93   field_trial_->SetParamValue("500");
94   // Switches override params.
95   field_trial_->SetSwitchValue("200");
96   EXPECT_EQ(200, field_trial_->GetSampleSurroundingSize());
97 }
98 
TEST_F(ContextualSearchFieldTrialTest,IntegerJunkIgnored)99 TEST_F(ContextualSearchFieldTrialTest, IntegerJunkIgnored) {
100   // A junk value effectively resets the switch.
101   field_trial_->SetSwitchValue("foo");
102   EXPECT_EQ(
103       ContextualSearchFieldTrial::kContextualSearchDefaultSampleSurroundingSize,
104       field_trial_->GetSampleSurroundingSize());
105 }
106 
TEST_F(ContextualSearchFieldTrialTest,StringDefaultEmpty)107 TEST_F(ContextualSearchFieldTrialTest, StringDefaultEmpty) {
108   // Default should return an empty string.
109   EXPECT_TRUE(field_trial_->GetResolverURLPrefix().empty());
110 }
111 
TEST_F(ContextualSearchFieldTrialTest,StringParamOverrides)112 TEST_F(ContextualSearchFieldTrialTest, StringParamOverrides) {
113   // Params override.
114   field_trial_->SetParamValue("param");
115   EXPECT_EQ("param", field_trial_->GetResolverURLPrefix());
116 }
117 
TEST_F(ContextualSearchFieldTrialTest,StringSwitchOverrides)118 TEST_F(ContextualSearchFieldTrialTest, StringSwitchOverrides) {
119   field_trial_->SetParamValue("param");
120   // Switches override params.
121   field_trial_->SetSwitchValue("switch");
122   EXPECT_EQ("switch", field_trial_->GetResolverURLPrefix());
123 }
124