// 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 "extensions/common/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()); }