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