| Index: chrome/common/crash_keys_unittest.cc
|
| diff --git a/chrome/common/crash_keys_unittest.cc b/chrome/common/crash_keys_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ea7bdd78ce5ecba9350f8f70749cae926d8aa07f
|
| --- /dev/null
|
| +++ b/chrome/common/crash_keys_unittest.cc
|
| @@ -0,0 +1,99 @@
|
| +// Copyright (c) 2013 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/crash_keys.h"
|
| +
|
| +#include <map>
|
| +#include <string>
|
| +
|
| +#include "base/command_line.h"
|
| +#include "base/compiler_specific.h"
|
| +#include "base/debug/crash_logging.h"
|
| +#include "base/strings/string_piece.h"
|
| +#include "base/strings/stringprintf.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +class CrashKeysTest : public testing::Test {
|
| + public:
|
| + virtual void SetUp() OVERRIDE {
|
| + self_ = this;
|
| + base::debug::SetCrashKeyReportingFunctions(
|
| + &SetCrashKeyValue, &ClearCrashKey);
|
| + crash_keys::RegisterChromeCrashKeys();
|
| + }
|
| +
|
| + virtual void TearDown() OVERRIDE {
|
| + base::debug::ResetCrashLoggingForTesting();
|
| + self_ = NULL;
|
| + }
|
| +
|
| + bool HasCrashKey(const std::string& key) {
|
| + return keys_.find(key) != keys_.end();
|
| + }
|
| +
|
| + std::string GetKeyValue(const std::string& key) {
|
| + return keys_[key];
|
| + }
|
| +
|
| + private:
|
| + static void SetCrashKeyValue(const base::StringPiece& key,
|
| + const base::StringPiece& value) {
|
| + self_->keys_[key.as_string()] = value.as_string();
|
| + }
|
| +
|
| + static void ClearCrashKey(const base::StringPiece& key) {
|
| + self_->keys_.erase(key.as_string());
|
| + }
|
| +
|
| + static CrashKeysTest* self_;
|
| +
|
| + std::map<std::string, std::string> keys_;
|
| +};
|
| +
|
| +CrashKeysTest* CrashKeysTest::self_ = NULL;
|
| +
|
| +TEST_F(CrashKeysTest, Switches) {
|
| + // Set three switches.
|
| + {
|
| + CommandLine command_line(CommandLine::NO_PROGRAM);
|
| + for (int i = 1; i <= 3; ++i)
|
| + command_line.AppendSwitch(base::StringPrintf("--flag-%d", i));
|
| + crash_keys::SetSwitchesFromCommandLine(&command_line);
|
| + EXPECT_EQ("--flag-1", GetKeyValue("switch-1"));
|
| + EXPECT_EQ("--flag-2", GetKeyValue("switch-2"));
|
| + EXPECT_EQ("--flag-3", GetKeyValue("switch-3"));
|
| + EXPECT_FALSE(HasCrashKey("switch-4"));
|
| + }
|
| +
|
| + // Set more than the max switches.
|
| + {
|
| + CommandLine command_line(CommandLine::NO_PROGRAM);
|
| + const int kMax = crash_keys::kSwitchesMaxCount + 2;
|
| + EXPECT_GT(kMax, 15);
|
| + for (int i = 1; i <= kMax; ++i)
|
| + command_line.AppendSwitch(base::StringPrintf("--many-%d", i));
|
| + crash_keys::SetSwitchesFromCommandLine(&command_line);
|
| + EXPECT_EQ("--many-1", GetKeyValue("switch-1"));
|
| + EXPECT_EQ("--many-9", GetKeyValue("switch-9"));
|
| + EXPECT_EQ("--many-15", GetKeyValue("switch-15"));
|
| + EXPECT_FALSE(HasCrashKey("switch-16"));
|
| + EXPECT_FALSE(HasCrashKey("switch-17"));
|
| + }
|
| +
|
| + // Set fewer to ensure that old ones are erased.
|
| + {
|
| + CommandLine command_line(CommandLine::NO_PROGRAM);
|
| + const char kFormat[] = "--fewer-%d";
|
| + for (int i = 1; i <= 5; ++i)
|
| + command_line.AppendSwitch(base::StringPrintf(kFormat, i));
|
| + crash_keys::SetSwitchesFromCommandLine(&command_line);
|
| + EXPECT_EQ("--fewer-1", GetKeyValue("switch-1"));
|
| + EXPECT_EQ("--fewer-2", GetKeyValue("switch-2"));
|
| + EXPECT_EQ("--fewer-3", GetKeyValue("switch-3"));
|
| + EXPECT_EQ("--fewer-4", GetKeyValue("switch-4"));
|
| + EXPECT_EQ("--fewer-5", GetKeyValue("switch-5"));
|
| + for (int i = 6; i < 20; ++i)
|
| + EXPECT_FALSE(HasCrashKey(base::StringPrintf(kFormat, i)));
|
| + }
|
| +}
|
|
|