| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/common/extensions/feature_switch.h" |
| |
| #include "base/command_line.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| using extensions::FeatureSwitch; |
| |
| namespace { |
| |
| const char kSwitchName[] = "test-switch"; |
| |
| template<FeatureSwitch::DefaultValue T> |
| class FeatureSwitchTest : public testing::Test { |
| public: |
| FeatureSwitchTest() |
| : command_line_(CommandLine::NO_PROGRAM), |
| feature_(&command_line_, kSwitchName, T) { |
| } |
| protected: |
| CommandLine command_line_; |
| FeatureSwitch feature_; |
| }; |
| |
| typedef FeatureSwitchTest<FeatureSwitch::DEFAULT_DISABLED> |
| FeatureSwitchDisabledTest; |
| typedef FeatureSwitchTest<FeatureSwitch::DEFAULT_ENABLED> |
| FeatureSwitchEnabledTest; |
| |
| } // namespace |
| |
| TEST_F(FeatureSwitchDisabledTest, NoSwitchValue) { |
| EXPECT_FALSE(feature_.IsEnabled()); |
| } |
| |
| TEST_F(FeatureSwitchDisabledTest, FalseSwitchValue) { |
| command_line_.AppendSwitchASCII(kSwitchName, "0"); |
| EXPECT_FALSE(feature_.IsEnabled()); |
| } |
| |
| TEST_F(FeatureSwitchDisabledTest, GibberishSwitchValue) { |
| command_line_.AppendSwitchASCII(kSwitchName, "monkey"); |
| EXPECT_FALSE(feature_.IsEnabled()); |
| } |
| |
| TEST_F(FeatureSwitchDisabledTest, Override) { |
| { |
| FeatureSwitch::ScopedOverride override(&feature_, false); |
| EXPECT_FALSE(feature_.IsEnabled()); |
| } |
| EXPECT_FALSE(feature_.IsEnabled()); |
| |
| { |
| FeatureSwitch::ScopedOverride override(&feature_, true); |
| EXPECT_TRUE(feature_.IsEnabled()); |
| } |
| EXPECT_FALSE(feature_.IsEnabled()); |
| } |
| |
| TEST_F(FeatureSwitchDisabledTest, TrueSwitchValue) { |
| command_line_.AppendSwitchASCII(kSwitchName, "1"); |
| EXPECT_TRUE(feature_.IsEnabled()); |
| |
| { |
| FeatureSwitch::ScopedOverride override(&feature_, false); |
| EXPECT_FALSE(feature_.IsEnabled()); |
| } |
| EXPECT_TRUE(feature_.IsEnabled()); |
| |
| { |
| FeatureSwitch::ScopedOverride override(&feature_, true); |
| EXPECT_TRUE(feature_.IsEnabled()); |
| } |
| EXPECT_TRUE(feature_.IsEnabled()); |
| } |
| |
| TEST_F(FeatureSwitchDisabledTest, TrimSwitchValue) { |
| command_line_.AppendSwitchASCII(kSwitchName, " \t 1\n "); |
| EXPECT_TRUE(feature_.IsEnabled()); |
| } |
| |
| TEST_F(FeatureSwitchEnabledTest, NoSwitchValue) { |
| EXPECT_TRUE(feature_.IsEnabled()); |
| } |
| |
| TEST_F(FeatureSwitchEnabledTest, TrueSwitchValue) { |
| command_line_.AppendSwitchASCII(kSwitchName, "1"); |
| EXPECT_TRUE(feature_.IsEnabled()); |
| } |
| |
| TEST_F(FeatureSwitchEnabledTest, GibberishSwitchValue) { |
| command_line_.AppendSwitchASCII(kSwitchName, "monkey"); |
| EXPECT_TRUE(feature_.IsEnabled()); |
| } |
| |
| TEST_F(FeatureSwitchEnabledTest, Override) { |
| { |
| FeatureSwitch::ScopedOverride override(&feature_, true); |
| EXPECT_TRUE(feature_.IsEnabled()); |
| } |
| EXPECT_TRUE(feature_.IsEnabled()); |
| |
| { |
| FeatureSwitch::ScopedOverride override(&feature_, false); |
| EXPECT_FALSE(feature_.IsEnabled()); |
| } |
| EXPECT_TRUE(feature_.IsEnabled()); |
| } |
| |
| TEST_F(FeatureSwitchEnabledTest, FalseSwitchValue) { |
| command_line_.AppendSwitchASCII(kSwitchName, "0"); |
| EXPECT_FALSE(feature_.IsEnabled()); |
| |
| { |
| FeatureSwitch::ScopedOverride override(&feature_, true); |
| EXPECT_TRUE(feature_.IsEnabled()); |
| } |
| EXPECT_FALSE(feature_.IsEnabled()); |
| |
| { |
| FeatureSwitch::ScopedOverride override(&feature_, false); |
| EXPECT_FALSE(feature_.IsEnabled()); |
| } |
| EXPECT_FALSE(feature_.IsEnabled()); |
| } |
| |
| TEST_F(FeatureSwitchEnabledTest, TrimSwitchValue) { |
| command_line_.AppendSwitchASCII(kSwitchName, "\t\t 0 \n"); |
| EXPECT_FALSE(feature_.IsEnabled()); |
| } |