1 // Copyright 2017 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 "third_party/blink/renderer/core/editing/markers/composition_marker_list_impl.h"
6
7 #include "third_party/blink/renderer/core/editing/markers/composition_marker.h"
8 #include "third_party/blink/renderer/core/editing/markers/marker_test_utilities.h"
9 #include "third_party/blink/renderer/core/editing/testing/editing_test_base.h"
10
11 namespace blink {
12
13 class CompositionMarkerListImplTest : public EditingTestBase {
14 protected:
CompositionMarkerListImplTest()15 CompositionMarkerListImplTest()
16 : marker_list_(MakeGarbageCollected<CompositionMarkerListImpl>()) {}
17
CreateMarker(unsigned start_offset,unsigned end_offset)18 DocumentMarker* CreateMarker(unsigned start_offset, unsigned end_offset) {
19 return MakeGarbageCollected<CompositionMarker>(
20 start_offset, end_offset, Color::kTransparent,
21 ui::mojom::ImeTextSpanThickness::kThin,
22 ui::mojom::ImeTextSpanUnderlineStyle::kSolid, Color::kBlack,
23 Color::kBlack);
24 }
25
26 Persistent<CompositionMarkerListImpl> marker_list_;
27 };
28
TEST_F(CompositionMarkerListImplTest,AddOverlapping)29 TEST_F(CompositionMarkerListImplTest, AddOverlapping) {
30 // Add some overlapping markers in an arbitrary order and verify that the
31 // list stores them properly
32 marker_list_->Add(CreateMarker(40, 50));
33 marker_list_->Add(CreateMarker(10, 40));
34 marker_list_->Add(CreateMarker(20, 50));
35 marker_list_->Add(CreateMarker(10, 30));
36 marker_list_->Add(CreateMarker(10, 50));
37 marker_list_->Add(CreateMarker(30, 50));
38 marker_list_->Add(CreateMarker(30, 40));
39 marker_list_->Add(CreateMarker(10, 20));
40 marker_list_->Add(CreateMarker(20, 40));
41 marker_list_->Add(CreateMarker(20, 30));
42
43 DocumentMarkerVector markers = marker_list_->GetMarkers();
44 std::sort(markers.begin(), markers.end(), compare_markers);
45
46 EXPECT_EQ(10u, markers.size());
47
48 EXPECT_EQ(10u, markers[0]->StartOffset());
49 EXPECT_EQ(20u, markers[0]->EndOffset());
50
51 EXPECT_EQ(10u, markers[1]->StartOffset());
52 EXPECT_EQ(30u, markers[1]->EndOffset());
53
54 EXPECT_EQ(10u, markers[2]->StartOffset());
55 EXPECT_EQ(40u, markers[2]->EndOffset());
56
57 EXPECT_EQ(10u, markers[3]->StartOffset());
58 EXPECT_EQ(50u, markers[3]->EndOffset());
59
60 EXPECT_EQ(20u, markers[4]->StartOffset());
61 EXPECT_EQ(30u, markers[4]->EndOffset());
62
63 EXPECT_EQ(20u, markers[5]->StartOffset());
64 EXPECT_EQ(40u, markers[5]->EndOffset());
65
66 EXPECT_EQ(20u, markers[6]->StartOffset());
67 EXPECT_EQ(50u, markers[6]->EndOffset());
68
69 EXPECT_EQ(30u, markers[7]->StartOffset());
70 EXPECT_EQ(40u, markers[7]->EndOffset());
71
72 EXPECT_EQ(30u, markers[8]->StartOffset());
73 EXPECT_EQ(50u, markers[8]->EndOffset());
74
75 EXPECT_EQ(40u, markers[9]->StartOffset());
76 EXPECT_EQ(50u, markers[9]->EndOffset());
77 }
78
79 } // namespace blink
80