• 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 #include <algorithm>
6 #include <string>
7 
8 #include "base/string_number_conversions.h"
9 #include "chrome/browser/tabs/tab_strip_selection_model.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 
12 typedef testing::Test TabStripSelectionModelTest;
13 
14 // Returns the state of the selection model as a string. The format is:
15 // 'active=X anchor=X selection=X X X...'.
StateAsString(const TabStripSelectionModel & model)16 static std::string StateAsString(const TabStripSelectionModel& model) {
17   std::string result = "active=" + base::IntToString(model.active()) +
18       " anchor=" + base::IntToString(model.anchor()) +
19       " selection=";
20   const TabStripSelectionModel::SelectedIndices& selection(
21       model.selected_indices());
22   for (size_t i = 0; i < selection.size(); ++i) {
23     if (i != 0)
24       result += " ";
25     result += base::IntToString(selection[i]);
26   }
27   return result;
28 }
29 
TEST_F(TabStripSelectionModelTest,InitialState)30 TEST_F(TabStripSelectionModelTest, InitialState) {
31   TabStripSelectionModel model;
32   EXPECT_EQ("active=-1 anchor=-1 selection=", StateAsString(model));
33   EXPECT_TRUE(model.empty());
34 }
35 
TEST_F(TabStripSelectionModelTest,SetSelectedIndex)36 TEST_F(TabStripSelectionModelTest, SetSelectedIndex) {
37   TabStripSelectionModel model;
38   model.SetSelectedIndex(2);
39   EXPECT_EQ("active=2 anchor=2 selection=2", StateAsString(model));
40   EXPECT_FALSE(model.empty());
41 }
42 
TEST_F(TabStripSelectionModelTest,IncrementFrom)43 TEST_F(TabStripSelectionModelTest, IncrementFrom) {
44   TabStripSelectionModel model;
45   model.SetSelectedIndex(1);
46   model.IncrementFrom(1);
47   EXPECT_EQ("active=2 anchor=2 selection=2", StateAsString(model));
48 
49   // Increment from 4. This shouldn't effect the selection as its past the
50   // end of the selection.
51   model.IncrementFrom(4);
52   EXPECT_EQ("active=2 anchor=2 selection=2", StateAsString(model));
53 }
54 
TEST_F(TabStripSelectionModelTest,DecrementFrom)55 TEST_F(TabStripSelectionModelTest, DecrementFrom) {
56   TabStripSelectionModel model;
57   model.SetSelectedIndex(2);
58   model.DecrementFrom(0);
59   EXPECT_EQ("active=1 anchor=1 selection=1", StateAsString(model));
60 
61   // Shift down from 1. As the selection as the index being removed, this should
62   // clear the selection.
63   model.DecrementFrom(1);
64   EXPECT_EQ("active=-1 anchor=-1 selection=", StateAsString(model));
65 
66   // Reset the selection to 2, and shift down from 4. This shouldn't do
67   // anything.
68   model.SetSelectedIndex(2);
69   model.DecrementFrom(4);
70   EXPECT_EQ("active=2 anchor=2 selection=2", StateAsString(model));
71 }
72 
TEST_F(TabStripSelectionModelTest,IsSelected)73 TEST_F(TabStripSelectionModelTest, IsSelected) {
74   TabStripSelectionModel model;
75   model.SetSelectedIndex(2);
76   EXPECT_FALSE(model.IsSelected(0));
77   EXPECT_TRUE(model.IsSelected(2));
78 }
79 
TEST_F(TabStripSelectionModelTest,AddIndexToSelected)80 TEST_F(TabStripSelectionModelTest, AddIndexToSelected) {
81   TabStripSelectionModel model;
82   model.AddIndexToSelection(2);
83   EXPECT_EQ("active=-1 anchor=-1 selection=2", StateAsString(model));
84 
85   model.AddIndexToSelection(4);
86   EXPECT_EQ("active=-1 anchor=-1 selection=2 4", StateAsString(model));
87 }
88 
TEST_F(TabStripSelectionModelTest,RemoveIndexFromSelection)89 TEST_F(TabStripSelectionModelTest, RemoveIndexFromSelection) {
90   TabStripSelectionModel model;
91   model.SetSelectedIndex(2);
92   model.AddIndexToSelection(4);
93   EXPECT_EQ("active=2 anchor=2 selection=2 4", StateAsString(model));
94 
95   model.RemoveIndexFromSelection(4);
96   EXPECT_EQ("active=2 anchor=2 selection=2", StateAsString(model));
97 
98   model.RemoveIndexFromSelection(2);
99   EXPECT_EQ("active=2 anchor=2 selection=", StateAsString(model));
100 }
101 
TEST_F(TabStripSelectionModelTest,Clear)102 TEST_F(TabStripSelectionModelTest, Clear) {
103   TabStripSelectionModel model;
104   model.SetSelectedIndex(2);
105 
106   model.Clear();
107   EXPECT_EQ("active=-1 anchor=-1 selection=", StateAsString(model));
108 }
109 
TEST_F(TabStripSelectionModelTest,MoveToLeft)110 TEST_F(TabStripSelectionModelTest, MoveToLeft) {
111   TabStripSelectionModel model;
112   model.SetSelectedIndex(0);
113   model.AddIndexToSelection(4);
114   model.AddIndexToSelection(10);
115   model.set_anchor(4);
116   model.set_active(4);
117   model.Move(4, 0);
118   EXPECT_EQ("active=0 anchor=0 selection=0 1 10", StateAsString(model));
119 }
120 
TEST_F(TabStripSelectionModelTest,MoveToRight)121 TEST_F(TabStripSelectionModelTest, MoveToRight) {
122   TabStripSelectionModel model;
123   model.SetSelectedIndex(0);
124   model.AddIndexToSelection(4);
125   model.AddIndexToSelection(10);
126   model.set_anchor(0);
127   model.set_active(0);
128   model.Move(0, 3);
129   EXPECT_EQ("active=3 anchor=3 selection=3 4 10", StateAsString(model));
130 }
131 
TEST_F(TabStripSelectionModelTest,Copy)132 TEST_F(TabStripSelectionModelTest, Copy) {
133   TabStripSelectionModel model;
134   model.SetSelectedIndex(0);
135   model.AddIndexToSelection(4);
136   model.AddIndexToSelection(10);
137   EXPECT_EQ("active=0 anchor=0 selection=0 4 10", StateAsString(model));
138   TabStripSelectionModel model2;
139   model2.Copy(model);
140   EXPECT_EQ("active=0 anchor=0 selection=0 4 10", StateAsString(model2));
141 }
142 
TEST_F(TabStripSelectionModelTest,AddSelectionFromAnchorTo)143 TEST_F(TabStripSelectionModelTest, AddSelectionFromAnchorTo) {
144   TabStripSelectionModel model;
145   model.SetSelectedIndex(2);
146 
147   model.AddSelectionFromAnchorTo(4);
148   EXPECT_EQ("active=4 anchor=2 selection=2 3 4", StateAsString(model));
149 
150   model.AddSelectionFromAnchorTo(0);
151   EXPECT_EQ("active=0 anchor=2 selection=0 1 2 3 4", StateAsString(model));
152 }
153