|  | // Copyright 2020 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include <vector> | 
|  |  | 
|  | #include "ui/gfx/selection_model.h" | 
|  |  | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  | #include "ui/gfx/range/range.h" | 
|  |  | 
|  | namespace gfx { | 
|  |  | 
|  | TEST(SelectionModelTest, Construction) { | 
|  | { | 
|  | SelectionModel selection_model; | 
|  | EXPECT_EQ(selection_model.selection(), Range(0)); | 
|  | EXPECT_EQ(selection_model.caret_pos(), 0u); | 
|  | EXPECT_EQ(selection_model.secondary_selections(), std::vector<Range>()); | 
|  | } | 
|  | { | 
|  | SelectionModel selection_model{5, CURSOR_FORWARD}; | 
|  | EXPECT_EQ(selection_model.selection(), Range(5)); | 
|  | EXPECT_EQ(selection_model.caret_pos(), 5u); | 
|  | EXPECT_EQ(selection_model.secondary_selections(), std::vector<Range>()); | 
|  | } | 
|  | { | 
|  | SelectionModel selection_model{{3, 2}, CURSOR_BACKWARD}; | 
|  | EXPECT_EQ(selection_model.selection(), Range(3, 2)); | 
|  | EXPECT_EQ(selection_model.caret_pos(), 2u); | 
|  | EXPECT_EQ(selection_model.secondary_selections(), std::vector<Range>()); | 
|  | } | 
|  | { | 
|  | SelectionModel selection_model{{{2, 3}, {5, 5}, {1, 0}}, CURSOR_BACKWARD}; | 
|  | EXPECT_EQ(selection_model.selection(), Range(2, 3)); | 
|  | EXPECT_EQ(selection_model.caret_pos(), 3u); | 
|  | EXPECT_EQ(selection_model.secondary_selections(), | 
|  | std::vector<Range>({{5, 5}, {1, 0}})); | 
|  | } | 
|  | } | 
|  |  | 
|  | TEST(SelectionModelTest, AddSecondarySelection) { | 
|  | SelectionModel selection_model; | 
|  | selection_model.AddSecondarySelection({5, 6}); | 
|  | selection_model.AddSecondarySelection({7, 6}); | 
|  | selection_model.AddSecondarySelection({8, 8}); | 
|  | EXPECT_EQ(selection_model.selection(), Range(0)); | 
|  | EXPECT_EQ(selection_model.caret_pos(), 0u); | 
|  | EXPECT_EQ(selection_model.secondary_selections(), | 
|  | std::vector<Range>({{5, 6}, {7, 6}, {8, 8}})); | 
|  | } | 
|  |  | 
|  | TEST(SelectionModelTest, GetAllSelections) { | 
|  | SelectionModel selection_model{{3, 2}, CURSOR_BACKWARD}; | 
|  | selection_model.AddSecondarySelection({5, 6}); | 
|  | selection_model.AddSecondarySelection({7, 6}); | 
|  | selection_model.AddSecondarySelection({8, 8}); | 
|  | EXPECT_EQ(selection_model.GetAllSelections(), | 
|  | std::vector<Range>({{3, 2}, {5, 6}, {7, 6}, {8, 8}})); | 
|  | } | 
|  |  | 
|  | TEST(SelectionModelTest, EqualityOperators) { | 
|  | SelectionModel selection_model{{3, 2}, CURSOR_BACKWARD}; | 
|  | selection_model.AddSecondarySelection({5, 6}); | 
|  | selection_model.AddSecondarySelection({7, 6}); | 
|  | selection_model.AddSecondarySelection({8, 8}); | 
|  |  | 
|  | // Equal | 
|  | EXPECT_EQ(selection_model, | 
|  | SelectionModel({{3, 2}, {5, 6}, {7, 6}, {8, 8}}, CURSOR_BACKWARD)); | 
|  | // Unequal selection | 
|  | EXPECT_NE(selection_model, | 
|  | SelectionModel({{3, 3}, {5, 6}, {7, 6}, {8, 8}}, CURSOR_BACKWARD)); | 
|  | // Unequal secondary selections | 
|  | EXPECT_NE(selection_model, | 
|  | SelectionModel({{3, 2}, {5, 6}, {7, 6}, {9, 8}}, CURSOR_BACKWARD)); | 
|  | // Unequal cursor affinity | 
|  | EXPECT_NE(selection_model, | 
|  | SelectionModel({{3, 2}, {5, 6}, {7, 6}, {8, 8}}, CURSOR_FORWARD)); | 
|  | } | 
|  |  | 
|  | TEST(SelectionModelTest, ToString) { | 
|  | SelectionModel selection_model{{3, 2}, CURSOR_BACKWARD}; | 
|  | selection_model.AddSecondarySelection({5, 6}); | 
|  | selection_model.AddSecondarySelection({7, 6}); | 
|  | selection_model.AddSecondarySelection({8, 8}); | 
|  | EXPECT_EQ(selection_model.ToString(), "{{3,2},BACKWARD,{5,6},{7,6},8}"); | 
|  | } | 
|  |  | 
|  | }  // namespace gfx |