1 // Copyright 2017 The Chromium Authors. All rights reserved. Use of
2 // this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "third_party/blink/renderer/core/editing/markers/spell_check_marker_list_impl.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "third_party/blink/renderer/core/editing/markers/spelling_marker.h"
9 #include "third_party/blink/renderer/core/editing/markers/spelling_marker_list_impl.h"
10 #include "third_party/blink/renderer/platform/heap/persistent.h"
11
12 namespace blink {
13
14 // This test class tests functionality implemented by SpellingMarkerListImpl and
15 // also functionality implemented by its parent class SpellCheckMarkerListImpl.
16
17 class SpellingMarkerListImplTest : public testing::Test {
18 protected:
SpellingMarkerListImplTest()19 SpellingMarkerListImplTest()
20 : marker_list_(MakeGarbageCollected<SpellingMarkerListImpl>()) {}
21
CreateMarker(unsigned start_offset,unsigned end_offset)22 DocumentMarker* CreateMarker(unsigned start_offset, unsigned end_offset) {
23 return MakeGarbageCollected<SpellingMarker>(start_offset, end_offset,
24 g_empty_string);
25 }
26
27 Persistent<SpellingMarkerListImpl> marker_list_;
28 };
29
30 // Test cases for functionality implemented by SpellingMarkerListImpl.
31
TEST_F(SpellingMarkerListImplTest,MarkerType)32 TEST_F(SpellingMarkerListImplTest, MarkerType) {
33 EXPECT_EQ(DocumentMarker::kSpelling, marker_list_->MarkerType());
34 }
35
36 // Test cases for functionality implemented by SpellCheckMarkerListImpl
37
TEST_F(SpellingMarkerListImplTest,AddSorting)38 TEST_F(SpellingMarkerListImplTest, AddSorting) {
39 // Insert some markers in an arbitrary order and verify that the list stays
40 // sorted
41 marker_list_->Add(CreateMarker(80, 85));
42 marker_list_->Add(CreateMarker(40, 45));
43 marker_list_->Add(CreateMarker(10, 15));
44 marker_list_->Add(CreateMarker(0, 5));
45 marker_list_->Add(CreateMarker(70, 75));
46 marker_list_->Add(CreateMarker(90, 95));
47 marker_list_->Add(CreateMarker(60, 65));
48 marker_list_->Add(CreateMarker(50, 55));
49 marker_list_->Add(CreateMarker(30, 35));
50 marker_list_->Add(CreateMarker(20, 25));
51
52 EXPECT_EQ(10u, marker_list_->GetMarkers().size());
53
54 EXPECT_EQ(0u, marker_list_->GetMarkers()[0]->StartOffset());
55 EXPECT_EQ(5u, marker_list_->GetMarkers()[0]->EndOffset());
56
57 EXPECT_EQ(10u, marker_list_->GetMarkers()[1]->StartOffset());
58 EXPECT_EQ(15u, marker_list_->GetMarkers()[1]->EndOffset());
59
60 EXPECT_EQ(20u, marker_list_->GetMarkers()[2]->StartOffset());
61 EXPECT_EQ(25u, marker_list_->GetMarkers()[2]->EndOffset());
62
63 EXPECT_EQ(30u, marker_list_->GetMarkers()[3]->StartOffset());
64 EXPECT_EQ(35u, marker_list_->GetMarkers()[3]->EndOffset());
65
66 EXPECT_EQ(40u, marker_list_->GetMarkers()[4]->StartOffset());
67 EXPECT_EQ(45u, marker_list_->GetMarkers()[4]->EndOffset());
68
69 EXPECT_EQ(50u, marker_list_->GetMarkers()[5]->StartOffset());
70 EXPECT_EQ(55u, marker_list_->GetMarkers()[5]->EndOffset());
71
72 EXPECT_EQ(60u, marker_list_->GetMarkers()[6]->StartOffset());
73 EXPECT_EQ(65u, marker_list_->GetMarkers()[6]->EndOffset());
74
75 EXPECT_EQ(70u, marker_list_->GetMarkers()[7]->StartOffset());
76 EXPECT_EQ(75u, marker_list_->GetMarkers()[7]->EndOffset());
77
78 EXPECT_EQ(80u, marker_list_->GetMarkers()[8]->StartOffset());
79 EXPECT_EQ(85u, marker_list_->GetMarkers()[8]->EndOffset());
80
81 EXPECT_EQ(90u, marker_list_->GetMarkers()[9]->StartOffset());
82 EXPECT_EQ(95u, marker_list_->GetMarkers()[9]->EndOffset());
83 }
84
TEST_F(SpellingMarkerListImplTest,AddIntoEmptyList)85 TEST_F(SpellingMarkerListImplTest, AddIntoEmptyList) {
86 marker_list_->Add(CreateMarker(5, 10));
87
88 EXPECT_EQ(1u, marker_list_->GetMarkers().size());
89
90 EXPECT_EQ(5u, marker_list_->GetMarkers()[0]->StartOffset());
91 EXPECT_EQ(10u, marker_list_->GetMarkers()[0]->EndOffset());
92 }
93
TEST_F(SpellingMarkerListImplTest,AddMarkerNonMerging)94 TEST_F(SpellingMarkerListImplTest, AddMarkerNonMerging) {
95 marker_list_->Add(CreateMarker(5, 10));
96 marker_list_->Add(CreateMarker(15, 20));
97
98 EXPECT_EQ(2u, marker_list_->GetMarkers().size());
99
100 EXPECT_EQ(5u, marker_list_->GetMarkers()[0]->StartOffset());
101 EXPECT_EQ(10u, marker_list_->GetMarkers()[0]->EndOffset());
102
103 EXPECT_EQ(15u, marker_list_->GetMarkers()[1]->StartOffset());
104 EXPECT_EQ(20u, marker_list_->GetMarkers()[1]->EndOffset());
105 }
106
TEST_F(SpellingMarkerListImplTest,AddMarkerMergingLater)107 TEST_F(SpellingMarkerListImplTest, AddMarkerMergingLater) {
108 marker_list_->Add(CreateMarker(5, 10));
109 marker_list_->Add(CreateMarker(0, 5));
110
111 EXPECT_EQ(1u, marker_list_->GetMarkers().size());
112
113 EXPECT_EQ(0u, marker_list_->GetMarkers()[0]->StartOffset());
114 EXPECT_EQ(10u, marker_list_->GetMarkers()[0]->EndOffset());
115 }
116
TEST_F(SpellingMarkerListImplTest,AddMarkerMergingEarlier)117 TEST_F(SpellingMarkerListImplTest, AddMarkerMergingEarlier) {
118 marker_list_->Add(CreateMarker(0, 5));
119 marker_list_->Add(CreateMarker(5, 10));
120
121 EXPECT_EQ(1u, marker_list_->GetMarkers().size());
122
123 EXPECT_EQ(0u, marker_list_->GetMarkers()[0]->StartOffset());
124 EXPECT_EQ(10u, marker_list_->GetMarkers()[0]->EndOffset());
125 }
126
TEST_F(SpellingMarkerListImplTest,AddMarkerMergingEarlierAndLater)127 TEST_F(SpellingMarkerListImplTest, AddMarkerMergingEarlierAndLater) {
128 marker_list_->Add(CreateMarker(0, 5));
129 marker_list_->Add(CreateMarker(10, 15));
130 marker_list_->Add(CreateMarker(5, 10));
131
132 EXPECT_EQ(1u, marker_list_->GetMarkers().size());
133
134 EXPECT_EQ(0u, marker_list_->GetMarkers()[0]->StartOffset());
135 EXPECT_EQ(15u, marker_list_->GetMarkers()[0]->EndOffset());
136 }
137
TEST_F(SpellingMarkerListImplTest,RemoveMarkersUnderWords)138 TEST_F(SpellingMarkerListImplTest, RemoveMarkersUnderWords) {
139 // wor
140 marker_list_->Add(CreateMarker(0, 3));
141
142 // word
143 marker_list_->Add(CreateMarker(4, 8));
144
145 // words
146 marker_list_->Add(CreateMarker(9, 14));
147
148 // word2
149 marker_list_->Add(CreateMarker(15, 20));
150
151 marker_list_->RemoveMarkersUnderWords("wor word words word2",
152 {"word", "word2"});
153 EXPECT_EQ(2u, marker_list_->GetMarkers().size());
154
155 EXPECT_EQ(0u, marker_list_->GetMarkers()[0]->StartOffset());
156 EXPECT_EQ(3u, marker_list_->GetMarkers()[0]->EndOffset());
157
158 EXPECT_EQ(9u, marker_list_->GetMarkers()[1]->StartOffset());
159 EXPECT_EQ(14u, marker_list_->GetMarkers()[1]->EndOffset());
160 }
161
162 } // namespace
163