| Index: third_party/WebKit/Source/core/editing/commands/SplitTextNodeCommandTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/editing/commands/SplitTextNodeCommandTest.cpp b/third_party/WebKit/Source/core/editing/commands/SplitTextNodeCommandTest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7b79e69e44ee84d0e9d17d8e1e92f151b9a837dd
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/core/editing/commands/SplitTextNodeCommandTest.cpp
|
| @@ -0,0 +1,97 @@
|
| +// Copyright (c) 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "core/editing/commands/SplitTextNodeCommand.h"
|
| +
|
| +#include "core/editing/EditingTestBase.h"
|
| +#include "core/editing/PlainTextRange.h"
|
| +#include "core/editing/commands/EditingState.h"
|
| +#include "core/editing/markers/DocumentMarkerController.h"
|
| +
|
| +namespace blink {
|
| +
|
| +class SplitTextNodeCommandTest : public EditingTestBase {};
|
| +
|
| +TEST_F(SplitTextNodeCommandTest, splitInMarkerInterior) {
|
| + SetBodyContent("<div contenteditable>test1 test2 test3</div>");
|
| +
|
| + ContainerNode* div = ToContainerNode(GetDocument().body()->firstChild());
|
| +
|
| + EphemeralRange range = PlainTextRange(0, 5).CreateRange(*div);
|
| + GetDocument().Markers().AddTextMatchMarker(
|
| + range, DocumentMarker::MatchStatus::kInactive);
|
| +
|
| + range = PlainTextRange(6, 11).CreateRange(*div);
|
| + GetDocument().Markers().AddTextMatchMarker(
|
| + range, DocumentMarker::MatchStatus::kInactive);
|
| +
|
| + range = PlainTextRange(12, 17).CreateRange(*div);
|
| + GetDocument().Markers().AddTextMatchMarker(
|
| + range, DocumentMarker::MatchStatus::kInactive);
|
| +
|
| + SimpleEditCommand* command = SplitTextNodeCommand::Create(
|
| + ToText(GetDocument().body()->firstChild()->firstChild()), 8);
|
| +
|
| + EditingState editingState;
|
| + command->DoApply(&editingState);
|
| +
|
| + Node* text1 = ToText(div->firstChild());
|
| + Node* text2 = ToText(text1->nextSibling());
|
| +
|
| + // The first marker should end up in text1, the second marker should be
|
| + // truncated and end up text1, the third marker should end up in text2
|
| + // and its offset shifted to remain on the same piece of text
|
| +
|
| + EXPECT_EQ(2u, GetDocument().Markers().MarkersFor(text1).size());
|
| +
|
| + EXPECT_EQ(0u, GetDocument().Markers().MarkersFor(text1)[0]->StartOffset());
|
| + EXPECT_EQ(5u, GetDocument().Markers().MarkersFor(text1)[0]->EndOffset());
|
| +
|
| + EXPECT_EQ(6u, GetDocument().Markers().MarkersFor(text1)[1]->StartOffset());
|
| + EXPECT_EQ(7u, GetDocument().Markers().MarkersFor(text1)[1]->EndOffset());
|
| +
|
| + EXPECT_EQ(1u, GetDocument().Markers().MarkersFor(text2).size());
|
| +
|
| + EXPECT_EQ(4u, GetDocument().Markers().MarkersFor(text2)[0]->StartOffset());
|
| + EXPECT_EQ(9u, GetDocument().Markers().MarkersFor(text2)[0]->EndOffset());
|
| +
|
| + // Test undo
|
| + command->DoUnapply();
|
| +
|
| + Node* text = ToText(div->firstChild());
|
| +
|
| + EXPECT_EQ(3u, GetDocument().Markers().MarkersFor(text).size());
|
| +
|
| + EXPECT_EQ(0u, GetDocument().Markers().MarkersFor(text)[0]->StartOffset());
|
| + EXPECT_EQ(5u, GetDocument().Markers().MarkersFor(text)[0]->EndOffset());
|
| +
|
| + // TODO(rlanday): the truncated marker that spanned node boundaries is not
|
| + // restored properly
|
| + EXPECT_EQ(6u, GetDocument().Markers().MarkersFor(text)[1]->StartOffset());
|
| + EXPECT_EQ(7u, GetDocument().Markers().MarkersFor(text)[1]->EndOffset());
|
| +
|
| + EXPECT_EQ(12u, GetDocument().Markers().MarkersFor(text)[2]->StartOffset());
|
| + EXPECT_EQ(17u, GetDocument().Markers().MarkersFor(text)[2]->EndOffset());
|
| +
|
| + // Test redo
|
| + command->DoReapply();
|
| +
|
| + text1 = ToText(div->firstChild());
|
| + text2 = ToText(text1->nextSibling());
|
| +
|
| + EXPECT_EQ(2u, GetDocument().Markers().MarkersFor(text1).size());
|
| +
|
| + EXPECT_EQ(0u, GetDocument().Markers().MarkersFor(text1)[0]->StartOffset());
|
| + EXPECT_EQ(5u, GetDocument().Markers().MarkersFor(text1)[0]->EndOffset());
|
| +
|
| + EXPECT_EQ(6u, GetDocument().Markers().MarkersFor(text1)[1]->StartOffset());
|
| + EXPECT_EQ(7u, GetDocument().Markers().MarkersFor(text1)[1]->EndOffset());
|
| +
|
| + EXPECT_EQ(1u, GetDocument().Markers().MarkersFor(text2).size());
|
| +
|
| + EXPECT_EQ(4u, GetDocument().Markers().MarkersFor(text2)[0]->StartOffset());
|
| + EXPECT_EQ(9u, GetDocument().Markers().MarkersFor(text2)[0]->EndOffset());
|
| +}
|
| +
|
| +} // namespace blink
|
|
|