Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(226)

Side by Side Diff: chrome/browser/ui/cocoa/custom_home_pages_model_unittest.mm

Issue 6339002: [Mac] Consolidate all files relating to preferences in a subdir of c/b/ui/coc... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2010 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 #include "base/scoped_nsobject.h"
6 #include "chrome/browser/prefs/session_startup_pref.h"
7 #include "chrome/browser/ui/cocoa/browser_test_helper.h"
8 #import "chrome/browser/ui/cocoa/custom_home_pages_model.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #import "testing/gtest_mac.h"
11 #include "testing/platform_test.h"
12
13 // A helper for KVO and NSNotifications. Makes a note that it's been called
14 // back.
15 @interface CustomHomePageHelper : NSObject {
16 @public
17 BOOL sawNotification_;
18 }
19 @end
20
21 @implementation CustomHomePageHelper
22 - (void)observeValueForKeyPath:(NSString*)keyPath
23 ofObject:(id)object
24 change:(NSDictionary*)change
25 context:(void*)context {
26 sawNotification_ = YES;
27 }
28
29 - (void)entryChanged:(NSNotification*)notify {
30 sawNotification_ = YES;
31 }
32 @end
33
34 @interface NSObject ()
35 - (void)setURL:(NSString*)url;
36 @end
37
38 namespace {
39
40 // Helper that creates an autoreleased entry.
41 CustomHomePageEntry* MakeEntry(NSString* url) {
42 CustomHomePageEntry* entry = [[[CustomHomePageEntry alloc] init] autorelease];
43 [entry setURL:url];
44 return entry;
45 }
46
47 // Helper that casts from |id| to the Entry type and returns the URL string.
48 NSString* EntryURL(id entry) {
49 return [static_cast<CustomHomePageEntry*>(entry) URL];
50 }
51
52 class CustomHomePagesModelTest : public PlatformTest {
53 public:
54 CustomHomePagesModelTest() {
55 model_.reset([[CustomHomePagesModel alloc]
56 initWithProfile:helper_.profile()]);
57 }
58 ~CustomHomePagesModelTest() { }
59
60 BrowserTestHelper helper_;
61 scoped_nsobject<CustomHomePagesModel> model_;
62 };
63
64 TEST_F(CustomHomePagesModelTest, Init) {
65 scoped_nsobject<CustomHomePagesModel> model(
66 [[CustomHomePagesModel alloc] initWithProfile:helper_.profile()]);
67 }
68
69 TEST_F(CustomHomePagesModelTest, GetSetURLs) {
70 // Basic test.
71 std::vector<GURL> urls;
72 urls.push_back(GURL("http://www.google.com"));
73 [model_ setURLs:urls];
74 std::vector<GURL> received_urls = [model_.get() URLs];
75 EXPECT_EQ(received_urls.size(), 1U);
76 EXPECT_TRUE(urls[0] == received_urls[0]);
77
78 // Set an empty list, make sure we get back an empty list.
79 std::vector<GURL> empty;
80 [model_ setURLs:empty];
81 received_urls = [model_.get() URLs];
82 EXPECT_EQ(received_urls.size(), 0U);
83
84 // Give it a list with not well-formed URLs and make sure we get back.
85 // only the good ones.
86 std::vector<GURL> poorly_formed;
87 poorly_formed.push_back(GURL("http://www.google.com")); // good
88 poorly_formed.push_back(GURL("www.google.com")); // bad
89 poorly_formed.push_back(GURL("www.yahoo.")); // bad
90 poorly_formed.push_back(GURL("http://www.yahoo.com")); // good
91 [model_ setURLs:poorly_formed];
92 received_urls = [model_.get() URLs];
93 EXPECT_EQ(received_urls.size(), 2U);
94 }
95
96 // Test that we get a KVO notification when called setURLs.
97 TEST_F(CustomHomePagesModelTest, KVOObserveWhenListChanges) {
98 scoped_nsobject<CustomHomePageHelper> kvo_helper(
99 [[CustomHomePageHelper alloc] init]);
100 [model_ addObserver:kvo_helper
101 forKeyPath:@"customHomePages"
102 options:0L
103 context:NULL];
104 EXPECT_FALSE(kvo_helper.get()->sawNotification_);
105
106 std::vector<GURL> urls;
107 urls.push_back(GURL("http://www.google.com"));
108 [model_ setURLs:urls]; // Should send kvo change notification.
109 EXPECT_TRUE(kvo_helper.get()->sawNotification_);
110
111 [model_ removeObserver:kvo_helper forKeyPath:@"customHomePages"];
112 }
113
114 // Test the KVO "to-many" bindings for |customHomePages| and the KVO
115 // notifiation when items are added to and removed from the list.
116 TEST_F(CustomHomePagesModelTest, KVO) {
117 EXPECT_EQ([model_ countOfCustomHomePages], 0U);
118
119 scoped_nsobject<CustomHomePageHelper> kvo_helper(
120 [[CustomHomePageHelper alloc] init]);
121 [model_ addObserver:kvo_helper
122 forKeyPath:@"customHomePages"
123 options:0L
124 context:NULL];
125 EXPECT_FALSE(kvo_helper.get()->sawNotification_);
126
127 // Cheat and insert NSString objects into the array. As long as we don't
128 // call -URLs, we'll be ok.
129 [model_ insertObject:MakeEntry(@"www.google.com") inCustomHomePagesAtIndex:0];
130 EXPECT_TRUE(kvo_helper.get()->sawNotification_);
131 [model_ insertObject:MakeEntry(@"www.yahoo.com") inCustomHomePagesAtIndex:1];
132 [model_ insertObject:MakeEntry(@"dev.chromium.org")
133 inCustomHomePagesAtIndex:2];
134 EXPECT_EQ([model_ countOfCustomHomePages], 3U);
135
136 EXPECT_NSEQ(@"http://www.yahoo.com/",
137 EntryURL([model_ objectInCustomHomePagesAtIndex:1]));
138
139 kvo_helper.get()->sawNotification_ = NO;
140 [model_ removeObjectFromCustomHomePagesAtIndex:1];
141 EXPECT_TRUE(kvo_helper.get()->sawNotification_);
142 EXPECT_EQ([model_ countOfCustomHomePages], 2U);
143 EXPECT_NSEQ(@"http://dev.chromium.org/",
144 EntryURL([model_ objectInCustomHomePagesAtIndex:1]));
145 EXPECT_NSEQ(@"http://www.google.com/",
146 EntryURL([model_ objectInCustomHomePagesAtIndex:0]));
147
148 [model_ removeObserver:kvo_helper forKeyPath:@"customHomePages"];
149 }
150
151 // Test that when individual items are changed that they broadcast a message.
152 TEST_F(CustomHomePagesModelTest, ModelChangedNotification) {
153 scoped_nsobject<CustomHomePageHelper> kvo_helper(
154 [[CustomHomePageHelper alloc] init]);
155 [[NSNotificationCenter defaultCenter]
156 addObserver:kvo_helper
157 selector:@selector(entryChanged:)
158 name:kHomepageEntryChangedNotification
159 object:nil];
160
161 std::vector<GURL> urls;
162 urls.push_back(GURL("http://www.google.com"));
163 [model_ setURLs:urls];
164 NSObject* entry = [model_ objectInCustomHomePagesAtIndex:0];
165 [entry setURL:@"http://www.foo.bar"];
166 EXPECT_TRUE(kvo_helper.get()->sawNotification_);
167 [[NSNotificationCenter defaultCenter] removeObserver:kvo_helper];
168 }
169
170 TEST_F(CustomHomePagesModelTest, ReloadURLs) {
171 scoped_nsobject<CustomHomePageHelper> kvo_helper(
172 [[CustomHomePageHelper alloc] init]);
173 [model_ addObserver:kvo_helper
174 forKeyPath:@"customHomePages"
175 options:0L
176 context:NULL];
177 EXPECT_FALSE(kvo_helper.get()->sawNotification_);
178 EXPECT_EQ([model_ countOfCustomHomePages], 0U);
179
180 std::vector<GURL> urls;
181 urls.push_back(GURL("http://www.google.com"));
182 SessionStartupPref pref;
183 pref.urls = urls;
184 SessionStartupPref::SetStartupPref(helper_.profile(), pref);
185
186 [model_ reloadURLs];
187
188 EXPECT_TRUE(kvo_helper.get()->sawNotification_);
189 EXPECT_EQ([model_ countOfCustomHomePages], 1U);
190 EXPECT_NSEQ(@"http://www.google.com/",
191 EntryURL([model_ objectInCustomHomePagesAtIndex:0]));
192
193 [model_ removeObserver:kvo_helper.get() forKeyPath:@"customHomePages"];
194 }
195
196 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698