| Index: chrome/browser/cocoa/page_info_bubble_controller_unittest.mm
|
| diff --git a/chrome/browser/cocoa/page_info_bubble_controller_unittest.mm b/chrome/browser/cocoa/page_info_bubble_controller_unittest.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b7a51adc8753a59e601fa946db64ad1ef8d3b6a2
|
| --- /dev/null
|
| +++ b/chrome/browser/cocoa/page_info_bubble_controller_unittest.mm
|
| @@ -0,0 +1,191 @@
|
| +// 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 "app/l10n_util.h"
|
| +#include "base/scoped_nsobject.h"
|
| +#include "base/string_util.h"
|
| +#include "base/string_number_conversions.h"
|
| +#include "base/sys_string_conversions.h"
|
| +#include "base/utf_string_conversions.h"
|
| +#import "chrome/browser/cocoa/page_info_bubble_controller.h"
|
| +#include "chrome/browser/cocoa/browser_test_helper.h"
|
| +#import "chrome/browser/cocoa/cocoa_test_helper.h"
|
| +#include "chrome/browser/page_info_model.h"
|
| +#include "grit/generated_resources.h"
|
| +
|
| +namespace {
|
| +
|
| +class FakeModel : public PageInfoModel {
|
| + public:
|
| + void AddSection(SectionInfoState state,
|
| + const string16& title,
|
| + const string16& description,
|
| + SectionInfoType type) {
|
| + sections_.push_back(SectionInfo(
|
| + state, title, string16(), description, type));
|
| + }
|
| +};
|
| +
|
| +class FakeBridge : public PageInfoModel::PageInfoModelObserver {
|
| + public:
|
| + void ModelChanged() {}
|
| +};
|
| +
|
| +class PageInfoBubbleControllerTest : public CocoaTest {
|
| + public:
|
| + PageInfoBubbleControllerTest() {
|
| + controller_ = nil;
|
| + model_ = new FakeModel();
|
| + }
|
| +
|
| + virtual void TearDown() {
|
| + [controller_ close];
|
| + CocoaTest::TearDown();
|
| + }
|
| +
|
| + void CreateBubble() {
|
| + // The controller cleans up after itself when the window closes.
|
| + controller_ =
|
| + [[PageInfoBubbleController alloc] initWithPageInfoModel:model_
|
| + modelObserver:NULL
|
| + parentWindow:test_window()];
|
| + window_ = [controller_ window];
|
| + [controller_ showWindow:nil];
|
| + }
|
| +
|
| + // Checks the controller's window for the requisite subviews in the given
|
| + // numbers.
|
| + void CheckWindow(int text_count,
|
| + int image_count,
|
| + int spacer_count,
|
| + int button_count) {
|
| + for (NSView* view in [[window_ contentView] subviews]) {
|
| + if ([view isKindOfClass:[NSTextField class]]) {
|
| + --text_count;
|
| + } else if ([view isKindOfClass:[NSImageView class]]) {
|
| + --image_count;
|
| + } else if ([view isKindOfClass:[NSBox class]]) {
|
| + --spacer_count;
|
| + } else if ([view isKindOfClass:[NSButton class]]) {
|
| + --button_count;
|
| + CheckButton(static_cast<NSButton*>(view));
|
| + } else {
|
| + ADD_FAILURE() << "Unknown subview: " << [[view description] UTF8String];
|
| + }
|
| + }
|
| + EXPECT_EQ(0, text_count);
|
| + EXPECT_EQ(0, image_count);
|
| + EXPECT_EQ(0, spacer_count);
|
| + EXPECT_EQ(0, button_count);
|
| + EXPECT_EQ([window_ delegate], controller_);
|
| + }
|
| +
|
| + // Checks that a button is hooked up correctly.
|
| + void CheckButton(NSButton* button) {
|
| + EXPECT_EQ(@selector(showCertWindow:), [button action]);
|
| + EXPECT_EQ(controller_, [button target]);
|
| + EXPECT_TRUE([button stringValue]);
|
| + }
|
| +
|
| + BrowserTestHelper helper_;
|
| +
|
| + PageInfoBubbleController* controller_; // Weak, owns self.
|
| + FakeModel* model_; // Weak, owned by controller.
|
| + NSWindow* window_; // Weak, owned by controller.
|
| +};
|
| +
|
| +
|
| +TEST_F(PageInfoBubbleControllerTest, NoHistoryNoSecurity) {
|
| + model_->AddSection(PageInfoModel::SECTION_STATE_ERROR,
|
| + l10n_util::GetStringUTF16(IDS_PAGE_INFO_SECURITY_TAB_IDENTITY_TITLE),
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_PAGE_INFO_SECURITY_TAB_UNKNOWN_PARTY,
|
| + ASCIIToUTF16("google.com")),
|
| + PageInfoModel::SECTION_INFO_IDENTITY);
|
| + model_->AddSection(PageInfoModel::SECTION_STATE_ERROR,
|
| + l10n_util::GetStringUTF16(IDS_PAGE_INFO_SECURITY_TAB_CONNECTION_TITLE),
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_PAGE_INFO_SECURITY_TAB_NOT_ENCRYPTED_CONNECTION_TEXT,
|
| + ASCIIToUTF16("google.com")),
|
| + PageInfoModel::SECTION_INFO_CONNECTION);
|
| +
|
| + CreateBubble();
|
| + CheckWindow(/*text=*/4, /*image=*/2, /*spacer=*/1, /*button=*/1);
|
| +}
|
| +
|
| +
|
| +TEST_F(PageInfoBubbleControllerTest, HistoryNoSecurity) {
|
| + model_->AddSection(PageInfoModel::SECTION_STATE_ERROR,
|
| + l10n_util::GetStringUTF16(IDS_PAGE_INFO_SECURITY_TAB_IDENTITY_TITLE),
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_PAGE_INFO_SECURITY_TAB_UNKNOWN_PARTY,
|
| + ASCIIToUTF16("google.com")),
|
| + PageInfoModel::SECTION_INFO_IDENTITY);
|
| + model_->AddSection(PageInfoModel::SECTION_STATE_ERROR,
|
| + l10n_util::GetStringUTF16(IDS_PAGE_INFO_SECURITY_TAB_CONNECTION_TITLE),
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_PAGE_INFO_SECURITY_TAB_NOT_ENCRYPTED_CONNECTION_TEXT,
|
| + ASCIIToUTF16("google.com")),
|
| + PageInfoModel::SECTION_INFO_CONNECTION);
|
| +
|
| + // In practice, the history information comes later because it's queried
|
| + // asynchronously, so replicate the double-build here.
|
| + CreateBubble();
|
| +
|
| + model_->AddSection(PageInfoModel::SECTION_STATE_ERROR,
|
| + l10n_util::GetStringUTF16(
|
| + IDS_PAGE_INFO_SECURITY_TAB_PERSONAL_HISTORY_TITLE),
|
| + l10n_util::GetStringUTF16(
|
| + IDS_PAGE_INFO_SECURITY_TAB_FIRST_VISITED_TODAY),
|
| + PageInfoModel::SECTION_INFO_FIRST_VISIT);
|
| +
|
| + [controller_ performLayout];
|
| +
|
| + CheckWindow(/*text=*/6, /*image=*/2, /*spacer=*/2, /*button=*/1);
|
| +}
|
| +
|
| +
|
| +TEST_F(PageInfoBubbleControllerTest, NoHistoryMixedSecurity) {
|
| + model_->AddSection(PageInfoModel::SECTION_STATE_OK,
|
| + l10n_util::GetStringUTF16(IDS_PAGE_INFO_SECURITY_TAB_IDENTITY_TITLE),
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_PAGE_INFO_SECURITY_TAB_SECURE_IDENTITY,
|
| + ASCIIToUTF16("Goat Security Systems")),
|
| + PageInfoModel::SECTION_INFO_IDENTITY);
|
| +
|
| + // This string is super long and the text should overflow the default clip
|
| + // region (kImageSize).
|
| + string16 description = l10n_util::GetStringFUTF16(
|
| + IDS_PAGE_INFO_SECURITY_TAB_ENCRYPTED_SENTENCE_LINK,
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_PAGE_INFO_SECURITY_TAB_ENCRYPTED_CONNECTION_TEXT,
|
| + ASCIIToUTF16("chrome.google.com"),
|
| + base::IntToString16(1024)),
|
| + l10n_util::GetStringUTF16(
|
| + IDS_PAGE_INFO_SECURITY_TAB_ENCRYPTED_INSECURE_CONTENT_WARNING));
|
| +
|
| + model_->AddSection(PageInfoModel::SECTION_STATE_OK,
|
| + l10n_util::GetStringUTF16(IDS_PAGE_INFO_SECURITY_TAB_CONNECTION_TITLE),
|
| + description,
|
| + PageInfoModel::SECTION_INFO_CONNECTION);
|
| +
|
| + CreateBubble();
|
| +
|
| + NSArray* subviews = [[window_ contentView] subviews];
|
| + CheckWindow(/*text=*/4, /*image=*/2, /*spacer=*/1, /*button=*/1);
|
| +
|
| + // Look for the over-sized box.
|
| + NSString* targetDesc = base::SysUTF16ToNSString(description);
|
| + for (NSView* subview in subviews) {
|
| + if ([subview isKindOfClass:[NSTextField class]]) {
|
| + NSTextField* desc = static_cast<NSTextField*>(subview);
|
| + if ([[desc stringValue] isEqualToString:targetDesc]) {
|
| + // Typical box frame is ~55px, make sure this is extra large.
|
| + EXPECT_LT(75, NSHeight([desc frame]));
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +} // namespace
|
|
|