blob: eb5dab487df9c64923ddd6e22afdc605c6426692 [file] [log] [blame]
// Copyright (c) 2010 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 <gtest/gtest.h>
#include "app/app_switches.h"
#include "base/command_line.h"
#include "base/string_util.h"
#include "base/values.h"
#include "chrome/browser/command_line_pref_store.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
namespace {
class TestCommandLinePrefStore : public CommandLinePrefStore {
public:
explicit TestCommandLinePrefStore(CommandLine* cl)
: CommandLinePrefStore(cl) {}
bool ProxySwitchesAreValid() {
return ValidateProxySwitches();
}
};
static const wchar_t* unknown_bool = L"unknown_switch";
static const wchar_t* unknown_string = L"unknown_other_switch";
} // namespace
// Tests a simple string pref on the command line.
TEST(CommandLinePrefStoreTest, SimpleStringPref) {
CommandLine cl(CommandLine::ARGUMENTS_ONLY);
cl.AppendSwitchWithValue(switches::kLang, "hi-MOM");
CommandLinePrefStore store(&cl);
EXPECT_EQ(store.ReadPrefs(), PrefStore::PREF_READ_ERROR_NONE);
std::string result;
EXPECT_TRUE(store.prefs()->GetString(prefs::kApplicationLocale, &result));
EXPECT_EQ("hi-MOM", result);
}
// Tests a simple boolean pref on the command line.
TEST(CommandLinePrefStoreTest, SimpleBooleanPref) {
CommandLine cl(CommandLine::ARGUMENTS_ONLY);
cl.AppendSwitch(switches::kNoProxyServer);
CommandLinePrefStore store(&cl);
EXPECT_EQ(store.ReadPrefs(), PrefStore::PREF_READ_ERROR_NONE);
bool result;
EXPECT_TRUE(store.prefs()->GetBoolean(prefs::kNoProxyServer, &result));
EXPECT_TRUE(result);
}
// Tests a command line with no recognized prefs.
TEST(CommandLinePrefStoreTest, NoPrefs) {
CommandLine cl(CommandLine::ARGUMENTS_ONLY);
cl.AppendSwitch(WideToASCII(unknown_string));
cl.AppendSwitchWithValue(WideToASCII(unknown_bool), "a value");
CommandLinePrefStore store(&cl);
EXPECT_EQ(store.ReadPrefs(), PrefStore::PREF_READ_ERROR_NONE);
bool bool_result = false;
EXPECT_FALSE(store.prefs()->GetBoolean(unknown_bool, &bool_result));
EXPECT_FALSE(bool_result);
std::string string_result = "";
EXPECT_FALSE(store.prefs()->GetString(unknown_string, &string_result));
EXPECT_EQ("", string_result);
}
// Tests a complex command line with multiple known and unknown switches.
TEST(CommandLinePrefStoreTest, MultipleSwitches) {
CommandLine cl(CommandLine::ARGUMENTS_ONLY);
cl.AppendSwitch(WideToASCII(unknown_string));
cl.AppendSwitch(switches::kProxyAutoDetect);
cl.AppendSwitchWithValue(switches::kProxyServer, "proxy");
cl.AppendSwitchWithValue(switches::kProxyBypassList, "list");
cl.AppendSwitchWithValue(WideToASCII(unknown_bool), "a value");
CommandLinePrefStore store(&cl);
EXPECT_EQ(store.ReadPrefs(), PrefStore::PREF_READ_ERROR_NONE);
bool bool_result = false;
EXPECT_FALSE(store.prefs()->GetBoolean(unknown_bool, &bool_result));
EXPECT_FALSE(bool_result);
EXPECT_TRUE(store.prefs()->GetBoolean(prefs::kProxyAutoDetect, &bool_result));
EXPECT_TRUE(bool_result);
std::string string_result = "";
EXPECT_FALSE(store.prefs()->GetString(unknown_string, &string_result));
EXPECT_EQ("", string_result);
EXPECT_TRUE(store.prefs()->GetString(prefs::kProxyServer, &string_result));
EXPECT_EQ("proxy", string_result);
EXPECT_TRUE(store.prefs()->GetString(prefs::kProxyBypassList,
&string_result));
EXPECT_EQ("list", string_result);
}
// Tests proxy switch validation.
TEST(CommandLinePrefStoreTest, ProxySwitchValidation) {
CommandLine cl(CommandLine::ARGUMENTS_ONLY);
// No switches.
TestCommandLinePrefStore store(&cl);
EXPECT_EQ(store.ReadPrefs(), PrefStore::PREF_READ_ERROR_NONE);
EXPECT_TRUE(store.ProxySwitchesAreValid());
// Only no-proxy.
cl.AppendSwitch(switches::kNoProxyServer);
TestCommandLinePrefStore store2(&cl);
EXPECT_EQ(store2.ReadPrefs(), PrefStore::PREF_READ_ERROR_NONE);
EXPECT_TRUE(store2.ProxySwitchesAreValid());
// Another proxy switch too.
cl.AppendSwitch(switches::kProxyAutoDetect);
TestCommandLinePrefStore store3(&cl);
EXPECT_EQ(store3.ReadPrefs(), PrefStore::PREF_READ_ERROR_NONE);
EXPECT_FALSE(store3.ProxySwitchesAreValid());
// All proxy switches except no-proxy.
CommandLine cl2(CommandLine::ARGUMENTS_ONLY);
cl2.AppendSwitch(switches::kProxyAutoDetect);
cl2.AppendSwitchWithValue(switches::kProxyServer, "server");
cl2.AppendSwitchWithValue(switches::kProxyPacUrl, "url");
cl2.AppendSwitchWithValue(switches::kProxyBypassList, "list");
TestCommandLinePrefStore store4(&cl2);
EXPECT_EQ(store4.ReadPrefs(), PrefStore::PREF_READ_ERROR_NONE);
EXPECT_TRUE(store4.ProxySwitchesAreValid());
}