Home | History | Annotate | Download | only in extensions
      1 // Copyright (c) 2012 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 "extensions/common/feature_switch.h"
      6 
      7 #include "base/command_line.h"
      8 #include "base/memory/scoped_ptr.h"
      9 #include "testing/gtest/include/gtest/gtest.h"
     10 
     11 using extensions::FeatureSwitch;
     12 
     13 namespace {
     14 
     15 const char kSwitchName[] = "test-switch";
     16 
     17 template<FeatureSwitch::DefaultValue T>
     18 class FeatureSwitchTest : public testing::Test {
     19  public:
     20   FeatureSwitchTest()
     21       : command_line_(CommandLine::NO_PROGRAM),
     22         feature_(&command_line_, kSwitchName, T) {
     23   }
     24  protected:
     25   CommandLine command_line_;
     26   FeatureSwitch feature_;
     27 };
     28 
     29 typedef FeatureSwitchTest<FeatureSwitch::DEFAULT_DISABLED>
     30     FeatureSwitchDisabledTest;
     31 typedef FeatureSwitchTest<FeatureSwitch::DEFAULT_ENABLED>
     32     FeatureSwitchEnabledTest;
     33 
     34 }  // namespace
     35 
     36 TEST_F(FeatureSwitchDisabledTest, NoSwitchValue) {
     37   EXPECT_FALSE(feature_.IsEnabled());
     38 }
     39 
     40 TEST_F(FeatureSwitchDisabledTest, FalseSwitchValue) {
     41   command_line_.AppendSwitchASCII(kSwitchName, "0");
     42   EXPECT_FALSE(feature_.IsEnabled());
     43 }
     44 
     45 TEST_F(FeatureSwitchDisabledTest, GibberishSwitchValue) {
     46   command_line_.AppendSwitchASCII(kSwitchName, "monkey");
     47   EXPECT_FALSE(feature_.IsEnabled());
     48 }
     49 
     50 TEST_F(FeatureSwitchDisabledTest, Override) {
     51   {
     52     FeatureSwitch::ScopedOverride override(&feature_, false);
     53     EXPECT_FALSE(feature_.IsEnabled());
     54   }
     55   EXPECT_FALSE(feature_.IsEnabled());
     56 
     57   {
     58     FeatureSwitch::ScopedOverride override(&feature_, true);
     59     EXPECT_TRUE(feature_.IsEnabled());
     60   }
     61   EXPECT_FALSE(feature_.IsEnabled());
     62 }
     63 
     64 TEST_F(FeatureSwitchDisabledTest, TrueSwitchValue) {
     65   command_line_.AppendSwitchASCII(kSwitchName, "1");
     66   EXPECT_TRUE(feature_.IsEnabled());
     67 
     68   {
     69     FeatureSwitch::ScopedOverride override(&feature_, false);
     70     EXPECT_FALSE(feature_.IsEnabled());
     71   }
     72   EXPECT_TRUE(feature_.IsEnabled());
     73 
     74   {
     75     FeatureSwitch::ScopedOverride override(&feature_, true);
     76     EXPECT_TRUE(feature_.IsEnabled());
     77   }
     78   EXPECT_TRUE(feature_.IsEnabled());
     79 }
     80 
     81 TEST_F(FeatureSwitchDisabledTest, TrimSwitchValue) {
     82   command_line_.AppendSwitchASCII(kSwitchName, " \t  1\n  ");
     83   EXPECT_TRUE(feature_.IsEnabled());
     84 }
     85 
     86 TEST_F(FeatureSwitchEnabledTest, NoSwitchValue) {
     87   EXPECT_TRUE(feature_.IsEnabled());
     88 }
     89 
     90 TEST_F(FeatureSwitchEnabledTest, TrueSwitchValue) {
     91   command_line_.AppendSwitchASCII(kSwitchName, "1");
     92   EXPECT_TRUE(feature_.IsEnabled());
     93 }
     94 
     95 TEST_F(FeatureSwitchEnabledTest, GibberishSwitchValue) {
     96   command_line_.AppendSwitchASCII(kSwitchName, "monkey");
     97   EXPECT_TRUE(feature_.IsEnabled());
     98 }
     99 
    100 TEST_F(FeatureSwitchEnabledTest, Override) {
    101   {
    102     FeatureSwitch::ScopedOverride override(&feature_, true);
    103     EXPECT_TRUE(feature_.IsEnabled());
    104   }
    105   EXPECT_TRUE(feature_.IsEnabled());
    106 
    107   {
    108     FeatureSwitch::ScopedOverride override(&feature_, false);
    109     EXPECT_FALSE(feature_.IsEnabled());
    110   }
    111   EXPECT_TRUE(feature_.IsEnabled());
    112 }
    113 
    114 TEST_F(FeatureSwitchEnabledTest, FalseSwitchValue) {
    115   command_line_.AppendSwitchASCII(kSwitchName, "0");
    116   EXPECT_FALSE(feature_.IsEnabled());
    117 
    118   {
    119     FeatureSwitch::ScopedOverride override(&feature_, true);
    120     EXPECT_TRUE(feature_.IsEnabled());
    121   }
    122   EXPECT_FALSE(feature_.IsEnabled());
    123 
    124   {
    125     FeatureSwitch::ScopedOverride override(&feature_, false);
    126     EXPECT_FALSE(feature_.IsEnabled());
    127   }
    128   EXPECT_FALSE(feature_.IsEnabled());
    129 }
    130 
    131 TEST_F(FeatureSwitchEnabledTest, TrimSwitchValue) {
    132   command_line_.AppendSwitchASCII(kSwitchName, "\t\t 0 \n");
    133   EXPECT_FALSE(feature_.IsEnabled());
    134 }
    135