Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: third_party/WebKit/Source/core/editing/VisibleUnitsTest.cpp

Issue 2962473002: Make Position::LastPositionInNode() to take const Node& instead of Node* (Closed)
Patch Set: 2017-06-26T14:00:00 Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/editing/VisibleUnits.h" 5 #include "core/editing/VisibleUnits.h"
6 6
7 #include <ostream> // NOLINT 7 #include <ostream> // NOLINT
8 #include "bindings/core/v8/V8BindingForTesting.h" 8 #include "bindings/core/v8/V8BindingForTesting.h"
9 #include "core/dom/Text.h" 9 #include "core/dom/Text.h"
10 #include "core/editing/EditingTestBase.h" 10 #include "core/editing/EditingTestBase.h"
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 actual.inline_box); 293 actual.inline_box);
294 } 294 }
295 295
296 // http://crbug.com/716093 296 // http://crbug.com/716093
297 TEST_F(VisibleUnitsTest, ComputeInlineBoxPositionMixedEditable) { 297 TEST_F(VisibleUnitsTest, ComputeInlineBoxPositionMixedEditable) {
298 SetBodyContent( 298 SetBodyContent(
299 "<div contenteditable id=sample>abc<input contenteditable=false></div>"); 299 "<div contenteditable id=sample>abc<input contenteditable=false></div>");
300 Element* const sample = GetDocument().getElementById("sample"); 300 Element* const sample = GetDocument().getElementById("sample");
301 301
302 const InlineBoxPosition& actual = ComputeInlineBoxPosition( 302 const InlineBoxPosition& actual = ComputeInlineBoxPosition(
303 Position::LastPositionInNode(sample), TextAffinity::kDownstream); 303 Position::LastPositionInNode(*sample), TextAffinity::kDownstream);
304 // Should not be in infinite-loop 304 // Should not be in infinite-loop
305 EXPECT_EQ(nullptr, actual.inline_box); 305 EXPECT_EQ(nullptr, actual.inline_box);
306 EXPECT_EQ(0, actual.offset_in_box); 306 EXPECT_EQ(0, actual.offset_in_box);
307 } 307 }
308 308
309 TEST_F(VisibleUnitsTest, endOfDocument) { 309 TEST_F(VisibleUnitsTest, endOfDocument) {
310 const char* body_content = "<a id=host><b id=one>1</b><b id=two>22</b></a>"; 310 const char* body_content = "<a id=host><b id=one>1</b><b id=two>22</b></a>";
311 const char* shadow_content = 311 const char* shadow_content =
312 "<p><content select=#two></content></p><p><content " 312 "<p><content select=#two></content></p><p><content "
313 "select=#one></content></p>"; 313 "select=#one></content></p>";
(...skipping 919 matching lines...) Expand 10 before | Expand all | Expand 10 after
1233 TEST_F(VisibleUnitsTest, mostBackwardCaretPositionAfterAnchor) { 1233 TEST_F(VisibleUnitsTest, mostBackwardCaretPositionAfterAnchor) {
1234 const char* body_content = 1234 const char* body_content =
1235 "<p id='host'><b id='one'>1</b></p><b id='two'>22</b>"; 1235 "<p id='host'><b id='one'>1</b></p><b id='two'>22</b>";
1236 const char* shadow_content = 1236 const char* shadow_content =
1237 "<b id='two'>22</b><content select=#one></content><b id='three'>333</b>"; 1237 "<b id='two'>22</b><content select=#one></content><b id='three'>333</b>";
1238 SetBodyContent(body_content); 1238 SetBodyContent(body_content);
1239 SetShadowContent(shadow_content, "host"); 1239 SetShadowContent(shadow_content, "host");
1240 1240
1241 Element* host = GetDocument().getElementById("host"); 1241 Element* host = GetDocument().getElementById("host");
1242 1242
1243 EXPECT_EQ(Position::LastPositionInNode(host), 1243 EXPECT_EQ(Position::LastPositionInNode(*host),
1244 MostForwardCaretPosition(Position::AfterNode(*host))); 1244 MostForwardCaretPosition(Position::AfterNode(*host)));
1245 EXPECT_EQ(PositionInFlatTree::LastPositionInNode(host), 1245 EXPECT_EQ(PositionInFlatTree::LastPositionInNode(*host),
1246 MostForwardCaretPosition(PositionInFlatTree::AfterNode(*host))); 1246 MostForwardCaretPosition(PositionInFlatTree::AfterNode(*host)));
1247 } 1247 }
1248 1248
1249 TEST_F(VisibleUnitsTest, mostBackwardCaretPositionFirstLetter) { 1249 TEST_F(VisibleUnitsTest, mostBackwardCaretPositionFirstLetter) {
1250 // Note: first-letter pseudo element contains letter and punctuations. 1250 // Note: first-letter pseudo element contains letter and punctuations.
1251 const char* body_content = 1251 const char* body_content =
1252 "<style>p:first-letter {color:red;}</style><p id=sample> (2)45 </p>"; 1252 "<style>p:first-letter {color:red;}</style><p id=sample> (2)45 </p>";
1253 SetBodyContent(body_content); 1253 SetBodyContent(body_content);
1254 1254
1255 Node* sample = GetDocument().getElementById("sample")->firstChild(); 1255 Node* sample = GetDocument().getElementById("sample")->firstChild();
1256 1256
1257 EXPECT_EQ(Position(sample->parentNode(), 0), 1257 EXPECT_EQ(Position(sample->parentNode(), 0),
1258 MostBackwardCaretPosition(Position(sample, 0))); 1258 MostBackwardCaretPosition(Position(sample, 0)));
1259 EXPECT_EQ(Position(sample->parentNode(), 0), 1259 EXPECT_EQ(Position(sample->parentNode(), 0),
1260 MostBackwardCaretPosition(Position(sample, 1))); 1260 MostBackwardCaretPosition(Position(sample, 1)));
1261 EXPECT_EQ(Position(sample, 2), 1261 EXPECT_EQ(Position(sample, 2),
1262 MostBackwardCaretPosition(Position(sample, 2))); 1262 MostBackwardCaretPosition(Position(sample, 2)));
1263 EXPECT_EQ(Position(sample, 3), 1263 EXPECT_EQ(Position(sample, 3),
1264 MostBackwardCaretPosition(Position(sample, 3))); 1264 MostBackwardCaretPosition(Position(sample, 3)));
1265 EXPECT_EQ(Position(sample, 4), 1265 EXPECT_EQ(Position(sample, 4),
1266 MostBackwardCaretPosition(Position(sample, 4))); 1266 MostBackwardCaretPosition(Position(sample, 4)));
1267 EXPECT_EQ(Position(sample, 5), 1267 EXPECT_EQ(Position(sample, 5),
1268 MostBackwardCaretPosition(Position(sample, 5))); 1268 MostBackwardCaretPosition(Position(sample, 5)));
1269 EXPECT_EQ(Position(sample, 6), 1269 EXPECT_EQ(Position(sample, 6),
1270 MostBackwardCaretPosition(Position(sample, 6))); 1270 MostBackwardCaretPosition(Position(sample, 6)));
1271 EXPECT_EQ(Position(sample, 6), 1271 EXPECT_EQ(Position(sample, 6),
1272 MostBackwardCaretPosition(Position(sample, 7))); 1272 MostBackwardCaretPosition(Position(sample, 7)));
1273 EXPECT_EQ(Position(sample, 6), 1273 EXPECT_EQ(Position(sample, 6),
1274 MostBackwardCaretPosition( 1274 MostBackwardCaretPosition(
1275 Position::LastPositionInNode(sample->parentNode()))); 1275 Position::LastPositionInNode(*sample->parentNode())));
1276 EXPECT_EQ( 1276 EXPECT_EQ(
1277 Position(sample, 6), 1277 Position(sample, 6),
1278 MostBackwardCaretPosition(Position::AfterNode(*sample->parentNode()))); 1278 MostBackwardCaretPosition(Position::AfterNode(*sample->parentNode())));
1279 EXPECT_EQ(Position::LastPositionInNode(GetDocument().body()), 1279 EXPECT_EQ(Position::LastPositionInNode(*GetDocument().body()),
1280 MostBackwardCaretPosition( 1280 MostBackwardCaretPosition(
1281 Position::LastPositionInNode(GetDocument().body()))); 1281 Position::LastPositionInNode(*GetDocument().body())));
1282 } 1282 }
1283 1283
1284 TEST_F(VisibleUnitsTest, mostBackwardCaretPositionFirstLetterSplit) { 1284 TEST_F(VisibleUnitsTest, mostBackwardCaretPositionFirstLetterSplit) {
1285 V8TestingScope scope; 1285 V8TestingScope scope;
1286 1286
1287 const char* body_content = 1287 const char* body_content =
1288 "<style>p:first-letter {color:red;}</style><p id=sample>abc</p>"; 1288 "<style>p:first-letter {color:red;}</style><p id=sample>abc</p>";
1289 SetBodyContent(body_content); 1289 SetBodyContent(body_content);
1290 1290
1291 Node* sample = GetDocument().getElementById("sample"); 1291 Node* sample = GetDocument().getElementById("sample");
1292 Node* first_letter = sample->firstChild(); 1292 Node* first_letter = sample->firstChild();
1293 // Split "abc" into "a" "bc" 1293 // Split "abc" into "a" "bc"
1294 Text* remaining = ToText(first_letter)->splitText(1, ASSERT_NO_EXCEPTION); 1294 Text* remaining = ToText(first_letter)->splitText(1, ASSERT_NO_EXCEPTION);
1295 UpdateAllLifecyclePhases(); 1295 UpdateAllLifecyclePhases();
1296 1296
1297 EXPECT_EQ(Position(sample, 0), 1297 EXPECT_EQ(Position(sample, 0),
1298 MostBackwardCaretPosition(Position(first_letter, 0))); 1298 MostBackwardCaretPosition(Position(first_letter, 0)));
1299 EXPECT_EQ(Position(first_letter, 1), 1299 EXPECT_EQ(Position(first_letter, 1),
1300 MostBackwardCaretPosition(Position(first_letter, 1))); 1300 MostBackwardCaretPosition(Position(first_letter, 1)));
1301 EXPECT_EQ(Position(first_letter, 1), 1301 EXPECT_EQ(Position(first_letter, 1),
1302 MostBackwardCaretPosition(Position(remaining, 0))); 1302 MostBackwardCaretPosition(Position(remaining, 0)));
1303 EXPECT_EQ(Position(remaining, 1), 1303 EXPECT_EQ(Position(remaining, 1),
1304 MostBackwardCaretPosition(Position(remaining, 1))); 1304 MostBackwardCaretPosition(Position(remaining, 1)));
1305 EXPECT_EQ(Position(remaining, 2), 1305 EXPECT_EQ(Position(remaining, 2),
1306 MostBackwardCaretPosition(Position(remaining, 2))); 1306 MostBackwardCaretPosition(Position(remaining, 2)));
1307 EXPECT_EQ(Position(remaining, 2), 1307 EXPECT_EQ(Position(remaining, 2),
1308 MostBackwardCaretPosition(Position::LastPositionInNode(sample))); 1308 MostBackwardCaretPosition(Position::LastPositionInNode(*sample)));
1309 EXPECT_EQ(Position(remaining, 2), 1309 EXPECT_EQ(Position(remaining, 2),
1310 MostBackwardCaretPosition(Position::AfterNode(*sample))); 1310 MostBackwardCaretPosition(Position::AfterNode(*sample)));
1311 } 1311 }
1312 1312
1313 TEST_F(VisibleUnitsTest, mostForwardCaretPositionAfterAnchor) { 1313 TEST_F(VisibleUnitsTest, mostForwardCaretPositionAfterAnchor) {
1314 const char* body_content = "<p id='host'><b id='one'>1</b></p>"; 1314 const char* body_content = "<p id='host'><b id='one'>1</b></p>";
1315 const char* shadow_content = 1315 const char* shadow_content =
1316 "<b id='two'>22</b><content select=#one></content><b id='three'>333</b>"; 1316 "<b id='two'>22</b><content select=#one></content><b id='three'>333</b>";
1317 SetBodyContent(body_content); 1317 SetBodyContent(body_content);
1318 ShadowRoot* shadow_root = SetShadowContent(shadow_content, "host"); 1318 ShadowRoot* shadow_root = SetShadowContent(shadow_content, "host");
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
1518 const char* body_content = "<p id='sample'>00</p>"; 1518 const char* body_content = "<p id='sample'>00</p>";
1519 SetBodyContent(body_content); 1519 SetBodyContent(body_content);
1520 Element* sample = GetDocument().getElementById("sample"); 1520 Element* sample = GetDocument().getElementById("sample");
1521 1521
1522 EXPECT_FALSE(RendersInDifferentPosition(Position(), Position())); 1522 EXPECT_FALSE(RendersInDifferentPosition(Position(), Position()));
1523 EXPECT_FALSE( 1523 EXPECT_FALSE(
1524 RendersInDifferentPosition(Position(), Position::AfterNode(*sample))) 1524 RendersInDifferentPosition(Position(), Position::AfterNode(*sample)))
1525 << "if one of position is null, the reuslt is false."; 1525 << "if one of position is null, the reuslt is false.";
1526 EXPECT_FALSE(RendersInDifferentPosition(Position::AfterNode(*sample), 1526 EXPECT_FALSE(RendersInDifferentPosition(Position::AfterNode(*sample),
1527 Position(sample, 1))); 1527 Position(sample, 1)));
1528 EXPECT_FALSE(RendersInDifferentPosition(Position::LastPositionInNode(sample), 1528 EXPECT_FALSE(RendersInDifferentPosition(Position::LastPositionInNode(*sample),
1529 Position(sample, 1))); 1529 Position(sample, 1)));
1530 } 1530 }
1531 1531
1532 TEST_F(VisibleUnitsTest, rendersInDifferentPositionAfterAnchorWithHidden) { 1532 TEST_F(VisibleUnitsTest, rendersInDifferentPositionAfterAnchorWithHidden) {
1533 const char* body_content = 1533 const char* body_content =
1534 "<p><span id=one>11</span><span id=two style='display:none'> " 1534 "<p><span id=one>11</span><span id=two style='display:none'> "
1535 "</span></p>"; 1535 "</span></p>";
1536 SetBodyContent(body_content); 1536 SetBodyContent(body_content);
1537 Element* one = GetDocument().getElementById("one"); 1537 Element* one = GetDocument().getElementById("one");
1538 Element* two = GetDocument().getElementById("two"); 1538 Element* two = GetDocument().getElementById("two");
1539 1539
1540 EXPECT_TRUE(RendersInDifferentPosition(Position::LastPositionInNode(one), 1540 EXPECT_TRUE(RendersInDifferentPosition(Position::LastPositionInNode(*one),
1541 Position(two, 0))) 1541 Position(two, 0)))
1542 << "two doesn't have layout object"; 1542 << "two doesn't have layout object";
1543 } 1543 }
1544 1544
1545 TEST_F(VisibleUnitsTest, 1545 TEST_F(VisibleUnitsTest,
1546 rendersInDifferentPositionAfterAnchorWithDifferentLayoutObjects) { 1546 rendersInDifferentPositionAfterAnchorWithDifferentLayoutObjects) {
1547 const char* body_content = 1547 const char* body_content =
1548 "<p><span id=one>11</span><span id=two> </span></p>"; 1548 "<p><span id=one>11</span><span id=two> </span></p>";
1549 SetBodyContent(body_content); 1549 SetBodyContent(body_content);
1550 Element* one = GetDocument().getElementById("one"); 1550 Element* one = GetDocument().getElementById("one");
1551 Element* two = GetDocument().getElementById("two"); 1551 Element* two = GetDocument().getElementById("two");
1552 1552
1553 EXPECT_FALSE(RendersInDifferentPosition(Position::LastPositionInNode(one), 1553 EXPECT_FALSE(RendersInDifferentPosition(Position::LastPositionInNode(*one),
1554 Position(two, 0))); 1554 Position(two, 0)));
1555 EXPECT_FALSE(RendersInDifferentPosition(Position::LastPositionInNode(one), 1555 EXPECT_FALSE(RendersInDifferentPosition(Position::LastPositionInNode(*one),
1556 Position(two, 1))) 1556 Position(two, 1)))
1557 << "width of two is zero since contents is collapsed whitespaces"; 1557 << "width of two is zero since contents is collapsed whitespaces";
1558 } 1558 }
1559 1559
1560 TEST_F(VisibleUnitsTest, renderedOffset) { 1560 TEST_F(VisibleUnitsTest, renderedOffset) {
1561 const char* body_content = 1561 const char* body_content =
1562 "<div contenteditable><span id='sample1'>1</span><span " 1562 "<div contenteditable><span id='sample1'>1</span><span "
1563 "id='sample2'>22</span></div>"; 1563 "id='sample2'>22</span></div>";
1564 SetBodyContent(body_content); 1564 SetBodyContent(body_content);
1565 Element* sample1 = GetDocument().getElementById("sample1"); 1565 Element* sample1 = GetDocument().getElementById("sample1");
1566 Element* sample2 = GetDocument().getElementById("sample2"); 1566 Element* sample2 = GetDocument().getElementById("sample2");
1567 1567
1568 EXPECT_FALSE( 1568 EXPECT_FALSE(
1569 RendersInDifferentPosition(Position::AfterNode(*sample1->firstChild()), 1569 RendersInDifferentPosition(Position::AfterNode(*sample1->firstChild()),
1570 Position(sample2->firstChild(), 0))); 1570 Position(sample2->firstChild(), 0)));
1571 EXPECT_FALSE(RendersInDifferentPosition( 1571 EXPECT_FALSE(RendersInDifferentPosition(
1572 Position::LastPositionInNode(sample1->firstChild()), 1572 Position::LastPositionInNode(*sample1->firstChild()),
1573 Position(sample2->firstChild(), 0))); 1573 Position(sample2->firstChild(), 0)));
1574 } 1574 }
1575 1575
1576 TEST_F(VisibleUnitsTest, startOfDocument) { 1576 TEST_F(VisibleUnitsTest, startOfDocument) {
1577 const char* body_content = "<a id=host><b id=one>1</b><b id=two>22</b></a>"; 1577 const char* body_content = "<a id=host><b id=one>1</b><b id=two>22</b></a>";
1578 const char* shadow_content = 1578 const char* shadow_content =
1579 "<p><content select=#two></content></p><p><content " 1579 "<p><content select=#two></content></p><p><content "
1580 "select=#one></content></p>"; 1580 "select=#one></content></p>";
1581 SetBodyContent(body_content); 1581 SetBodyContent(body_content);
1582 SetShadowContent(shadow_content, "host"); 1582 SetShadowContent(shadow_content, "host");
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
1912 TEST_F(VisibleUnitsTest, 1912 TEST_F(VisibleUnitsTest,
1913 PreviousRootInlineBoxCandidatePositionWithDisplayNone) { 1913 PreviousRootInlineBoxCandidatePositionWithDisplayNone) {
1914 SetBodyContent( 1914 SetBodyContent(
1915 "<div contenteditable>" 1915 "<div contenteditable>"
1916 "<div id=one>one abc</div>" 1916 "<div id=one>one abc</div>"
1917 "<div id=two>two <b id=none style=display:none>def</b> ghi</div>" 1917 "<div id=two>two <b id=none style=display:none>def</b> ghi</div>"
1918 "</div>"); 1918 "</div>");
1919 Element* const one = GetDocument().getElementById("one"); 1919 Element* const one = GetDocument().getElementById("one");
1920 Element* const two = GetDocument().getElementById("two"); 1920 Element* const two = GetDocument().getElementById("two");
1921 const VisiblePosition& visible_position = 1921 const VisiblePosition& visible_position =
1922 CreateVisiblePosition(Position::LastPositionInNode(two)); 1922 CreateVisiblePosition(Position::LastPositionInNode(*two));
1923 EXPECT_EQ(Position(one->firstChild(), 7), 1923 EXPECT_EQ(Position(one->firstChild(), 7),
1924 PreviousRootInlineBoxCandidatePosition( 1924 PreviousRootInlineBoxCandidatePosition(
1925 two->lastChild(), visible_position, kContentIsEditable)); 1925 two->lastChild(), visible_position, kContentIsEditable));
1926 } 1926 }
1927 1927
1928 } // namespace blink 1928 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698