Index: third_party/WebKit/Source/core/editing/markers/DocumentMarkerControllerTest.cpp |
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerControllerTest.cpp b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerControllerTest.cpp |
index aa7769204061fd8ee8fd3392514a172e4c41be36..786a88c4fbfd804b7e5df7face8f779b681836dc 100644 |
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerControllerTest.cpp |
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerControllerTest.cpp |
@@ -30,18 +30,19 @@ |
#include "core/editing/markers/DocumentMarkerController.h" |
+#include <memory> |
#include "bindings/core/v8/ExceptionState.h" |
#include "core/dom/Document.h" |
#include "core/dom/Range.h" |
#include "core/dom/Text.h" |
#include "core/editing/EphemeralRange.h" |
+#include "core/editing/PlainTextRange.h" |
Xiaocheng
2017/04/10 21:32:28
Could you set marker ranges directly, so that (at
|
#include "core/editing/markers/RenderedDocumentMarker.h" |
#include "core/html/HTMLElement.h" |
#include "core/testing/DummyPageHolder.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "wtf/PassRefPtr.h" |
#include "wtf/RefPtr.h" |
-#include <memory> |
namespace blink { |
@@ -264,4 +265,136 @@ TEST_F(DocumentMarkerControllerTest, SetMarkerActiveTest) { |
EXPECT_TRUE(MarkerController().SetMarkersActive(range, true)); |
} |
+TEST_F(DocumentMarkerControllerTest, |
+ RemoveStartOfMarkerDoRemovePartiallyOverlapping) { |
+ SetBodyInnerHTML("<b>abc</b>"); |
+ GetDocument().UpdateStyleAndLayout(); |
+ Element* b_element = ToElement(GetDocument().body()->FirstChild()); |
+ |
+ // Add marker under "abc" |
+ EphemeralRange marker_range = PlainTextRange(0, 3).CreateRange(*b_element); |
+ GetDocument().Markers().AddTextMatchMarker( |
+ marker_range, DocumentMarker::MatchStatus::kInactive); |
+ |
+ // Remove markers that overlap "a" |
+ marker_range = PlainTextRange(0, 1).CreateRange(*b_element); |
+ GetDocument().Markers().RemoveMarkers( |
+ marker_range, DocumentMarker::AllMarkers(), |
+ DocumentMarkerController::kRemovePartiallyOverlappingMarker); |
+ |
+ EXPECT_EQ(0u, MarkerController().Markers().size()); |
+} |
+ |
+TEST_F(DocumentMarkerControllerTest, |
+ RemoveStartOfMarkerDontRemovePartiallyOverlapping) { |
+ SetBodyInnerHTML("<b>abc</b>"); |
+ GetDocument().UpdateStyleAndLayout(); |
+ Element* b_element = ToElement(GetDocument().body()->FirstChild()); |
+ |
+ // Add marker under "abc" |
+ EphemeralRange marker_range = PlainTextRange(0, 3).CreateRange(*b_element); |
+ GetDocument().Markers().AddTextMatchMarker( |
+ marker_range, DocumentMarker::MatchStatus::kInactive); |
+ |
+ // Remove portion of marker that overlaps "a" |
+ marker_range = PlainTextRange(0, 1).CreateRange(*b_element); |
+ GetDocument().Markers().RemoveMarkers( |
+ marker_range, DocumentMarker::AllMarkers(), |
+ DocumentMarkerController::kDoNotRemovePartiallyOverlappingMarker); |
+ |
+ EXPECT_EQ(1u, MarkerController().Markers().size()); |
+ |
+ EXPECT_EQ(1u, MarkerController().Markers()[0]->StartOffset()); |
+ EXPECT_EQ(3u, MarkerController().Markers()[0]->EndOffset()); |
+} |
+ |
+TEST_F(DocumentMarkerControllerTest, |
+ RemoveMiddleOfMarkerDoRemovePartiallyOverlapping) { |
+ SetBodyInnerHTML("<b>abc</b>"); |
+ GetDocument().UpdateStyleAndLayout(); |
+ Element* b_element = ToElement(GetDocument().body()->FirstChild()); |
+ |
+ // Add marker under "abc" |
+ EphemeralRange marker_range = PlainTextRange(0, 3).CreateRange(*b_element); |
+ GetDocument().Markers().AddTextMatchMarker( |
+ marker_range, DocumentMarker::MatchStatus::kInactive); |
+ |
+ // Remove markers that overlap "b" |
+ marker_range = PlainTextRange(1, 2).CreateRange(*b_element); |
+ GetDocument().Markers().RemoveMarkers( |
+ marker_range, DocumentMarker::AllMarkers(), |
+ DocumentMarkerController::kRemovePartiallyOverlappingMarker); |
+ |
+ EXPECT_EQ(0u, MarkerController().Markers().size()); |
+} |
+ |
+TEST_F(DocumentMarkerControllerTest, |
+ RemoveMiddleOfMarkerDontRemovePartiallyOverlapping) { |
+ SetBodyInnerHTML("<b>abc</b>"); |
+ GetDocument().UpdateStyleAndLayout(); |
+ Element* b_element = ToElement(GetDocument().body()->FirstChild()); |
+ |
+ // Add marker under "abc" |
+ EphemeralRange marker_range = PlainTextRange(0, 3).CreateRange(*b_element); |
+ GetDocument().Markers().AddTextMatchMarker( |
+ marker_range, DocumentMarker::MatchStatus::kInactive); |
+ |
+ // Remove portion of marker that overlaps "b" |
+ marker_range = PlainTextRange(1, 2).CreateRange(*b_element); |
+ GetDocument().Markers().RemoveMarkers( |
+ marker_range, DocumentMarker::AllMarkers(), |
+ DocumentMarkerController::kDoNotRemovePartiallyOverlappingMarker); |
+ |
+ EXPECT_EQ(2u, MarkerController().Markers().size()); |
+ |
+ EXPECT_EQ(0u, MarkerController().Markers()[0]->StartOffset()); |
+ EXPECT_EQ(1u, MarkerController().Markers()[0]->EndOffset()); |
+ |
+ EXPECT_EQ(2u, MarkerController().Markers()[1]->StartOffset()); |
+ EXPECT_EQ(3u, MarkerController().Markers()[1]->EndOffset()); |
+} |
+ |
+TEST_F(DocumentMarkerControllerTest, |
+ RemoveEndOfMarkerDoRemovePartiallyOverlapping) { |
+ SetBodyInnerHTML("<b>abc</b>"); |
+ GetDocument().UpdateStyleAndLayout(); |
+ Element* b_element = ToElement(GetDocument().body()->FirstChild()); |
+ |
+ // Add marker under "abc" |
+ EphemeralRange marker_range = PlainTextRange(0, 3).CreateRange(*b_element); |
+ GetDocument().Markers().AddTextMatchMarker( |
+ marker_range, DocumentMarker::MatchStatus::kInactive); |
+ |
+ // Remove markers that overlap "c" |
+ marker_range = PlainTextRange(2, 3).CreateRange(*b_element); |
+ GetDocument().Markers().RemoveMarkers( |
+ marker_range, DocumentMarker::AllMarkers(), |
+ DocumentMarkerController::kRemovePartiallyOverlappingMarker); |
+ |
+ EXPECT_EQ(0u, MarkerController().Markers().size()); |
+} |
+ |
+TEST_F(DocumentMarkerControllerTest, |
+ RemoveEndOfMarkerDontRemovePartiallyOverlapping) { |
+ SetBodyInnerHTML("<b>abc</b>"); |
+ GetDocument().UpdateStyleAndLayout(); |
+ Element* b_element = ToElement(GetDocument().body()->FirstChild()); |
+ |
+ // Add marker under "abc" |
+ EphemeralRange marker_range = PlainTextRange(0, 3).CreateRange(*b_element); |
+ GetDocument().Markers().AddTextMatchMarker( |
+ marker_range, DocumentMarker::MatchStatus::kInactive); |
+ |
+ // Remove portion of marker that overlaps "c" |
+ marker_range = PlainTextRange(2, 3).CreateRange(*b_element); |
+ GetDocument().Markers().RemoveMarkers( |
+ marker_range, DocumentMarker::AllMarkers(), |
+ DocumentMarkerController::kDoNotRemovePartiallyOverlappingMarker); |
+ |
+ EXPECT_EQ(1u, MarkerController().Markers().size()); |
+ |
+ EXPECT_EQ(0u, MarkerController().Markers()[0]->StartOffset()); |
+ EXPECT_EQ(2u, MarkerController().Markers()[0]->EndOffset()); |
+} |
+ |
} // namespace blink |