| Index: chrome/browser/back_forward_menu_model_unittest.cc
 | 
| ===================================================================
 | 
| --- chrome/browser/back_forward_menu_model_unittest.cc	(revision 68008)
 | 
| +++ chrome/browser/back_forward_menu_model_unittest.cc	(working copy)
 | 
| @@ -1,422 +0,0 @@
 | 
| -// 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 "chrome/browser/back_forward_menu_model.h"
 | 
| -
 | 
| -#include "base/path_service.h"
 | 
| -#include "base/string_util.h"
 | 
| -#include "base/utf_string_conversions.h"
 | 
| -#include "chrome/browser/profile_manager.h"
 | 
| -#include "chrome/browser/renderer_host/test/test_render_view_host.h"
 | 
| -#include "chrome/browser/tab_contents/navigation_controller.h"
 | 
| -#include "chrome/browser/tab_contents/navigation_entry.h"
 | 
| -#include "chrome/browser/tab_contents/tab_contents.h"
 | 
| -#include "chrome/browser/tab_contents/test_tab_contents.h"
 | 
| -#include "chrome/common/url_constants.h"
 | 
| -#include "testing/gtest/include/gtest/gtest.h"
 | 
| -
 | 
| -class BackFwdMenuModelTest : public RenderViewHostTestHarness {
 | 
| - public:
 | 
| -  void ValidateModel(BackForwardMenuModel* model, int history_items,
 | 
| -                     int chapter_stops) {
 | 
| -    int h = std::min(BackForwardMenuModel::kMaxHistoryItems, history_items);
 | 
| -    int c = std::min(BackForwardMenuModel::kMaxChapterStops, chapter_stops);
 | 
| -    EXPECT_EQ(h, model->GetHistoryItemCount());
 | 
| -    EXPECT_EQ(c, model->GetChapterStopCount(h));
 | 
| -    if (h > 0)
 | 
| -      h += 2;  // Separator and View History link.
 | 
| -    if (c > 0)
 | 
| -      ++c;
 | 
| -    EXPECT_EQ(h + c, model->GetItemCount());
 | 
| -  }
 | 
| -
 | 
| -  void LoadURLAndUpdateState(const char* url, const char* title) {
 | 
| -    NavigateAndCommit(GURL(url));
 | 
| -    controller().GetLastCommittedEntry()->set_title(UTF8ToUTF16(title));
 | 
| -  }
 | 
| -
 | 
| -  // Navigate back or forward the given amount and commits the entry (which
 | 
| -  // will be pending after we ask to navigate there).
 | 
| -  void NavigateToOffset(int offset) {
 | 
| -    controller().GoToOffset(offset);
 | 
| -    contents()->CommitPendingNavigation();
 | 
| -  }
 | 
| -
 | 
| -  // Same as NavigateToOffset but goes to an absolute index.
 | 
| -  void NavigateToIndex(int index) {
 | 
| -    controller().GoToIndex(index);
 | 
| -    contents()->CommitPendingNavigation();
 | 
| -  }
 | 
| -
 | 
| -  // Goes back/forward and commits the load.
 | 
| -  void GoBack() {
 | 
| -    controller().GoBack();
 | 
| -    contents()->CommitPendingNavigation();
 | 
| -  }
 | 
| -  void GoForward() {
 | 
| -    controller().GoForward();
 | 
| -    contents()->CommitPendingNavigation();
 | 
| -  }
 | 
| -};
 | 
| -
 | 
| -TEST_F(BackFwdMenuModelTest, BasicCase) {
 | 
| -  scoped_ptr<BackForwardMenuModel> back_model(new BackForwardMenuModel(
 | 
| -      NULL, BackForwardMenuModel::BACKWARD_MENU));
 | 
| -  back_model->set_test_tab_contents(contents());
 | 
| -
 | 
| -  scoped_ptr<BackForwardMenuModel> forward_model(new BackForwardMenuModel(
 | 
| -      NULL, BackForwardMenuModel::FORWARD_MENU));
 | 
| -  forward_model->set_test_tab_contents(contents());
 | 
| -
 | 
| -  EXPECT_EQ(0, back_model->GetItemCount());
 | 
| -  EXPECT_EQ(0, forward_model->GetItemCount());
 | 
| -  EXPECT_FALSE(back_model->ItemHasCommand(1));
 | 
| -
 | 
| -  // Seed the controller with a few URLs
 | 
| -  LoadURLAndUpdateState("http://www.a.com/1", "A1");
 | 
| -  LoadURLAndUpdateState("http://www.a.com/2", "A2");
 | 
| -  LoadURLAndUpdateState("http://www.a.com/3", "A3");
 | 
| -  LoadURLAndUpdateState("http://www.b.com/1", "B1");
 | 
| -  LoadURLAndUpdateState("http://www.b.com/2", "B2");
 | 
| -  LoadURLAndUpdateState("http://www.c.com/1", "C1");
 | 
| -  LoadURLAndUpdateState("http://www.c.com/2", "C2");
 | 
| -  LoadURLAndUpdateState("http://www.c.com/3", "C3");
 | 
| -
 | 
| -  // There're two more items here: a separator and a "Show Full History".
 | 
| -  EXPECT_EQ(9, back_model->GetItemCount());
 | 
| -  EXPECT_EQ(0, forward_model->GetItemCount());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("C2"), back_model->GetLabelAt(0));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("A1"), back_model->GetLabelAt(6));
 | 
| -  EXPECT_EQ(back_model->GetShowFullHistoryLabel(),
 | 
| -            back_model->GetLabelAt(8));
 | 
| -
 | 
| -  EXPECT_TRUE(back_model->ItemHasCommand(0));
 | 
| -  EXPECT_TRUE(back_model->ItemHasCommand(6));
 | 
| -  EXPECT_TRUE(back_model->IsSeparator(7));
 | 
| -  EXPECT_TRUE(back_model->ItemHasCommand(8));
 | 
| -  EXPECT_FALSE(back_model->ItemHasCommand(9));
 | 
| -  EXPECT_FALSE(back_model->ItemHasCommand(9));
 | 
| -
 | 
| -  NavigateToOffset(-7);
 | 
| -
 | 
| -  EXPECT_EQ(0, back_model->GetItemCount());
 | 
| -  EXPECT_EQ(9, forward_model->GetItemCount());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("A2"), forward_model->GetLabelAt(0));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("C3"), forward_model->GetLabelAt(6));
 | 
| -  EXPECT_EQ(forward_model->GetShowFullHistoryLabel(),
 | 
| -            forward_model->GetLabelAt(8));
 | 
| -
 | 
| -  EXPECT_TRUE(forward_model->ItemHasCommand(0));
 | 
| -  EXPECT_TRUE(forward_model->ItemHasCommand(6));
 | 
| -  EXPECT_TRUE(forward_model->IsSeparator(7));
 | 
| -  EXPECT_TRUE(forward_model->ItemHasCommand(8));
 | 
| -  EXPECT_FALSE(forward_model->ItemHasCommand(7));
 | 
| -  EXPECT_FALSE(forward_model->ItemHasCommand(9));
 | 
| -
 | 
| -  NavigateToOffset(4);
 | 
| -
 | 
| -  EXPECT_EQ(6, back_model->GetItemCount());
 | 
| -  EXPECT_EQ(5, forward_model->GetItemCount());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("B1"), back_model->GetLabelAt(0));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("A1"), back_model->GetLabelAt(3));
 | 
| -  EXPECT_EQ(back_model->GetShowFullHistoryLabel(),
 | 
| -            back_model->GetLabelAt(5));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("C1"), forward_model->GetLabelAt(0));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("C3"), forward_model->GetLabelAt(2));
 | 
| -  EXPECT_EQ(forward_model->GetShowFullHistoryLabel(),
 | 
| -            forward_model->GetLabelAt(4));
 | 
| -}
 | 
| -
 | 
| -TEST_F(BackFwdMenuModelTest, MaxItemsTest) {
 | 
| -  scoped_ptr<BackForwardMenuModel> back_model(new BackForwardMenuModel(
 | 
| -      NULL, BackForwardMenuModel::BACKWARD_MENU));
 | 
| -  back_model->set_test_tab_contents(contents());
 | 
| -
 | 
| -  scoped_ptr<BackForwardMenuModel> forward_model(new BackForwardMenuModel(
 | 
| -      NULL, BackForwardMenuModel::FORWARD_MENU));
 | 
| -  forward_model->set_test_tab_contents(contents());
 | 
| -
 | 
| -  // Seed the controller with 32 URLs
 | 
| -  LoadURLAndUpdateState("http://www.a.com/1", "A1");
 | 
| -  LoadURLAndUpdateState("http://www.a.com/2", "A2");
 | 
| -  LoadURLAndUpdateState("http://www.a.com/3", "A3");
 | 
| -  LoadURLAndUpdateState("http://www.b.com/1", "B1");
 | 
| -  LoadURLAndUpdateState("http://www.b.com/2", "B2");
 | 
| -  LoadURLAndUpdateState("http://www.b.com/3", "B3");
 | 
| -  LoadURLAndUpdateState("http://www.c.com/1", "C1");
 | 
| -  LoadURLAndUpdateState("http://www.c.com/2", "C2");
 | 
| -  LoadURLAndUpdateState("http://www.c.com/3", "C3");
 | 
| -  LoadURLAndUpdateState("http://www.d.com/1", "D1");
 | 
| -  LoadURLAndUpdateState("http://www.d.com/2", "D2");
 | 
| -  LoadURLAndUpdateState("http://www.d.com/3", "D3");
 | 
| -  LoadURLAndUpdateState("http://www.e.com/1", "E1");
 | 
| -  LoadURLAndUpdateState("http://www.e.com/2", "E2");
 | 
| -  LoadURLAndUpdateState("http://www.e.com/3", "E3");
 | 
| -  LoadURLAndUpdateState("http://www.f.com/1", "F1");
 | 
| -  LoadURLAndUpdateState("http://www.f.com/2", "F2");
 | 
| -  LoadURLAndUpdateState("http://www.f.com/3", "F3");
 | 
| -  LoadURLAndUpdateState("http://www.g.com/1", "G1");
 | 
| -  LoadURLAndUpdateState("http://www.g.com/2", "G2");
 | 
| -  LoadURLAndUpdateState("http://www.g.com/3", "G3");
 | 
| -  LoadURLAndUpdateState("http://www.h.com/1", "H1");
 | 
| -  LoadURLAndUpdateState("http://www.h.com/2", "H2");
 | 
| -  LoadURLAndUpdateState("http://www.h.com/3", "H3");
 | 
| -  LoadURLAndUpdateState("http://www.i.com/1", "I1");
 | 
| -  LoadURLAndUpdateState("http://www.i.com/2", "I2");
 | 
| -  LoadURLAndUpdateState("http://www.i.com/3", "I3");
 | 
| -  LoadURLAndUpdateState("http://www.j.com/1", "J1");
 | 
| -  LoadURLAndUpdateState("http://www.j.com/2", "J2");
 | 
| -  LoadURLAndUpdateState("http://www.j.com/3", "J3");
 | 
| -  LoadURLAndUpdateState("http://www.k.com/1", "K1");
 | 
| -  LoadURLAndUpdateState("http://www.k.com/2", "K2");
 | 
| -
 | 
| -  // Also there're two more for a separator and a "Show Full History".
 | 
| -  int chapter_stop_offset = 6;
 | 
| -  EXPECT_EQ(BackForwardMenuModel::kMaxHistoryItems + 2 + chapter_stop_offset,
 | 
| -            back_model->GetItemCount());
 | 
| -  EXPECT_EQ(0, forward_model->GetItemCount());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("K1"), back_model->GetLabelAt(0));
 | 
| -  EXPECT_EQ(back_model->GetShowFullHistoryLabel(),
 | 
| -      back_model->GetLabelAt(BackForwardMenuModel::kMaxHistoryItems + 1 +
 | 
| -                               chapter_stop_offset));
 | 
| -
 | 
| -  // Test for out of bounds (beyond Show Full History).
 | 
| -  EXPECT_FALSE(back_model->ItemHasCommand(
 | 
| -      BackForwardMenuModel::kMaxHistoryItems + chapter_stop_offset + 2));
 | 
| -
 | 
| -  EXPECT_TRUE(back_model->ItemHasCommand(
 | 
| -              BackForwardMenuModel::kMaxHistoryItems - 1));
 | 
| -  EXPECT_TRUE(back_model->IsSeparator(
 | 
| -              BackForwardMenuModel::kMaxHistoryItems));
 | 
| -
 | 
| -  NavigateToIndex(0);
 | 
| -
 | 
| -  EXPECT_EQ(BackForwardMenuModel::kMaxHistoryItems + 2 + chapter_stop_offset,
 | 
| -            forward_model->GetItemCount());
 | 
| -  EXPECT_EQ(0, back_model->GetItemCount());
 | 
| -  EXPECT_EQ(ASCIIToUTF16("A2"), forward_model->GetLabelAt(0));
 | 
| -  EXPECT_EQ(forward_model->GetShowFullHistoryLabel(),
 | 
| -      forward_model->GetLabelAt(BackForwardMenuModel::kMaxHistoryItems + 1 +
 | 
| -                                    chapter_stop_offset));
 | 
| -
 | 
| -  // Out of bounds
 | 
| -  EXPECT_FALSE(forward_model->ItemHasCommand(
 | 
| -      BackForwardMenuModel::kMaxHistoryItems + 2 + chapter_stop_offset));
 | 
| -
 | 
| -  EXPECT_TRUE(forward_model->ItemHasCommand(
 | 
| -      BackForwardMenuModel::kMaxHistoryItems - 1));
 | 
| -  EXPECT_TRUE(forward_model->IsSeparator(
 | 
| -      BackForwardMenuModel::kMaxHistoryItems));
 | 
| -}
 | 
| -
 | 
| -TEST_F(BackFwdMenuModelTest, ChapterStops) {
 | 
| -  scoped_ptr<BackForwardMenuModel> back_model(new BackForwardMenuModel(
 | 
| -    NULL, BackForwardMenuModel::BACKWARD_MENU));
 | 
| -  back_model->set_test_tab_contents(contents());
 | 
| -
 | 
| -  scoped_ptr<BackForwardMenuModel> forward_model(new BackForwardMenuModel(
 | 
| -      NULL, BackForwardMenuModel::FORWARD_MENU));
 | 
| -  forward_model->set_test_tab_contents(contents());
 | 
| -
 | 
| -  // Seed the controller with 32 URLs.
 | 
| -  int i = 0;
 | 
| -  LoadURLAndUpdateState("http://www.a.com/1", "A1");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  LoadURLAndUpdateState("http://www.a.com/2", "A2");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  LoadURLAndUpdateState("http://www.a.com/3", "A3");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  LoadURLAndUpdateState("http://www.b.com/1", "B1");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  LoadURLAndUpdateState("http://www.b.com/2", "B2");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  // i = 5
 | 
| -  LoadURLAndUpdateState("http://www.b.com/3", "B3");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  LoadURLAndUpdateState("http://www.c.com/1", "C1");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  LoadURLAndUpdateState("http://www.c.com/2", "C2");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  LoadURLAndUpdateState("http://www.c.com/3", "C3");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  LoadURLAndUpdateState("http://www.d.com/1", "D1");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  // i = 10
 | 
| -  LoadURLAndUpdateState("http://www.d.com/2", "D2");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  LoadURLAndUpdateState("http://www.d.com/3", "D3");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  LoadURLAndUpdateState("http://www.e.com/1", "E1");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  LoadURLAndUpdateState("http://www.e.com/2", "E2");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  LoadURLAndUpdateState("http://www.e.com/3", "E3");
 | 
| -  ValidateModel(back_model.get(), i++, 0);
 | 
| -  // i = 15
 | 
| -  LoadURLAndUpdateState("http://www.f.com/1", "F1");
 | 
| -  ValidateModel(back_model.get(), i++, 1);
 | 
| -  LoadURLAndUpdateState("http://www.f.com/2", "F2");
 | 
| -  ValidateModel(back_model.get(), i++, 1);
 | 
| -  LoadURLAndUpdateState("http://www.f.com/3", "F3");
 | 
| -  ValidateModel(back_model.get(), i++, 1);
 | 
| -  LoadURLAndUpdateState("http://www.g.com/1", "G1");
 | 
| -  ValidateModel(back_model.get(), i++, 2);
 | 
| -  LoadURLAndUpdateState("http://www.g.com/2", "G2");
 | 
| -  ValidateModel(back_model.get(), i++, 2);
 | 
| -  // i = 20
 | 
| -  LoadURLAndUpdateState("http://www.g.com/3", "G3");
 | 
| -  ValidateModel(back_model.get(), i++, 2);
 | 
| -  LoadURLAndUpdateState("http://www.h.com/1", "H1");
 | 
| -  ValidateModel(back_model.get(), i++, 3);
 | 
| -  LoadURLAndUpdateState("http://www.h.com/2", "H2");
 | 
| -  ValidateModel(back_model.get(), i++, 3);
 | 
| -  LoadURLAndUpdateState("http://www.h.com/3", "H3");
 | 
| -  ValidateModel(back_model.get(), i++, 3);
 | 
| -  LoadURLAndUpdateState("http://www.i.com/1", "I1");
 | 
| -  ValidateModel(back_model.get(), i++, 4);
 | 
| -  // i = 25
 | 
| -  LoadURLAndUpdateState("http://www.i.com/2", "I2");
 | 
| -  ValidateModel(back_model.get(), i++, 4);
 | 
| -  LoadURLAndUpdateState("http://www.i.com/3", "I3");
 | 
| -  ValidateModel(back_model.get(), i++, 4);
 | 
| -  LoadURLAndUpdateState("http://www.j.com/1", "J1");
 | 
| -  ValidateModel(back_model.get(), i++, 5);
 | 
| -  LoadURLAndUpdateState("http://www.j.com/2", "J2");
 | 
| -  ValidateModel(back_model.get(), i++, 5);
 | 
| -  LoadURLAndUpdateState("http://www.j.com/3", "J3");
 | 
| -  ValidateModel(back_model.get(), i++, 5);
 | 
| -  // i = 30
 | 
| -  LoadURLAndUpdateState("http://www.k.com/1", "K1");
 | 
| -  ValidateModel(back_model.get(), i++, 6);
 | 
| -  LoadURLAndUpdateState("http://www.k.com/2", "K2");
 | 
| -  ValidateModel(back_model.get(), i++, 6);
 | 
| -  // i = 32
 | 
| -  LoadURLAndUpdateState("http://www.k.com/3", "K3");
 | 
| -  ValidateModel(back_model.get(), i++, 6);
 | 
| -
 | 
| -  // A chapter stop is defined as the last page the user
 | 
| -  // browsed to within the same domain.
 | 
| -
 | 
| -  // Check to see if the chapter stops have the right labels.
 | 
| -  int index = BackForwardMenuModel::kMaxHistoryItems;
 | 
| -  // Empty string indicates item is a separator.
 | 
| -  EXPECT_EQ(ASCIIToUTF16(""), back_model->GetLabelAt(index++));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("F3"), back_model->GetLabelAt(index++));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("E3"), back_model->GetLabelAt(index++));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("D3"), back_model->GetLabelAt(index++));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("C3"), back_model->GetLabelAt(index++));
 | 
| -  // The menu should only show a maximum of 5 chapter stops.
 | 
| -  EXPECT_EQ(ASCIIToUTF16("B3"), back_model->GetLabelAt(index));
 | 
| -  // Empty string indicates item is a separator.
 | 
| -  EXPECT_EQ(ASCIIToUTF16(""), back_model->GetLabelAt(index + 1));
 | 
| -  EXPECT_EQ(back_model->GetShowFullHistoryLabel(),
 | 
| -            back_model->GetLabelAt(index + 2));
 | 
| -
 | 
| -  // If we go back two we should still see the same chapter stop at the end.
 | 
| -  GoBack();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("B3"), back_model->GetLabelAt(index));
 | 
| -  GoBack();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("B3"), back_model->GetLabelAt(index));
 | 
| -  // But if we go back again, it should change.
 | 
| -  GoBack();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("A3"), back_model->GetLabelAt(index));
 | 
| -  GoBack();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("A3"), back_model->GetLabelAt(index));
 | 
| -  GoBack();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("A3"), back_model->GetLabelAt(index));
 | 
| -  GoBack();
 | 
| -  // It is now a separator.
 | 
| -  EXPECT_EQ(ASCIIToUTF16(""), back_model->GetLabelAt(index));
 | 
| -  // Undo our position change.
 | 
| -  NavigateToOffset(6);
 | 
| -
 | 
| -  // Go back enough to make sure no chapter stops should appear.
 | 
| -  NavigateToOffset(-BackForwardMenuModel::kMaxHistoryItems);
 | 
| -  ValidateModel(forward_model.get(), BackForwardMenuModel::kMaxHistoryItems, 0);
 | 
| -  // Go forward (still no chapter stop)
 | 
| -  GoForward();
 | 
| -  ValidateModel(forward_model.get(),
 | 
| -                BackForwardMenuModel::kMaxHistoryItems - 1, 0);
 | 
| -  // Go back two (one chapter stop should show up)
 | 
| -  GoBack();
 | 
| -  GoBack();
 | 
| -  ValidateModel(forward_model.get(),
 | 
| -                BackForwardMenuModel::kMaxHistoryItems, 1);
 | 
| -
 | 
| -  // Go to beginning.
 | 
| -  NavigateToIndex(0);
 | 
| -
 | 
| -  // Check to see if the chapter stops have the right labels.
 | 
| -  index = BackForwardMenuModel::kMaxHistoryItems;
 | 
| -  // Empty string indicates item is a separator.
 | 
| -  EXPECT_EQ(ASCIIToUTF16(""), forward_model->GetLabelAt(index++));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("E3"), forward_model->GetLabelAt(index++));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("F3"), forward_model->GetLabelAt(index++));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("G3"), forward_model->GetLabelAt(index++));
 | 
| -  EXPECT_EQ(ASCIIToUTF16("H3"), forward_model->GetLabelAt(index++));
 | 
| -  // The menu should only show a maximum of 5 chapter stops.
 | 
| -  EXPECT_EQ(ASCIIToUTF16("I3"), forward_model->GetLabelAt(index));
 | 
| -  // Empty string indicates item is a separator.
 | 
| -  EXPECT_EQ(ASCIIToUTF16(""), forward_model->GetLabelAt(index + 1));
 | 
| -  EXPECT_EQ(forward_model->GetShowFullHistoryLabel(),
 | 
| -      forward_model->GetLabelAt(index + 2));
 | 
| -
 | 
| -  // If we advance one we should still see the same chapter stop at the end.
 | 
| -  GoForward();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("I3"), forward_model->GetLabelAt(index));
 | 
| -  // But if we advance one again, it should change.
 | 
| -  GoForward();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("J3"), forward_model->GetLabelAt(index));
 | 
| -  GoForward();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("J3"), forward_model->GetLabelAt(index));
 | 
| -  GoForward();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("J3"), forward_model->GetLabelAt(index));
 | 
| -  GoForward();
 | 
| -  EXPECT_EQ(ASCIIToUTF16("K3"), forward_model->GetLabelAt(index));
 | 
| -
 | 
| -  // Now test the boundary cases by using the chapter stop function directly.
 | 
| -  // Out of bounds, first too far right (incrementing), then too far left.
 | 
| -  EXPECT_EQ(-1, back_model->GetIndexOfNextChapterStop(33, false));
 | 
| -  EXPECT_EQ(-1, back_model->GetIndexOfNextChapterStop(-1, true));
 | 
| -  // Test being at end and going right, then at beginning going left.
 | 
| -  EXPECT_EQ(-1, back_model->GetIndexOfNextChapterStop(32, true));
 | 
| -  EXPECT_EQ(-1, back_model->GetIndexOfNextChapterStop(0, false));
 | 
| -  // Test success: beginning going right and end going left.
 | 
| -  EXPECT_EQ(2,  back_model->GetIndexOfNextChapterStop(0, true));
 | 
| -  EXPECT_EQ(29, back_model->GetIndexOfNextChapterStop(32, false));
 | 
| -  // Now see when the chapter stops begin to show up.
 | 
| -  EXPECT_EQ(-1, back_model->GetIndexOfNextChapterStop(1, false));
 | 
| -  EXPECT_EQ(-1, back_model->GetIndexOfNextChapterStop(2, false));
 | 
| -  EXPECT_EQ(2,  back_model->GetIndexOfNextChapterStop(3, false));
 | 
| -  // Now see when the chapter stops end.
 | 
| -  EXPECT_EQ(32, back_model->GetIndexOfNextChapterStop(30, true));
 | 
| -  EXPECT_EQ(32, back_model->GetIndexOfNextChapterStop(31, true));
 | 
| -  EXPECT_EQ(-1, back_model->GetIndexOfNextChapterStop(32, true));
 | 
| -
 | 
| -  // Bug found during review (two different sites, but first wasn't considered
 | 
| -  // a chapter-stop).
 | 
| -  // Go to A1;
 | 
| -  NavigateToIndex(0);
 | 
| -  LoadURLAndUpdateState("http://www.b.com/1", "B1");
 | 
| -  EXPECT_EQ(0, back_model->GetIndexOfNextChapterStop(1, false));
 | 
| -  EXPECT_EQ(1, back_model->GetIndexOfNextChapterStop(0, true));
 | 
| -
 | 
| -  // Now see if it counts 'www.x.com' and 'mail.x.com' as same domain, which
 | 
| -  // it should.
 | 
| -  // Go to A1.
 | 
| -  NavigateToIndex(0);
 | 
| -  LoadURLAndUpdateState("http://mail.a.com/2", "A2-mai");
 | 
| -  LoadURLAndUpdateState("http://www.b.com/1", "B1");
 | 
| -  LoadURLAndUpdateState("http://mail.b.com/2", "B2-mai");
 | 
| -  LoadURLAndUpdateState("http://new.site.com", "new");
 | 
| -  EXPECT_EQ(1, back_model->GetIndexOfNextChapterStop(0, true));
 | 
| -  EXPECT_EQ(3, back_model->GetIndexOfNextChapterStop(1, true));
 | 
| -  EXPECT_EQ(3, back_model->GetIndexOfNextChapterStop(2, true));
 | 
| -  EXPECT_EQ(4, back_model->GetIndexOfNextChapterStop(3, true));
 | 
| -  // And try backwards as well.
 | 
| -  EXPECT_EQ(3, back_model->GetIndexOfNextChapterStop(4, false));
 | 
| -  EXPECT_EQ(1, back_model->GetIndexOfNextChapterStop(3, false));
 | 
| -  EXPECT_EQ(1, back_model->GetIndexOfNextChapterStop(2, false));
 | 
| -  EXPECT_EQ(-1, back_model->GetIndexOfNextChapterStop(1, false));
 | 
| -}
 | 
| 
 |