Chromium Code Reviews| Index: third_party/WebKit/Source/core/editing/EphemeralRangeTest.cpp |
| diff --git a/third_party/WebKit/Source/core/editing/EphemeralRangeTest.cpp b/third_party/WebKit/Source/core/editing/EphemeralRangeTest.cpp |
| index 4e84da53194d8a4c4acf953f1a7cd751e09e18cd..ed00ad242c0af03cd2243881d3c815b8981e88a8 100644 |
| --- a/third_party/WebKit/Source/core/editing/EphemeralRangeTest.cpp |
| +++ b/third_party/WebKit/Source/core/editing/EphemeralRangeTest.cpp |
| @@ -51,20 +51,25 @@ Range* EphemeralRangeTest::getBodyRange() const { |
| // Tests that |EphemeralRange::nodes()| will traverse the whole range exactly as |
| // |for (Node* n = firstNode(); n != pastLastNode(); n = Traversal::next(*n))| |
| // does. |
| -TEST_F(EphemeralRangeTest, rangeTraversal) { |
| +TEST_F(EphemeralRangeTest, rangeTraversalDOM) { |
| const char* bodyContent = |
| - "<p id='host'><b id='one'></b><b id='two'>22</b></p>"; |
| + "<p id='host'>" |
| + "<b id='zero'>0</b>" |
| + "<b id='one'>1</b>" |
| + "<b id='two'>22</b>" |
| + "<span id='three'>" |
|
Xiaocheng
2017/03/10 01:27:15
Could you add a closing tag to this <span>, and ma
tanvir
2017/03/10 10:14:29
Done.
|
| + "</p>"; |
| setBodyContent(bodyContent); |
| const std::string expectedNodes( |
| - "[BODY][P id=\"host\"][B id=\"one\"][B id=\"two\"][#text \"22\"]"); |
| + "[BODY][P id=\"host\"][B id=\"zero\"][#text \"0\"][B id=\"one\"][#text " |
| + "\"1\"][B id=\"two\"][#text \"22\"][SPAN id=\"three\"]"); |
| // Check two ways to traverse. |
| EXPECT_EQ(expectedNodes, traverseRange<>(getBodyRange())); |
| EXPECT_EQ(traverseRange<>(getBodyRange()), |
| traverseRange(EphemeralRange(getBodyRange()))); |
| - // The same with FlatTree traversing. |
| EXPECT_EQ(expectedNodes, traverseRange<FlatTreeTraversal>(getBodyRange())); |
| EXPECT_EQ(traverseRange<FlatTreeTraversal>(getBodyRange()), |
| traverseRange(EphemeralRangeInFlatTree(getBodyRange()))); |
| @@ -73,65 +78,92 @@ TEST_F(EphemeralRangeTest, rangeTraversal) { |
| // Tests that |inRange| helper will traverse the whole range with shadow DOM. |
| TEST_F(EphemeralRangeTest, rangeShadowTraversal) { |
| const char* bodyContent = |
| - "<p id='host'><b id='one'></b><input type='text' value='some'></p>"; |
| + "<b id='zero'>0</b>" |
| + "<p id='host'>" |
| + "<b id='one'>1</b>" |
| + "<b id='two'>22</b>" |
|
Xiaocheng
2017/03/10 01:27:15
Let's add more node under #host and verify that it
tanvir
2017/03/10 10:14:29
Done.
|
| + "</p>" |
| + "<b id='three'>333</b>"; |
| + const char* shadowContent = |
| + "<p id='four'>4444</p>" |
| + "<content select=#two></content>" |
| + "<content select=#one></content>" |
| + "<span id='five'>" |
|
Xiaocheng
2017/03/10 01:27:15
ditto.
|
| + "<p id='six'>666666</p>"; |
| setBodyContent(bodyContent); |
| + setShadowContent(shadowContent, "host"); |
| - EXPECT_EQ("[BODY][P id=\"host\"][B id=\"one\"][INPUT]", |
| - traverseRange<>(getBodyRange())); |
| - EXPECT_EQ(traverseRange<>(getBodyRange()), |
| - traverseRange(EphemeralRange(getBodyRange()))); |
| - |
| - // In this case FlatTree traverse should differs from DOM tree traverse. |
| - EXPECT_EQ( |
| - "[BODY][P id=\"host\"][B id=\"one\"][INPUT][DIV id=\"inner-editor\" " |
| - "(editable)][#text \"some\"]", |
| - traverseRange<FlatTreeTraversal>(getBodyRange())); |
| + const std::string expectedNodes( |
| + "[BODY][B id=\"zero\"][#text \"0\"][P id=\"host\"][P id=\"four\"][#text " |
| + "\"4444\"][B id=\"two\"][#text \"22\"][B id=\"one\"][#text \"1\"][SPAN " |
| + "id=\"five\"][P id=\"six\"][#text \"666666\"][B id=\"three\"][#text " |
| + "\"333\"]"); |
| + EXPECT_EQ(expectedNodes, traverseRange<FlatTreeTraversal>(getBodyRange())); |
| EXPECT_EQ(traverseRange<FlatTreeTraversal>(getBodyRange()), |
| traverseRange(EphemeralRangeInFlatTree(getBodyRange()))); |
| } |
| // Limit a range and check that it will be traversed correctly. |
| -TEST_F(EphemeralRangeTest, rangeTraversalLimited) { |
| +TEST_F(EphemeralRangeTest, rangeTraversalLimitedDOM) { |
| const char* bodyContent = |
| - "<p id='host'><b id='one'></b><input type='text' value='some'><span " |
| - "id='two'></p>"; |
| + "<p id='host'>" |
| + "<b id='zero'>0</b>" |
| + "<b id='one'>1</b>" |
| + "<b id='two'>22</b>" |
| + "<span id='three'>" |
|
Xiaocheng
2017/03/10 01:27:16
ditto.
tanvir
2017/03/10 10:14:29
Done.
|
| + "</p>"; |
| setBodyContent(bodyContent); |
| - // Get a limited range from <body> to <b> nodes. |
| Range* untilB = getBodyRange(); |
| untilB->setEnd(document().getElementById("one"), 0, |
| IGNORE_EXCEPTION_FOR_TESTING); |
| - EXPECT_EQ("[BODY][P id=\"host\"][B id=\"one\"]", traverseRange<>(untilB)); |
| - |
| + EXPECT_EQ("[BODY][P id=\"host\"][B id=\"zero\"][#text \"0\"][B id=\"one\"]", |
| + traverseRange<>(untilB)); |
| EXPECT_EQ(traverseRange<>(untilB), traverseRange(EphemeralRange(untilB))); |
| - EXPECT_EQ("[BODY][P id=\"host\"][B id=\"one\"]", |
| - traverseRange<FlatTreeTraversal>(untilB)); |
| - EXPECT_EQ(traverseRange<FlatTreeTraversal>(untilB), |
| - traverseRange(EphemeralRangeInFlatTree(untilB))); |
| - |
| - // Get a limited range from <b> to <span> nodes. |
| Range* fromBToSpan = getBodyRange(); |
| fromBToSpan->setStart(document().getElementById("one"), 0, |
| IGNORE_EXCEPTION_FOR_TESTING); |
| - fromBToSpan->setEnd(document().getElementById("two"), 0, |
| + fromBToSpan->setEnd(document().getElementById("three"), 0, |
| IGNORE_EXCEPTION_FOR_TESTING); |
| - |
| - EXPECT_EQ("[B id=\"one\"][INPUT][SPAN id=\"two\"]", |
| + EXPECT_EQ("[#text \"1\"][B id=\"two\"][#text \"22\"][SPAN id=\"three\"]", |
| traverseRange<>(fromBToSpan)); |
| EXPECT_EQ(traverseRange<>(fromBToSpan), |
| traverseRange(EphemeralRange(fromBToSpan))); |
| +} |
| + |
| +TEST_F(EphemeralRangeTest, rangeTraversalLimitedFlatTree) { |
| + const char* bodyContent = |
| + "<b id='zero'>0</b>" |
| + "<p id='host'>" |
| + "<b id='one'>1</b>" |
| + "<b id='two'>22</b>" |
| + "</p>" |
| + "<b id='three'>333</b>"; |
| + const char* shadowContent = |
| + "<p id='four'>4444</p>" |
| + "<content select=#two></content>" |
| + "<content select=#one></content>" |
| + "<span id='five'>" |
|
Xiaocheng
2017/03/10 01:27:15
ditto.
tanvir
2017/03/10 10:14:29
Done.
|
| + "<p id='six'>666666</p>"; |
| + setBodyContent(bodyContent); |
| + ShadowRoot* shadowRoot = setShadowContent(shadowContent, "host"); |
| + |
| + const PositionInFlatTree startPosition(document().getElementById("one"), 0); |
| + const PositionInFlatTree limitPosition(shadowRoot->getElementById("five"), 0); |
| + const PositionInFlatTree endPosition(shadowRoot->getElementById("six"), 0); |
| + const EphemeralRangeInFlatTree fromBToSpan(startPosition, limitPosition); |
| + EXPECT_EQ("[#text \"1\"][SPAN id=\"five\"]", traverseRange(fromBToSpan)); |
| - EXPECT_EQ( |
| - "[B id=\"one\"][INPUT][DIV id=\"inner-editor\" (editable)][#text " |
| - "\"some\"][SPAN id=\"two\"]", |
| - traverseRange<FlatTreeTraversal>(fromBToSpan)); |
| - EXPECT_EQ(traverseRange<FlatTreeTraversal>(fromBToSpan), |
| - traverseRange(EphemeralRangeInFlatTree(fromBToSpan))); |
| + const EphemeralRangeInFlatTree fromSpanToEnd(limitPosition, endPosition); |
| + EXPECT_EQ("[P id=\"six\"]", traverseRange(fromSpanToEnd)); |
| } |
| TEST_F(EphemeralRangeTest, traversalEmptyRanges) { |
| - const char* bodyContent = "<p id='host'><b id='one'></b></p>"; |
| + const char* bodyContent = |
| + "<p id='host'>" |
| + "<b id='one'></b>" |
| + "</p>"; |
| setBodyContent(bodyContent); |
| // Expect no iterations in loop for an empty EphemeralRange. |