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