| Index: chrome/renderer/renderer_logging_mac_unittest.mm
|
| ===================================================================
|
| --- chrome/renderer/renderer_logging_mac_unittest.mm (revision 20181)
|
| +++ chrome/renderer/renderer_logging_mac_unittest.mm (working copy)
|
| @@ -1,138 +0,0 @@
|
| -// Copyright (c) 2009 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/renderer/renderer_logging.h"
|
| -
|
| -#import <Foundation/Foundation.h>
|
| -
|
| -#include "base/logging.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "testing/platform_test.h"
|
| -
|
| -typedef PlatformTest RendererLoggingTest;
|
| -
|
| -namespace {
|
| -
|
| -// Class to mock breakpad's setkeyvalue/clearkeyvalue functions needed for
|
| -// SetActiveRendererURLImpl.
|
| -// The Keys are stored in a static dictionary and methods are provided to
|
| -// verify correctness.
|
| -class MockBreakpadKeyValueStore {
|
| - public:
|
| - MockBreakpadKeyValueStore() {
|
| - // Only one of these objects can be active at once.
|
| - DCHECK(dict == NULL);
|
| - dict = [[NSMutableDictionary alloc] init];
|
| - }
|
| -
|
| - ~MockBreakpadKeyValueStore() {
|
| - // Only one of these objects can be active at once.
|
| - DCHECK(dict != NULL);
|
| - [dict release];
|
| - dict = NULL;
|
| - }
|
| -
|
| - static void SetKeyValue(NSString* key, NSString* value) {
|
| - DCHECK(dict != NULL);
|
| - [dict setObject:value forKey:key];
|
| - }
|
| -
|
| - static void ClearKeyValue(NSString *key) {
|
| - DCHECK(dict != NULL);
|
| - [dict removeObjectForKey:key];
|
| - }
|
| -
|
| - int CountDictionaryEntries() {
|
| - return [dict count];
|
| - }
|
| -
|
| - bool VerifyDictionaryContents(const std::string &url) {
|
| - using renderer_logging::kMaxNumCrashURLChunks;
|
| - using renderer_logging::kMaxNumURLChunkValueLength;
|
| - using renderer_logging::kUrlChunkFormatStr;
|
| -
|
| - int num_url_chunks = CountDictionaryEntries();
|
| - EXPECT_TRUE(num_url_chunks <= kMaxNumCrashURLChunks);
|
| -
|
| - NSString *kUrlChunkFormatStr_utf8 = [NSString
|
| - stringWithUTF8String:kUrlChunkFormatStr];
|
| -
|
| - NSString *accumulated_url = @"";
|
| - for (int i = 0; i < num_url_chunks; ++i) {
|
| - // URL chunk names are 1-based.
|
| - NSString *key = [NSString stringWithFormat:kUrlChunkFormatStr_utf8, i+1];
|
| - EXPECT_TRUE(key != NULL);
|
| - NSString *value = [dict objectForKey:key];
|
| - EXPECT_TRUE([value length] > 0);
|
| - EXPECT_TRUE([value length] <= (unsigned)kMaxNumURLChunkValueLength);
|
| - accumulated_url = [accumulated_url stringByAppendingString:value];
|
| - }
|
| -
|
| - NSString *expected_url = [NSString stringWithUTF8String:url.c_str()];
|
| - return([accumulated_url isEqualToString:expected_url]);
|
| - }
|
| -
|
| - private:
|
| - static NSMutableDictionary* dict;
|
| - DISALLOW_COPY_AND_ASSIGN(MockBreakpadKeyValueStore);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -// Call through to SetActiveRendererURLImpl using the functions from
|
| -// MockBreakpadKeyValueStore.
|
| -void SetActiveRendererURLWithMock(const GURL& url) {
|
| - using renderer_logging::SetActiveRendererURLImpl;
|
| -
|
| - SetCrashKeyValueFuncPtr setFunc = MockBreakpadKeyValueStore::SetKeyValue;
|
| - ClearCrashKeyValueFuncPtr clearFunc =
|
| - MockBreakpadKeyValueStore::ClearKeyValue;
|
| -
|
| - SetActiveRendererURLImpl(url, setFunc, clearFunc);
|
| -}
|
| -
|
| -TEST_F(RendererLoggingTest, TestUrlSplitting) {
|
| - using renderer_logging::kMaxNumCrashURLChunks;
|
| - using renderer_logging::kMaxNumURLChunkValueLength;
|
| -
|
| - const std::string short_url("http://abc/");
|
| - std::string long_url("http://");
|
| - std::string overflow_url("http://");
|
| -
|
| - long_url += std::string(kMaxNumURLChunkValueLength * 2, 'a');
|
| - long_url += "/";
|
| -
|
| - int max_num_chars_stored_in_dump = kMaxNumURLChunkValueLength *
|
| - kMaxNumCrashURLChunks;
|
| - overflow_url += std::string(max_num_chars_stored_in_dump + 1, 'a');
|
| - overflow_url += "/";
|
| -
|
| - // Check that Clearing NULL URL works.
|
| - MockBreakpadKeyValueStore mock;
|
| - SetActiveRendererURLWithMock(GURL());
|
| - EXPECT_EQ(mock.CountDictionaryEntries(), 0);
|
| -
|
| - // Check that we can set a URL.
|
| - SetActiveRendererURLWithMock(GURL(short_url.c_str()));
|
| - EXPECT_TRUE(mock.VerifyDictionaryContents(short_url));
|
| - EXPECT_EQ(mock.CountDictionaryEntries(), 1);
|
| - SetActiveRendererURLWithMock(GURL());
|
| - EXPECT_EQ(mock.CountDictionaryEntries(), 0);
|
| -
|
| - // Check that we can replace a long url with a short url.
|
| - SetActiveRendererURLWithMock(GURL(long_url.c_str()));
|
| - EXPECT_TRUE(mock.VerifyDictionaryContents(long_url));
|
| - SetActiveRendererURLWithMock(GURL(short_url.c_str()));
|
| - EXPECT_TRUE(mock.VerifyDictionaryContents(short_url));
|
| - SetActiveRendererURLWithMock(GURL());
|
| - EXPECT_EQ(mock.CountDictionaryEntries(), 0);
|
| -
|
| -
|
| - // Check that overflow works correctly.
|
| - SetActiveRendererURLWithMock(GURL(overflow_url.c_str()));
|
| - EXPECT_TRUE(mock.VerifyDictionaryContents(
|
| - overflow_url.substr(0, max_num_chars_stored_in_dump)));
|
| - SetActiveRendererURLWithMock(GURL());
|
| - EXPECT_EQ(mock.CountDictionaryEntries(), 0);
|
| -}
|
|
|