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

Side by Side Diff: chrome/browser/ui/tabs/tab_strip_model_unittest.cc

Issue 10938027: tabs: Make the vector in MockTabStripModelObserver own values instead of pointers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: just value Created 8 years, 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "chrome/browser/ui/tabs/tab_strip_model.h" 5 #include "chrome/browser/ui/tabs/tab_strip_model.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/file_path.h" 10 #include "base/file_path.h"
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 }; 260 };
261 261
262 class MockTabStripModelObserver : public TabStripModelObserver { 262 class MockTabStripModelObserver : public TabStripModelObserver {
263 public: 263 public:
264 MockTabStripModelObserver() 264 MockTabStripModelObserver()
265 : empty_(true), 265 : empty_(true),
266 model_(NULL) {} 266 model_(NULL) {}
267 explicit MockTabStripModelObserver(TabStripModel* model) 267 explicit MockTabStripModelObserver(TabStripModel* model)
268 : empty_(true), 268 : empty_(true),
269 model_(model) {} 269 model_(model) {}
270 virtual ~MockTabStripModelObserver() { 270 virtual ~MockTabStripModelObserver() {}
271 STLDeleteContainerPointers(states_.begin(), states_.end());
272 }
273 271
274 enum TabStripModelObserverAction { 272 enum TabStripModelObserverAction {
275 INSERT, 273 INSERT,
276 CLOSE, 274 CLOSE,
277 DETACH, 275 DETACH,
278 ACTIVATE, 276 ACTIVATE,
279 DEACTIVATE, 277 DEACTIVATE,
280 SELECT, 278 SELECT,
281 MOVE, 279 MOVE,
282 CHANGE, 280 CHANGE,
(...skipping 20 matching lines...) Expand all
303 int dst_index; 301 int dst_index;
304 bool user_gesture; 302 bool user_gesture;
305 bool foreground; 303 bool foreground;
306 TabStripModelObserverAction action; 304 TabStripModelObserverAction action;
307 }; 305 };
308 306
309 int GetStateCount() const { 307 int GetStateCount() const {
310 return static_cast<int>(states_.size()); 308 return static_cast<int>(states_.size());
311 } 309 }
312 310
313 State* GetStateAt(int index) const { 311 State GetStateAt(int index) const {
314 DCHECK(index >= 0 && index < GetStateCount()); 312 DCHECK(index >= 0 && index < GetStateCount());
315 return states_[index]; 313 return states_[index];
316 } 314 }
317 315
318 bool StateEquals(int index, const State& state) { 316 bool StateEquals(int index, const State& state) {
319 State* s = GetStateAt(index); 317 State s = GetStateAt(index);
320 EXPECT_EQ(state.src_contents, s->src_contents); 318 EXPECT_EQ(state.src_contents, s.src_contents);
sky 2012/09/21 16:12:01 Hm. This function is weird. It should either have
tfarina 2012/09/21 20:11:18 Done.
321 EXPECT_EQ(state.dst_contents, s->dst_contents); 319 EXPECT_EQ(state.dst_contents, s.dst_contents);
322 EXPECT_EQ(state.src_index, s->src_index); 320 EXPECT_EQ(state.src_index, s.src_index);
323 EXPECT_EQ(state.dst_index, s->dst_index); 321 EXPECT_EQ(state.dst_index, s.dst_index);
324 EXPECT_EQ(state.user_gesture, s->user_gesture); 322 EXPECT_EQ(state.user_gesture, s.user_gesture);
325 EXPECT_EQ(state.foreground, s->foreground); 323 EXPECT_EQ(state.foreground, s.foreground);
326 EXPECT_EQ(state.action, s->action); 324 EXPECT_EQ(state.action, s.action);
327 return (s->src_contents == state.src_contents && 325 return (s.src_contents == state.src_contents &&
328 s->dst_contents == state.dst_contents && 326 s.dst_contents == state.dst_contents &&
329 s->src_index == state.src_index && 327 s.src_index == state.src_index &&
330 s->dst_index == state.dst_index && 328 s.dst_index == state.dst_index &&
331 s->user_gesture == state.user_gesture && 329 s.user_gesture == state.user_gesture &&
332 s->foreground == state.foreground && 330 s.foreground == state.foreground &&
333 s->action == state.action); 331 s.action == state.action);
334 } 332 }
335 333
336 // TabStripModelObserver implementation: 334 // TabStripModelObserver implementation:
337 virtual void TabInsertedAt(TabContents* contents, 335 virtual void TabInsertedAt(TabContents* contents,
338 int index, 336 int index,
339 bool foreground) { 337 bool foreground) {
340 empty_ = false; 338 empty_ = false;
341 State* s = new State(contents, index, INSERT); 339 State s(contents, index, INSERT);
342 s->foreground = foreground; 340 s.foreground = foreground;
343 states_.push_back(s); 341 states_.push_back(s);
344 } 342 }
345 virtual void ActiveTabChanged(TabContents* old_contents, 343 virtual void ActiveTabChanged(TabContents* old_contents,
346 TabContents* new_contents, 344 TabContents* new_contents,
347 int index, 345 int index,
348 bool user_gesture) { 346 bool user_gesture) {
349 State* s = new State(new_contents, index, ACTIVATE); 347 State s(new_contents, index, ACTIVATE);
350 s->src_contents = old_contents; 348 s.src_contents = old_contents;
351 s->user_gesture = user_gesture; 349 s.user_gesture = user_gesture;
352 states_.push_back(s); 350 states_.push_back(s);
353 } 351 }
354 virtual void TabSelectionChanged(TabStripModel* tab_strip_model, 352 virtual void TabSelectionChanged(TabStripModel* tab_strip_model,
355 const TabStripSelectionModel& old_model) { 353 const TabStripSelectionModel& old_model) {
356 State* s = new State(model()->GetActiveTabContents(), 354 State s(model()->GetActiveTabContents(), model()->active_index(), SELECT);
357 model()->active_index(), 355 s.src_contents = model()->GetTabContentsAt(old_model.active());
358 SELECT); 356 s.src_index = old_model.active();
359 s->src_contents = model()->GetTabContentsAt(old_model.active());
360 s->src_index = old_model.active();
361 states_.push_back(s); 357 states_.push_back(s);
362 } 358 }
363 virtual void TabMoved(TabContents* contents, int from_index, int to_index) { 359 virtual void TabMoved(TabContents* contents, int from_index, int to_index) {
364 State* s = new State(contents, to_index, MOVE); 360 State s(contents, to_index, MOVE);
365 s->src_index = from_index; 361 s.src_index = from_index;
366 states_.push_back(s); 362 states_.push_back(s);
367 } 363 }
368 364
369 virtual void TabClosingAt(TabStripModel* tab_strip_model, 365 virtual void TabClosingAt(TabStripModel* tab_strip_model,
370 TabContents* contents, 366 TabContents* contents,
371 int index) { 367 int index) {
372 states_.push_back(new State(contents, index, CLOSE)); 368 states_.push_back(State(contents, index, CLOSE));
373 } 369 }
374 virtual void TabDetachedAt(TabContents* contents, int index) { 370 virtual void TabDetachedAt(TabContents* contents, int index) {
375 states_.push_back(new State(contents, index, DETACH)); 371 states_.push_back(State(contents, index, DETACH));
376 } 372 }
377 virtual void TabDeactivated(TabContents* contents) { 373 virtual void TabDeactivated(TabContents* contents) {
378 states_.push_back(new State(contents, model()->active_index(), DEACTIVATE)); 374 states_.push_back(State(contents, model()->active_index(), DEACTIVATE));
379 } 375 }
380 virtual void TabChangedAt(TabContents* contents, int index, 376 virtual void TabChangedAt(TabContents* contents, int index,
381 TabChangeType change_type) { 377 TabChangeType change_type) {
382 states_.push_back(new State(contents, index, CHANGE)); 378 states_.push_back(State(contents, index, CHANGE));
383 } 379 }
384 virtual void TabReplacedAt(TabStripModel* tab_strip_model, 380 virtual void TabReplacedAt(TabStripModel* tab_strip_model,
385 TabContents* old_contents, 381 TabContents* old_contents,
386 TabContents* new_contents, 382 TabContents* new_contents,
387 int index) { 383 int index) {
388 State* s = new State(new_contents, index, REPLACED); 384 State s(new_contents, index, REPLACED);
389 s ->src_contents = old_contents; 385 s.src_contents = old_contents;
390 states_.push_back(s); 386 states_.push_back(s);
391 } 387 }
392 virtual void TabPinnedStateChanged(TabContents* contents, int index) { 388 virtual void TabPinnedStateChanged(TabContents* contents, int index) {
393 states_.push_back(new State(contents, index, PINNED)); 389 states_.push_back(State(contents, index, PINNED));
394 } 390 }
395 virtual void TabStripEmpty() { 391 virtual void TabStripEmpty() {
396 empty_ = true; 392 empty_ = true;
397 } 393 }
398 394
399 void ClearStates() { 395 void ClearStates() {
400 STLDeleteContainerPointers(states_.begin(), states_.end());
401 states_.clear(); 396 states_.clear();
402 } 397 }
403 398
404 bool empty() const { return empty_; } 399 bool empty() const { return empty_; }
405 TabStripModel* model() { return model_; } 400 TabStripModel* model() { return model_; }
406 401
407 private: 402 private:
408 std::vector<State*> states_; 403 std::vector<State> states_;
409 404
410 bool empty_; 405 bool empty_;
411 TabStripModel* model_; 406 TabStripModel* model_;
412 407
413 DISALLOW_COPY_AND_ASSIGN(MockTabStripModelObserver); 408 DISALLOW_COPY_AND_ASSIGN(MockTabStripModelObserver);
414 }; 409 };
415 410
416 TEST_F(TabStripModelTest, TestBasicAPI) { 411 TEST_F(TabStripModelTest, TestBasicAPI) {
417 TabStripDummyDelegate delegate(NULL); 412 TabStripDummyDelegate delegate(NULL);
418 TabStripModel tabstrip(&delegate, profile()); 413 TabStripModel tabstrip(&delegate, profile());
(...skipping 1900 matching lines...) Expand 10 before | Expand all | Expand 10 after
2319 TabContents* contents3 = CreateTabContents(); 2314 TabContents* contents3 = CreateTabContents();
2320 strip.AppendTabContents(contents0, false); 2315 strip.AppendTabContents(contents0, false);
2321 strip.AppendTabContents(contents1, false); 2316 strip.AppendTabContents(contents1, false);
2322 strip.AppendTabContents(contents2, false); 2317 strip.AppendTabContents(contents2, false);
2323 strip.AppendTabContents(contents3, false); 2318 strip.AppendTabContents(contents3, false);
2324 strip.AddObserver(&observer); 2319 strip.AddObserver(&observer);
2325 2320
2326 // Selection and active tab change. 2321 // Selection and active tab change.
2327 strip.ActivateTabAt(3, true); 2322 strip.ActivateTabAt(3, true);
2328 ASSERT_EQ(2, observer.GetStateCount()); 2323 ASSERT_EQ(2, observer.GetStateCount());
2329 ASSERT_EQ(observer.GetStateAt(0)->action, 2324 ASSERT_EQ(observer.GetStateAt(0).action,
2330 MockTabStripModelObserver::ACTIVATE); 2325 MockTabStripModelObserver::ACTIVATE);
2331 MockTabStripModelObserver::State s1(contents3, 3, 2326 MockTabStripModelObserver::State s1(contents3, 3,
2332 MockTabStripModelObserver::SELECT); 2327 MockTabStripModelObserver::SELECT);
2333 EXPECT_TRUE(observer.StateEquals(1, s1)); 2328 EXPECT_TRUE(observer.StateEquals(1, s1));
2334 observer.ClearStates(); 2329 observer.ClearStates();
2335 2330
2336 // Adding all tabs to selection, active tab is now at 0. 2331 // Adding all tabs to selection, active tab is now at 0.
2337 strip.ExtendSelectionTo(0); 2332 strip.ExtendSelectionTo(0);
2338 ASSERT_EQ(3, observer.GetStateCount()); 2333 ASSERT_EQ(3, observer.GetStateCount());
2339 ASSERT_EQ(observer.GetStateAt(0)->action, 2334 ASSERT_EQ(observer.GetStateAt(0).action,
2340 MockTabStripModelObserver::DEACTIVATE); 2335 MockTabStripModelObserver::DEACTIVATE);
2341 ASSERT_EQ(observer.GetStateAt(1)->action, 2336 ASSERT_EQ(observer.GetStateAt(1).action,
2342 MockTabStripModelObserver::ACTIVATE); 2337 MockTabStripModelObserver::ACTIVATE);
2343 MockTabStripModelObserver::State s2(contents0, 0, 2338 MockTabStripModelObserver::State s2(contents0, 0,
2344 MockTabStripModelObserver::SELECT); 2339 MockTabStripModelObserver::SELECT);
2345 s2.src_contents = contents3; 2340 s2.src_contents = contents3;
2346 s2.src_index = 3; 2341 s2.src_index = 3;
2347 EXPECT_TRUE(observer.StateEquals(2, s2)); 2342 EXPECT_TRUE(observer.StateEquals(2, s2));
2348 observer.ClearStates(); 2343 observer.ClearStates();
2349 2344
2350 // Toggle the active tab, should make the next index active. 2345 // Toggle the active tab, should make the next index active.
2351 strip.ToggleSelectionAt(0); 2346 strip.ToggleSelectionAt(0);
2352 EXPECT_EQ(1, strip.active_index()); 2347 EXPECT_EQ(1, strip.active_index());
2353 EXPECT_EQ(3U, strip.selection_model().size()); 2348 EXPECT_EQ(3U, strip.selection_model().size());
2354 EXPECT_EQ(4, strip.count()); 2349 EXPECT_EQ(4, strip.count());
2355 ASSERT_EQ(3, observer.GetStateCount()); 2350 ASSERT_EQ(3, observer.GetStateCount());
2356 ASSERT_EQ(observer.GetStateAt(0)->action, 2351 ASSERT_EQ(observer.GetStateAt(0).action,
2357 MockTabStripModelObserver::DEACTIVATE); 2352 MockTabStripModelObserver::DEACTIVATE);
2358 ASSERT_EQ(observer.GetStateAt(1)->action, 2353 ASSERT_EQ(observer.GetStateAt(1).action,
2359 MockTabStripModelObserver::ACTIVATE); 2354 MockTabStripModelObserver::ACTIVATE);
2360 ASSERT_EQ(observer.GetStateAt(2)->action, 2355 ASSERT_EQ(observer.GetStateAt(2).action,
2361 MockTabStripModelObserver::SELECT); 2356 MockTabStripModelObserver::SELECT);
2362 observer.ClearStates(); 2357 observer.ClearStates();
2363 2358
2364 // Toggle the first tab back to selected and active. 2359 // Toggle the first tab back to selected and active.
2365 strip.ToggleSelectionAt(0); 2360 strip.ToggleSelectionAt(0);
2366 EXPECT_EQ(0, strip.active_index()); 2361 EXPECT_EQ(0, strip.active_index());
2367 EXPECT_EQ(4U, strip.selection_model().size()); 2362 EXPECT_EQ(4U, strip.selection_model().size());
2368 EXPECT_EQ(4, strip.count()); 2363 EXPECT_EQ(4, strip.count());
2369 ASSERT_EQ(3, observer.GetStateCount()); 2364 ASSERT_EQ(3, observer.GetStateCount());
2370 ASSERT_EQ(observer.GetStateAt(0)->action, 2365 ASSERT_EQ(observer.GetStateAt(0).action,
2371 MockTabStripModelObserver::DEACTIVATE); 2366 MockTabStripModelObserver::DEACTIVATE);
2372 ASSERT_EQ(observer.GetStateAt(1)->action, 2367 ASSERT_EQ(observer.GetStateAt(1).action,
2373 MockTabStripModelObserver::ACTIVATE); 2368 MockTabStripModelObserver::ACTIVATE);
2374 ASSERT_EQ(observer.GetStateAt(2)->action, 2369 ASSERT_EQ(observer.GetStateAt(2).action,
2375 MockTabStripModelObserver::SELECT); 2370 MockTabStripModelObserver::SELECT);
2376 observer.ClearStates(); 2371 observer.ClearStates();
2377 2372
2378 // Closing one of the selected tabs, not the active one. 2373 // Closing one of the selected tabs, not the active one.
2379 strip.CloseTabContentsAt(1, TabStripModel::CLOSE_NONE); 2374 strip.CloseTabContentsAt(1, TabStripModel::CLOSE_NONE);
2380 EXPECT_EQ(3, strip.count()); 2375 EXPECT_EQ(3, strip.count());
2381 ASSERT_EQ(3, observer.GetStateCount()); 2376 ASSERT_EQ(3, observer.GetStateCount());
2382 ASSERT_EQ(observer.GetStateAt(0)->action, 2377 ASSERT_EQ(observer.GetStateAt(0).action,
2383 MockTabStripModelObserver::CLOSE); 2378 MockTabStripModelObserver::CLOSE);
2384 ASSERT_EQ(observer.GetStateAt(1)->action, 2379 ASSERT_EQ(observer.GetStateAt(1).action,
2385 MockTabStripModelObserver::DETACH); 2380 MockTabStripModelObserver::DETACH);
2386 ASSERT_EQ(observer.GetStateAt(2)->action, 2381 ASSERT_EQ(observer.GetStateAt(2).action,
2387 MockTabStripModelObserver::SELECT); 2382 MockTabStripModelObserver::SELECT);
2388 observer.ClearStates(); 2383 observer.ClearStates();
2389 2384
2390 // Closing the active tab, while there are others tabs selected. 2385 // Closing the active tab, while there are others tabs selected.
2391 strip.CloseTabContentsAt(0, TabStripModel::CLOSE_NONE); 2386 strip.CloseTabContentsAt(0, TabStripModel::CLOSE_NONE);
2392 EXPECT_EQ(2, strip.count()); 2387 EXPECT_EQ(2, strip.count());
2393 ASSERT_EQ(5, observer.GetStateCount()); 2388 ASSERT_EQ(5, observer.GetStateCount());
2394 ASSERT_EQ(observer.GetStateAt(0)->action, 2389 ASSERT_EQ(observer.GetStateAt(0).action,
2395 MockTabStripModelObserver::CLOSE); 2390 MockTabStripModelObserver::CLOSE);
2396 ASSERT_EQ(observer.GetStateAt(1)->action, 2391 ASSERT_EQ(observer.GetStateAt(1).action,
2397 MockTabStripModelObserver::DETACH); 2392 MockTabStripModelObserver::DETACH);
2398 ASSERT_EQ(observer.GetStateAt(2)->action, 2393 ASSERT_EQ(observer.GetStateAt(2).action,
2399 MockTabStripModelObserver::DEACTIVATE); 2394 MockTabStripModelObserver::DEACTIVATE);
2400 ASSERT_EQ(observer.GetStateAt(3)->action, 2395 ASSERT_EQ(observer.GetStateAt(3).action,
2401 MockTabStripModelObserver::ACTIVATE); 2396 MockTabStripModelObserver::ACTIVATE);
2402 ASSERT_EQ(observer.GetStateAt(4)->action, 2397 ASSERT_EQ(observer.GetStateAt(4).action,
2403 MockTabStripModelObserver::SELECT); 2398 MockTabStripModelObserver::SELECT);
2404 observer.ClearStates(); 2399 observer.ClearStates();
2405 2400
2406 // Active tab is at 0, deselecting all but the active tab. 2401 // Active tab is at 0, deselecting all but the active tab.
2407 strip.ToggleSelectionAt(1); 2402 strip.ToggleSelectionAt(1);
2408 ASSERT_EQ(1, observer.GetStateCount()); 2403 ASSERT_EQ(1, observer.GetStateCount());
2409 ASSERT_EQ(observer.GetStateAt(0)->action, 2404 ASSERT_EQ(observer.GetStateAt(0).action,
2410 MockTabStripModelObserver::SELECT); 2405 MockTabStripModelObserver::SELECT);
2411 observer.ClearStates(); 2406 observer.ClearStates();
2412 2407
2413 // Attempting to deselect the only selected and therefore active tab, 2408 // Attempting to deselect the only selected and therefore active tab,
2414 // it is ignored (no notifications being sent) and tab at 0 remains selected 2409 // it is ignored (no notifications being sent) and tab at 0 remains selected
2415 // and active. 2410 // and active.
2416 strip.ToggleSelectionAt(0); 2411 strip.ToggleSelectionAt(0);
2417 ASSERT_EQ(0, observer.GetStateCount()); 2412 ASSERT_EQ(0, observer.GetStateCount());
2418 2413
2419 strip.RemoveObserver(&observer); 2414 strip.RemoveObserver(&observer);
(...skipping 21 matching lines...) Expand all
2441 ASSERT_EQ(1, observer.GetStateCount()); 2436 ASSERT_EQ(1, observer.GetStateCount());
2442 MockTabStripModelObserver::State s( 2437 MockTabStripModelObserver::State s(
2443 contents2, 1, MockTabStripModelObserver::SELECT); 2438 contents2, 1, MockTabStripModelObserver::SELECT);
2444 s.src_contents = contents2; 2439 s.src_contents = contents2;
2445 s.src_index = 1; 2440 s.src_index = 1;
2446 s.user_gesture = false; 2441 s.user_gesture = false;
2447 EXPECT_TRUE(observer.StateEquals(0, s)); 2442 EXPECT_TRUE(observer.StateEquals(0, s));
2448 strip.RemoveObserver(&observer); 2443 strip.RemoveObserver(&observer);
2449 strip.CloseAllTabs(); 2444 strip.CloseAllTabs();
2450 } 2445 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698