• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright (c) 2011 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#import <Cocoa/Cocoa.h>
6
7#import "base/memory/scoped_nsobject.h"
8#import "chrome/browser/cocoa/keystone_glue.h"
9#import "chrome/browser/ui/cocoa/about_window_controller.h"
10#include "chrome/browser/ui/cocoa/browser_test_helper.h"
11#include "chrome/browser/ui/cocoa/cocoa_test_helper.h"
12#include "testing/gtest/include/gtest/gtest.h"
13#import "testing/gtest_mac.h"
14#include "testing/platform_test.h"
15
16namespace {
17
18void PostAutoupdateStatusNotification(AutoupdateStatus status,
19                                             NSString* version) {
20  NSNumber* statusNumber = [NSNumber numberWithInt:status];
21  NSMutableDictionary* dictionary =
22      [NSMutableDictionary dictionaryWithObjects:&statusNumber
23                                         forKeys:&kAutoupdateStatusStatus
24                                           count:1];
25  if (version) {
26    [dictionary setObject:version forKey:kAutoupdateStatusVersion];
27  }
28
29  NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
30  [center postNotificationName:kAutoupdateStatusNotification
31                        object:nil
32                      userInfo:dictionary];
33}
34
35class AboutWindowControllerTest : public CocoaTest {
36 public:
37  virtual void SetUp() {
38    CocoaTest::SetUp();
39    about_window_controller_ =
40        [[AboutWindowController alloc] initWithProfile:nil];
41    EXPECT_TRUE([about_window_controller_ window]);
42  }
43
44  virtual void TearDown() {
45    [about_window_controller_ close];
46    CocoaTest::TearDown();
47  }
48
49  AboutWindowController* about_window_controller_;
50};
51
52TEST_F(AboutWindowControllerTest, TestCopyright) {
53  NSString* text = [[AboutWindowController legalTextBlock] string];
54
55  // Make sure we have the word "Copyright" in it, which is present in all
56  // locales.
57  NSRange range = [text rangeOfString:@"Copyright"];
58  EXPECT_NE(NSNotFound, range.location);
59}
60
61TEST_F(AboutWindowControllerTest, RemovesLinkAnchors) {
62  NSString* text = [[AboutWindowController legalTextBlock] string];
63
64  // Make sure that we removed the "BEGIN_LINK" and "END_LINK" anchors.
65  NSRange range = [text rangeOfString:@"BEGIN_LINK"];
66  EXPECT_EQ(NSNotFound, range.location);
67
68  range = [text rangeOfString:@"END_LINK"];
69  EXPECT_EQ(NSNotFound, range.location);
70}
71
72TEST_F(AboutWindowControllerTest, AwakeNibSetsString) {
73  NSAttributedString* legal_text = [AboutWindowController legalTextBlock];
74  NSAttributedString* text_storage =
75      [[about_window_controller_ legalText] textStorage];
76
77  EXPECT_TRUE([legal_text isEqualToAttributedString:text_storage]);
78}
79
80TEST_F(AboutWindowControllerTest, TestButton) {
81  NSButton* button = [about_window_controller_ updateButton];
82  ASSERT_TRUE(button);
83
84  // Not enabled until we know if updates are available.
85  ASSERT_FALSE([button isEnabled]);
86  PostAutoupdateStatusNotification(kAutoupdateAvailable, nil);
87  ASSERT_TRUE([button isEnabled]);
88
89  // Make sure the button is hooked up
90  ASSERT_EQ([button target], about_window_controller_);
91  ASSERT_EQ([button action], @selector(updateNow:));
92}
93
94// Doesn't confirm correctness, but does confirm something happens.
95TEST_F(AboutWindowControllerTest, TestCallbacks) {
96  NSString *lastText = [[about_window_controller_ updateText]
97                        stringValue];
98  PostAutoupdateStatusNotification(kAutoupdateCurrent, @"foo");
99  ASSERT_NSNE(lastText, [[about_window_controller_ updateText] stringValue]);
100
101  lastText = [[about_window_controller_ updateText] stringValue];
102  PostAutoupdateStatusNotification(kAutoupdateCurrent, @"foo");
103  ASSERT_NSEQ(lastText, [[about_window_controller_ updateText] stringValue]);
104
105  lastText = [[about_window_controller_ updateText] stringValue];
106  PostAutoupdateStatusNotification(kAutoupdateCurrent, @"bar");
107  ASSERT_NSNE(lastText, [[about_window_controller_ updateText] stringValue]);
108
109  lastText = [[about_window_controller_ updateText] stringValue];
110  PostAutoupdateStatusNotification(kAutoupdateAvailable, nil);
111  ASSERT_NSNE(lastText, [[about_window_controller_ updateText] stringValue]);
112
113  lastText = [[about_window_controller_ updateText] stringValue];
114  PostAutoupdateStatusNotification(kAutoupdateCheckFailed, nil);
115  ASSERT_NSNE(lastText, [[about_window_controller_ updateText] stringValue]);
116
117#if 0
118  // TODO(mark): The kAutoupdateInstalled portion of the test is disabled
119  // because it leaks restart dialogs.  If the About box is revised to use
120  // a button within the box to advise a restart instead of popping dialogs,
121  // these tests should be enabled.
122
123  lastText = [[about_window_controller_ updateText] stringValue];
124  PostAutoupdateStatusNotification(kAutoupdateInstalled, @"ver");
125  ASSERT_NSNE(lastText, [[about_window_controller_ updateText] stringValue]);
126
127  lastText = [[about_window_controller_ updateText] stringValue];
128  PostAutoupdateStatusNotification(kAutoupdateInstalled, nil);
129  ASSERT_NSNE(lastText, [[about_window_controller_ updateText] stringValue]);
130#endif
131
132  lastText = [[about_window_controller_ updateText] stringValue];
133  PostAutoupdateStatusNotification(kAutoupdateInstallFailed, nil);
134  ASSERT_NSNE(lastText, [[about_window_controller_ updateText] stringValue]);
135}
136
137}  // namespace
138