| OLD | NEW |
| 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/dom/shadow/FlatTreeTraversal.h" | 5 #include "core/dom/shadow/FlatTreeTraversal.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ExceptionStatePlaceholder.h" | 7 #include "bindings/core/v8/ExceptionStatePlaceholder.h" |
| 8 #include "core/dom/Document.h" | 8 #include "core/dom/Document.h" |
| 9 #include "core/dom/Element.h" | 9 #include "core/dom/Element.h" |
| 10 #include "core/dom/Node.h" | 10 #include "core/dom/Node.h" |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 "</div>"; | 109 "</div>"; |
| 110 const char* shadowHTML = | 110 const char* shadowHTML = |
| 111 "<a id='s00'>s00</a>" | 111 "<a id='s00'>s00</a>" |
| 112 "<content select='#m01'></content>" | 112 "<content select='#m01'></content>" |
| 113 "<a id='s02'>s02</a>" | 113 "<a id='s02'>s02</a>" |
| 114 "<a id='s03'><content select='#m00'></content></a>" | 114 "<a id='s03'><content select='#m00'></content></a>" |
| 115 "<a id='s04'>s04</a>"; | 115 "<a id='s04'>s04</a>"; |
| 116 setupSampleHTML(mainHTML, shadowHTML, 0); | 116 setupSampleHTML(mainHTML, shadowHTML, 0); |
| 117 | 117 |
| 118 Element* body = document().body(); | 118 Element* body = document().body(); |
| 119 Element* m0 = body->querySelector("#m0", ASSERT_NO_EXCEPTION); | 119 Element* m0 = body->querySelector("#m0"); |
| 120 Element* m00 = m0->querySelector("#m00", ASSERT_NO_EXCEPTION); | 120 Element* m00 = m0->querySelector("#m00"); |
| 121 Element* m01 = m0->querySelector("#m01", ASSERT_NO_EXCEPTION); | 121 Element* m01 = m0->querySelector("#m01"); |
| 122 | 122 |
| 123 Element* shadowHost = m0; | 123 Element* shadowHost = m0; |
| 124 ShadowRoot* shadowRoot = shadowHost->openShadowRoot(); | 124 ShadowRoot* shadowRoot = shadowHost->openShadowRoot(); |
| 125 Element* s00 = shadowRoot->querySelector("#s00", ASSERT_NO_EXCEPTION); | 125 Element* s00 = shadowRoot->querySelector("#s00"); |
| 126 Element* s02 = shadowRoot->querySelector("#s02", ASSERT_NO_EXCEPTION); | 126 Element* s02 = shadowRoot->querySelector("#s02"); |
| 127 Element* s03 = shadowRoot->querySelector("#s03", ASSERT_NO_EXCEPTION); | 127 Element* s03 = shadowRoot->querySelector("#s03"); |
| 128 Element* s04 = shadowRoot->querySelector("#s04", ASSERT_NO_EXCEPTION); | 128 Element* s04 = shadowRoot->querySelector("#s04"); |
| 129 | 129 |
| 130 const unsigned numberOfChildNodes = 5; | 130 const unsigned numberOfChildNodes = 5; |
| 131 Node* expectedChildNodes[5] = { s00, m01, s02, s03, s04 }; | 131 Node* expectedChildNodes[5] = { s00, m01, s02, s03, s04 }; |
| 132 | 132 |
| 133 ASSERT_EQ(numberOfChildNodes, FlatTreeTraversal::countChildren(*shadowHost))
; | 133 ASSERT_EQ(numberOfChildNodes, FlatTreeTraversal::countChildren(*shadowHost))
; |
| 134 EXPECT_TRUE(FlatTreeTraversal::hasChildren(*shadowHost)); | 134 EXPECT_TRUE(FlatTreeTraversal::hasChildren(*shadowHost)); |
| 135 | 135 |
| 136 for (unsigned index = 0; index < numberOfChildNodes; ++index) { | 136 for (unsigned index = 0; index < numberOfChildNodes; ++index) { |
| 137 Node* child = FlatTreeTraversal::childAt(*shadowHost, index); | 137 Node* child = FlatTreeTraversal::childAt(*shadowHost, index); |
| 138 EXPECT_EQ(expectedChildNodes[index], child) | 138 EXPECT_EQ(expectedChildNodes[index], child) |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 "<a id='s10'>s10</a>" | 184 "<a id='s10'>s10</a>" |
| 185 "<a id='s11'><content select='#m12'></content></a>" | 185 "<a id='s11'><content select='#m12'></content></a>" |
| 186 "<a id='s12'>s12</a>" | 186 "<a id='s12'>s12</a>" |
| 187 "<a id='s13'>" | 187 "<a id='s13'>" |
| 188 "<content select='#m10'></content>" | 188 "<content select='#m10'></content>" |
| 189 "<content select='#m11'></content>" | 189 "<content select='#m11'></content>" |
| 190 "</a>" | 190 "</a>" |
| 191 "<a id='s14'>s14</a>"; | 191 "<a id='s14'>s14</a>"; |
| 192 setupSampleHTML(mainHTML, shadowHTML, 1); | 192 setupSampleHTML(mainHTML, shadowHTML, 1); |
| 193 Element* body = document().body(); | 193 Element* body = document().body(); |
| 194 Element* m0 = body->querySelector("#m0", ASSERT_NO_EXCEPTION); | 194 Element* m0 = body->querySelector("#m0"); |
| 195 Element* m1 = body->querySelector("#m1", ASSERT_NO_EXCEPTION); | 195 Element* m1 = body->querySelector("#m1"); |
| 196 Element* m2 = body->querySelector("#m2", ASSERT_NO_EXCEPTION); | 196 Element* m2 = body->querySelector("#m2"); |
| 197 | 197 |
| 198 Element* m00 = body->querySelector("#m00", ASSERT_NO_EXCEPTION); | 198 Element* m00 = body->querySelector("#m00"); |
| 199 Element* m01 = body->querySelector("#m01", ASSERT_NO_EXCEPTION); | 199 Element* m01 = body->querySelector("#m01"); |
| 200 Element* m10 = body->querySelector("#m10", ASSERT_NO_EXCEPTION); | 200 Element* m10 = body->querySelector("#m10"); |
| 201 Element* m11 = body->querySelector("#m11", ASSERT_NO_EXCEPTION); | 201 Element* m11 = body->querySelector("#m11"); |
| 202 Element* m12 = body->querySelector("#m12", ASSERT_NO_EXCEPTION); | 202 Element* m12 = body->querySelector("#m12"); |
| 203 Element* m20 = body->querySelector("#m20", ASSERT_NO_EXCEPTION); | 203 Element* m20 = body->querySelector("#m20"); |
| 204 Element* m21 = body->querySelector("#m21", ASSERT_NO_EXCEPTION); | 204 Element* m21 = body->querySelector("#m21"); |
| 205 | 205 |
| 206 ShadowRoot* shadowRoot = m1->openShadowRoot(); | 206 ShadowRoot* shadowRoot = m1->openShadowRoot(); |
| 207 Element* s10 = shadowRoot->querySelector("#s10", ASSERT_NO_EXCEPTION); | 207 Element* s10 = shadowRoot->querySelector("#s10"); |
| 208 Element* s11 = shadowRoot->querySelector("#s11", ASSERT_NO_EXCEPTION); | 208 Element* s11 = shadowRoot->querySelector("#s11"); |
| 209 Element* s12 = shadowRoot->querySelector("#s12", ASSERT_NO_EXCEPTION); | 209 Element* s12 = shadowRoot->querySelector("#s12"); |
| 210 Element* s13 = shadowRoot->querySelector("#s13", ASSERT_NO_EXCEPTION); | 210 Element* s13 = shadowRoot->querySelector("#s13"); |
| 211 Element* s14 = shadowRoot->querySelector("#s14", ASSERT_NO_EXCEPTION); | 211 Element* s14 = shadowRoot->querySelector("#s14"); |
| 212 | 212 |
| 213 testCommonAncestor(body, *m0, *m1); | 213 testCommonAncestor(body, *m0, *m1); |
| 214 testCommonAncestor(body, *m1, *m2); | 214 testCommonAncestor(body, *m1, *m2); |
| 215 testCommonAncestor(body, *m1, *m20); | 215 testCommonAncestor(body, *m1, *m20); |
| 216 testCommonAncestor(body, *s14, *m21); | 216 testCommonAncestor(body, *s14, *m21); |
| 217 | 217 |
| 218 testCommonAncestor(m0, *m0, *m0); | 218 testCommonAncestor(m0, *m0, *m0); |
| 219 testCommonAncestor(m0, *m00, *m01); | 219 testCommonAncestor(m0, *m00, *m01); |
| 220 | 220 |
| 221 testCommonAncestor(m1, *m1, *m1); | 221 testCommonAncestor(m1, *m1, *m1); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 const char* shadowHTML = | 255 const char* shadowHTML = |
| 256 "<content select='#m11'></content>" | 256 "<content select='#m11'></content>" |
| 257 "<a id='s11'>s11</a>" | 257 "<a id='s11'>s11</a>" |
| 258 "<a id='s12'>" | 258 "<a id='s12'>" |
| 259 "<b id='s120'>s120</b>" | 259 "<b id='s120'>s120</b>" |
| 260 "<content select='#m10'></content>" | 260 "<content select='#m10'></content>" |
| 261 "</a>"; | 261 "</a>"; |
| 262 setupSampleHTML(mainHTML, shadowHTML, 1); | 262 setupSampleHTML(mainHTML, shadowHTML, 1); |
| 263 | 263 |
| 264 Element* body = document().body(); | 264 Element* body = document().body(); |
| 265 Element* m0 = body->querySelector("#m0", ASSERT_NO_EXCEPTION); | 265 Element* m0 = body->querySelector("#m0"); |
| 266 Element* m1 = body->querySelector("#m1", ASSERT_NO_EXCEPTION); | 266 Element* m1 = body->querySelector("#m1"); |
| 267 Element* m2 = body->querySelector("#m2", ASSERT_NO_EXCEPTION); | 267 Element* m2 = body->querySelector("#m2"); |
| 268 | 268 |
| 269 Element* m10 = body->querySelector("#m10", ASSERT_NO_EXCEPTION); | 269 Element* m10 = body->querySelector("#m10"); |
| 270 Element* m11 = body->querySelector("#m11", ASSERT_NO_EXCEPTION); | 270 Element* m11 = body->querySelector("#m11"); |
| 271 | 271 |
| 272 ShadowRoot* shadowRoot = m1->openShadowRoot(); | 272 ShadowRoot* shadowRoot = m1->openShadowRoot(); |
| 273 Element* s11 = shadowRoot->querySelector("#s11", ASSERT_NO_EXCEPTION); | 273 Element* s11 = shadowRoot->querySelector("#s11"); |
| 274 Element* s12 = shadowRoot->querySelector("#s12", ASSERT_NO_EXCEPTION); | 274 Element* s12 = shadowRoot->querySelector("#s12"); |
| 275 Element* s120 = shadowRoot->querySelector("#s120", ASSERT_NO_EXCEPTION); | 275 Element* s120 = shadowRoot->querySelector("#s120"); |
| 276 | 276 |
| 277 // Main tree node to main tree node | 277 // Main tree node to main tree node |
| 278 EXPECT_EQ(*m1, FlatTreeTraversal::nextSkippingChildren(*m0)); | 278 EXPECT_EQ(*m1, FlatTreeTraversal::nextSkippingChildren(*m0)); |
| 279 EXPECT_EQ(*m0, FlatTreeTraversal::previousSkippingChildren(*m1)); | 279 EXPECT_EQ(*m0, FlatTreeTraversal::previousSkippingChildren(*m1)); |
| 280 | 280 |
| 281 // Distribute node to main tree node | 281 // Distribute node to main tree node |
| 282 EXPECT_EQ(*m2, FlatTreeTraversal::nextSkippingChildren(*m10)); | 282 EXPECT_EQ(*m2, FlatTreeTraversal::nextSkippingChildren(*m10)); |
| 283 EXPECT_EQ(*m1, FlatTreeTraversal::previousSkippingChildren(*m2)); | 283 EXPECT_EQ(*m1, FlatTreeTraversal::previousSkippingChildren(*m2)); |
| 284 | 284 |
| 285 // Distribute node to node in shadow tree | 285 // Distribute node to node in shadow tree |
| (...skipping 27 matching lines...) Expand all Loading... |
| 313 "<div id='m2'></div>"; | 313 "<div id='m2'></div>"; |
| 314 const char* shadowHTML = | 314 const char* shadowHTML = |
| 315 "<content select='#m11'></content>" | 315 "<content select='#m11'></content>" |
| 316 "<a id='s11'>s11</a>" | 316 "<a id='s11'>s11</a>" |
| 317 "<a id='s12'>" | 317 "<a id='s12'>" |
| 318 "<content select='#m10'></content>" | 318 "<content select='#m10'></content>" |
| 319 "</a>"; | 319 "</a>"; |
| 320 setupSampleHTML(mainHTML, shadowHTML, 1); | 320 setupSampleHTML(mainHTML, shadowHTML, 1); |
| 321 | 321 |
| 322 Element* body = document().body(); | 322 Element* body = document().body(); |
| 323 Element* m0 = body->querySelector("#m0", ASSERT_NO_EXCEPTION); | 323 Element* m0 = body->querySelector("#m0"); |
| 324 Element* m1 = body->querySelector("#m1", ASSERT_NO_EXCEPTION); | 324 Element* m1 = body->querySelector("#m1"); |
| 325 Element* m2 = body->querySelector("#m2", ASSERT_NO_EXCEPTION); | 325 Element* m2 = body->querySelector("#m2"); |
| 326 | 326 |
| 327 Element* m10 = body->querySelector("#m10", ASSERT_NO_EXCEPTION); | 327 Element* m10 = body->querySelector("#m10"); |
| 328 | 328 |
| 329 ShadowRoot* shadowRoot = m1->openShadowRoot(); | 329 ShadowRoot* shadowRoot = m1->openShadowRoot(); |
| 330 Element* s11 = shadowRoot->querySelector("#s11", ASSERT_NO_EXCEPTION); | 330 Element* s11 = shadowRoot->querySelector("#s11"); |
| 331 Element* s12 = shadowRoot->querySelector("#s12", ASSERT_NO_EXCEPTION); | 331 Element* s12 = shadowRoot->querySelector("#s12"); |
| 332 | 332 |
| 333 EXPECT_EQ(m0->firstChild(), FlatTreeTraversal::lastWithin(*m0)); | 333 EXPECT_EQ(m0->firstChild(), FlatTreeTraversal::lastWithin(*m0)); |
| 334 EXPECT_EQ(*m0->firstChild(), FlatTreeTraversal::lastWithinOrSelf(*m0)); | 334 EXPECT_EQ(*m0->firstChild(), FlatTreeTraversal::lastWithinOrSelf(*m0)); |
| 335 | 335 |
| 336 EXPECT_EQ(m10->firstChild(), FlatTreeTraversal::lastWithin(*m1)); | 336 EXPECT_EQ(m10->firstChild(), FlatTreeTraversal::lastWithin(*m1)); |
| 337 EXPECT_EQ(*m10->firstChild(), FlatTreeTraversal::lastWithinOrSelf(*m1)); | 337 EXPECT_EQ(*m10->firstChild(), FlatTreeTraversal::lastWithinOrSelf(*m1)); |
| 338 | 338 |
| 339 EXPECT_EQ(nullptr, FlatTreeTraversal::lastWithin(*m2)); | 339 EXPECT_EQ(nullptr, FlatTreeTraversal::lastWithin(*m2)); |
| 340 EXPECT_EQ(*m2, FlatTreeTraversal::lastWithinOrSelf(*m2)); | 340 EXPECT_EQ(*m2, FlatTreeTraversal::lastWithinOrSelf(*m2)); |
| 341 | 341 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 358 const char* shadowHTML = | 358 const char* shadowHTML = |
| 359 "<content select='#m11'></content>" | 359 "<content select='#m11'></content>" |
| 360 "<a id='s11'>s11</a>" | 360 "<a id='s11'>s11</a>" |
| 361 "<a id='s12'>" | 361 "<a id='s12'>" |
| 362 "<b id='s120'>s120</b>" | 362 "<b id='s120'>s120</b>" |
| 363 "<content select='#m10'></content>" | 363 "<content select='#m10'></content>" |
| 364 "</a>"; | 364 "</a>"; |
| 365 setupSampleHTML(mainHTML, shadowHTML, 1); | 365 setupSampleHTML(mainHTML, shadowHTML, 1); |
| 366 | 366 |
| 367 Element* body = document().body(); | 367 Element* body = document().body(); |
| 368 Element* m0 = body->querySelector("#m0", ASSERT_NO_EXCEPTION); | 368 Element* m0 = body->querySelector("#m0"); |
| 369 Element* m1 = body->querySelector("#m1", ASSERT_NO_EXCEPTION); | 369 Element* m1 = body->querySelector("#m1"); |
| 370 Element* m2 = body->querySelector("#m2", ASSERT_NO_EXCEPTION); | 370 Element* m2 = body->querySelector("#m2"); |
| 371 | 371 |
| 372 Element* m10 = body->querySelector("#m10", ASSERT_NO_EXCEPTION); | 372 Element* m10 = body->querySelector("#m10"); |
| 373 Element* m11 = body->querySelector("#m11", ASSERT_NO_EXCEPTION); | 373 Element* m11 = body->querySelector("#m11"); |
| 374 | 374 |
| 375 ShadowRoot* shadowRoot = m1->openShadowRoot(); | 375 ShadowRoot* shadowRoot = m1->openShadowRoot(); |
| 376 Element* s11 = shadowRoot->querySelector("#s11", ASSERT_NO_EXCEPTION); | 376 Element* s11 = shadowRoot->querySelector("#s11"); |
| 377 Element* s12 = shadowRoot->querySelector("#s12", ASSERT_NO_EXCEPTION); | 377 Element* s12 = shadowRoot->querySelector("#s12"); |
| 378 Element* s120 = shadowRoot->querySelector("#s120", ASSERT_NO_EXCEPTION); | 378 Element* s120 = shadowRoot->querySelector("#s120"); |
| 379 | 379 |
| 380 EXPECT_EQ(*m0->firstChild(), FlatTreeTraversal::previousPostOrder(*m0)); | 380 EXPECT_EQ(*m0->firstChild(), FlatTreeTraversal::previousPostOrder(*m0)); |
| 381 EXPECT_EQ(*s12, FlatTreeTraversal::previousPostOrder(*m1)); | 381 EXPECT_EQ(*s12, FlatTreeTraversal::previousPostOrder(*m1)); |
| 382 EXPECT_EQ(*m10->firstChild(), FlatTreeTraversal::previousPostOrder(*m10)); | 382 EXPECT_EQ(*m10->firstChild(), FlatTreeTraversal::previousPostOrder(*m10)); |
| 383 EXPECT_EQ(*s120, FlatTreeTraversal::previousPostOrder(*m10->firstChild())); | 383 EXPECT_EQ(*s120, FlatTreeTraversal::previousPostOrder(*m10->firstChild())); |
| 384 EXPECT_EQ(*s120, FlatTreeTraversal::previousPostOrder(*m10->firstChild(), s1
2)); | 384 EXPECT_EQ(*s120, FlatTreeTraversal::previousPostOrder(*m10->firstChild(), s1
2)); |
| 385 EXPECT_EQ(*m11->firstChild(), FlatTreeTraversal::previousPostOrder(*m11)); | 385 EXPECT_EQ(*m11->firstChild(), FlatTreeTraversal::previousPostOrder(*m11)); |
| 386 EXPECT_EQ(*m0, FlatTreeTraversal::previousPostOrder(*m11->firstChild())); | 386 EXPECT_EQ(*m0, FlatTreeTraversal::previousPostOrder(*m11->firstChild())); |
| 387 EXPECT_EQ(nullptr, FlatTreeTraversal::previousPostOrder(*m11->firstChild(),
m11)); | 387 EXPECT_EQ(nullptr, FlatTreeTraversal::previousPostOrder(*m11->firstChild(),
m11)); |
| 388 EXPECT_EQ(*m2->firstChild(), FlatTreeTraversal::previousPostOrder(*m2)); | 388 EXPECT_EQ(*m2->firstChild(), FlatTreeTraversal::previousPostOrder(*m2)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 401 "<div id='m1'>" | 401 "<div id='m1'>" |
| 402 "<span id='m10'>m10</span>" | 402 "<span id='m10'>m10</span>" |
| 403 "<span id='m11'>m11</span>" | 403 "<span id='m11'>m11</span>" |
| 404 "</div>" | 404 "</div>" |
| 405 "<div id='m2'>m2</div>"; | 405 "<div id='m2'>m2</div>"; |
| 406 const char* shadowHTML = | 406 const char* shadowHTML = |
| 407 "<content select='#m11'></content>"; | 407 "<content select='#m11'></content>"; |
| 408 setupSampleHTML(mainHTML, shadowHTML, 1); | 408 setupSampleHTML(mainHTML, shadowHTML, 1); |
| 409 | 409 |
| 410 Element* body = document().body(); | 410 Element* body = document().body(); |
| 411 Element* m10 = body->querySelector("#m10", ASSERT_NO_EXCEPTION); | 411 Element* m10 = body->querySelector("#m10"); |
| 412 | 412 |
| 413 EXPECT_EQ(nullptr, FlatTreeTraversal::nextSibling(*m10)); | 413 EXPECT_EQ(nullptr, FlatTreeTraversal::nextSibling(*m10)); |
| 414 EXPECT_EQ(nullptr, FlatTreeTraversal::previousSibling(*m10)); | 414 EXPECT_EQ(nullptr, FlatTreeTraversal::previousSibling(*m10)); |
| 415 } | 415 } |
| 416 | 416 |
| 417 TEST_F(FlatTreeTraversalTest, redistribution) | 417 TEST_F(FlatTreeTraversalTest, redistribution) |
| 418 { | 418 { |
| 419 const char* mainHTML = | 419 const char* mainHTML = |
| 420 "<div id='m0'>m0</div>" | 420 "<div id='m0'>m0</div>" |
| 421 "<div id='m1'>" | 421 "<div id='m1'>" |
| 422 "<span id='m10'>m10</span>" | 422 "<span id='m10'>m10</span>" |
| 423 "<span id='m11'>m11</span>" | 423 "<span id='m11'>m11</span>" |
| 424 "</div>" | 424 "</div>" |
| 425 "<div id='m2'>m2</div>"; | 425 "<div id='m2'>m2</div>"; |
| 426 const char* shadowHTML1 = | 426 const char* shadowHTML1 = |
| 427 "<div id='s1'>" | 427 "<div id='s1'>" |
| 428 "<content></content>" | 428 "<content></content>" |
| 429 "</div>"; | 429 "</div>"; |
| 430 | 430 |
| 431 setupSampleHTML(mainHTML, shadowHTML1, 1); | 431 setupSampleHTML(mainHTML, shadowHTML1, 1); |
| 432 | 432 |
| 433 const char* shadowHTML2 = | 433 const char* shadowHTML2 = |
| 434 "<div id='s2'>" | 434 "<div id='s2'>" |
| 435 "<content select='#m10'></content>" | 435 "<content select='#m10'></content>" |
| 436 "<span id='s21'>s21</span>" | 436 "<span id='s21'>s21</span>" |
| 437 "</div>"; | 437 "</div>"; |
| 438 | 438 |
| 439 Element* body = document().body(); | 439 Element* body = document().body(); |
| 440 Element* m1 = body->querySelector("#m1", ASSERT_NO_EXCEPTION); | 440 Element* m1 = body->querySelector("#m1"); |
| 441 Element* m10 = body->querySelector("#m10", ASSERT_NO_EXCEPTION); | 441 Element* m10 = body->querySelector("#m10"); |
| 442 | 442 |
| 443 ShadowRoot* shadowRoot1 = m1->openShadowRoot(); | 443 ShadowRoot* shadowRoot1 = m1->openShadowRoot(); |
| 444 Element* s1 = shadowRoot1->querySelector("#s1", ASSERT_NO_EXCEPTION); | 444 Element* s1 = shadowRoot1->querySelector("#s1"); |
| 445 | 445 |
| 446 attachV0ShadowRoot(*s1, shadowHTML2); | 446 attachV0ShadowRoot(*s1, shadowHTML2); |
| 447 | 447 |
| 448 ShadowRoot* shadowRoot2 = s1->openShadowRoot(); | 448 ShadowRoot* shadowRoot2 = s1->openShadowRoot(); |
| 449 Element* s21 = shadowRoot2->querySelector("#s21", ASSERT_NO_EXCEPTION); | 449 Element* s21 = shadowRoot2->querySelector("#s21"); |
| 450 | 450 |
| 451 EXPECT_EQ(s21, FlatTreeTraversal::nextSibling(*m10)); | 451 EXPECT_EQ(s21, FlatTreeTraversal::nextSibling(*m10)); |
| 452 EXPECT_EQ(m10, FlatTreeTraversal::previousSibling(*s21)); | 452 EXPECT_EQ(m10, FlatTreeTraversal::previousSibling(*s21)); |
| 453 | 453 |
| 454 // FlatTreeTraversal::traverseSiblings does not work for a node which is not
in a document flat tree. | 454 // FlatTreeTraversal::traverseSiblings does not work for a node which is not
in a document flat tree. |
| 455 // e.g. The following test fails. The result of FlatTreeTraversal::previousS
ibling(*m11)) will be #m10, instead of nullptr. | 455 // e.g. The following test fails. The result of FlatTreeTraversal::previousS
ibling(*m11)) will be #m10, instead of nullptr. |
| 456 // Element* m11 = body->querySelector("#m11", ASSERT_NO_EXCEPTION); | 456 // Element* m11 = body->querySelector("#m11"); |
| 457 // EXPECT_EQ(nullptr, FlatTreeTraversal::previousSibling(*m11)); | 457 // EXPECT_EQ(nullptr, FlatTreeTraversal::previousSibling(*m11)); |
| 458 } | 458 } |
| 459 | 459 |
| 460 TEST_F(FlatTreeTraversalTest, v1Simple) | 460 TEST_F(FlatTreeTraversalTest, v1Simple) |
| 461 { | 461 { |
| 462 const char* mainHTML = | 462 const char* mainHTML = |
| 463 "<div id='host'>" | 463 "<div id='host'>" |
| 464 "<div id='child1' slot='slot1'></div>" | 464 "<div id='child1' slot='slot1'></div>" |
| 465 "<div id='child2' slot='slot2'></div>" | 465 "<div id='child2' slot='slot2'></div>" |
| 466 "</div>"; | 466 "</div>"; |
| 467 const char* shadowHTML = | 467 const char* shadowHTML = |
| 468 "<div id='shadow-child1'></div>" | 468 "<div id='shadow-child1'></div>" |
| 469 "<slot name='slot1'></slot>" | 469 "<slot name='slot1'></slot>" |
| 470 "<slot name='slot2'></slot>" | 470 "<slot name='slot2'></slot>" |
| 471 "<div id='shadow-child2'></div>"; | 471 "<div id='shadow-child2'></div>"; |
| 472 | 472 |
| 473 setupDocumentTree(mainHTML); | 473 setupDocumentTree(mainHTML); |
| 474 Element* body = document().body(); | 474 Element* body = document().body(); |
| 475 Element* host = body->querySelector("#host", ASSERT_NO_EXCEPTION); | 475 Element* host = body->querySelector("#host"); |
| 476 Element* child1 = body->querySelector("#child1", ASSERT_NO_EXCEPTION); | 476 Element* child1 = body->querySelector("#child1"); |
| 477 Element* child2 = body->querySelector("#child2", ASSERT_NO_EXCEPTION); | 477 Element* child2 = body->querySelector("#child2"); |
| 478 | 478 |
| 479 attachOpenShadowRoot(*host, shadowHTML); | 479 attachOpenShadowRoot(*host, shadowHTML); |
| 480 ShadowRoot* shadowRoot = host->openShadowRoot(); | 480 ShadowRoot* shadowRoot = host->openShadowRoot(); |
| 481 Element* slot1 = shadowRoot->querySelector("[name=slot1]", ASSERT_NO_EXCEPTI
ON); | 481 Element* slot1 = shadowRoot->querySelector("[name=slot1]"); |
| 482 Element* slot2 = shadowRoot->querySelector("[name=slot2]", ASSERT_NO_EXCEPTI
ON); | 482 Element* slot2 = shadowRoot->querySelector("[name=slot2]"); |
| 483 Element* shadowChild1 = shadowRoot->querySelector("#shadow-child1", ASSERT_N
O_EXCEPTION); | 483 Element* shadowChild1 = shadowRoot->querySelector("#shadow-child1"); |
| 484 Element* shadowChild2 = shadowRoot->querySelector("#shadow-child2", ASSERT_N
O_EXCEPTION); | 484 Element* shadowChild2 = shadowRoot->querySelector("#shadow-child2"); |
| 485 | 485 |
| 486 EXPECT_TRUE(slot1); | 486 EXPECT_TRUE(slot1); |
| 487 EXPECT_TRUE(slot2); | 487 EXPECT_TRUE(slot2); |
| 488 EXPECT_EQ(shadowChild1, FlatTreeTraversal::firstChild(*host)); | 488 EXPECT_EQ(shadowChild1, FlatTreeTraversal::firstChild(*host)); |
| 489 EXPECT_EQ(child1, FlatTreeTraversal::nextSibling(*shadowChild1)); | 489 EXPECT_EQ(child1, FlatTreeTraversal::nextSibling(*shadowChild1)); |
| 490 EXPECT_EQ(child2, FlatTreeTraversal::nextSibling(*child1)); | 490 EXPECT_EQ(child2, FlatTreeTraversal::nextSibling(*child1)); |
| 491 EXPECT_EQ(shadowChild2, FlatTreeTraversal::nextSibling(*child2)); | 491 EXPECT_EQ(shadowChild2, FlatTreeTraversal::nextSibling(*child2)); |
| 492 } | 492 } |
| 493 | 493 |
| 494 TEST_F(FlatTreeTraversalTest, v1Redistribution) | 494 TEST_F(FlatTreeTraversalTest, v1Redistribution) |
| (...skipping 17 matching lines...) Expand all Loading... |
| 512 "</div>"; | 512 "</div>"; |
| 513 const char* shadowHTML2 = | 513 const char* shadowHTML2 = |
| 514 "<div id='d1-1-1'></div>" | 514 "<div id='d1-1-1'></div>" |
| 515 "<slot name='d1-1-s1'></slot>" | 515 "<slot name='d1-1-s1'></slot>" |
| 516 "<slot name='d1-1-s2'></slot>" | 516 "<slot name='d1-1-s2'></slot>" |
| 517 "<div id='d1-1-2'></div>"; | 517 "<div id='d1-1-2'></div>"; |
| 518 | 518 |
| 519 setupDocumentTree(mainHTML); | 519 setupDocumentTree(mainHTML); |
| 520 | 520 |
| 521 Element* body = document().body(); | 521 Element* body = document().body(); |
| 522 Element* d1 = body->querySelector("#d1", ASSERT_NO_EXCEPTION); | 522 Element* d1 = body->querySelector("#d1"); |
| 523 Element* d2 = body->querySelector("#d2", ASSERT_NO_EXCEPTION); | 523 Element* d2 = body->querySelector("#d2"); |
| 524 Element* d3 = body->querySelector("#d3", ASSERT_NO_EXCEPTION); | 524 Element* d3 = body->querySelector("#d3"); |
| 525 Element* d4 = body->querySelector("#d4", ASSERT_NO_EXCEPTION); | 525 Element* d4 = body->querySelector("#d4"); |
| 526 Element* d5 = body->querySelector("#d5", ASSERT_NO_EXCEPTION); | 526 Element* d5 = body->querySelector("#d5"); |
| 527 Element* d6 = body->querySelector("#d6", ASSERT_NO_EXCEPTION); | 527 Element* d6 = body->querySelector("#d6"); |
| 528 | 528 |
| 529 attachOpenShadowRoot(*d1, shadowHTML1); | 529 attachOpenShadowRoot(*d1, shadowHTML1); |
| 530 ShadowRoot* shadowRoot1 = d1->openShadowRoot(); | 530 ShadowRoot* shadowRoot1 = d1->openShadowRoot(); |
| 531 Element* d11 = shadowRoot1->querySelector("#d1-1", ASSERT_NO_EXCEPTION); | 531 Element* d11 = shadowRoot1->querySelector("#d1-1"); |
| 532 Element* d12 = shadowRoot1->querySelector("#d1-2", ASSERT_NO_EXCEPTION); | 532 Element* d12 = shadowRoot1->querySelector("#d1-2"); |
| 533 Element* d13 = shadowRoot1->querySelector("#d1-3", ASSERT_NO_EXCEPTION); | 533 Element* d13 = shadowRoot1->querySelector("#d1-3"); |
| 534 Element* d14 = shadowRoot1->querySelector("#d1-4", ASSERT_NO_EXCEPTION); | 534 Element* d14 = shadowRoot1->querySelector("#d1-4"); |
| 535 Element* d1s0 = shadowRoot1->querySelector("#d1-s0", ASSERT_NO_EXCEPTION); | 535 Element* d1s0 = shadowRoot1->querySelector("#d1-s0"); |
| 536 Element* d1s1 = shadowRoot1->querySelector("[name=d1-s1]", ASSERT_NO_EXCEPTI
ON); | 536 Element* d1s1 = shadowRoot1->querySelector("[name=d1-s1]"); |
| 537 Element* d1s2 = shadowRoot1->querySelector("[name=d1-s2]", ASSERT_NO_EXCEPTI
ON); | 537 Element* d1s2 = shadowRoot1->querySelector("[name=d1-s2]"); |
| 538 | 538 |
| 539 attachOpenShadowRoot(*d11, shadowHTML2); | 539 attachOpenShadowRoot(*d11, shadowHTML2); |
| 540 ShadowRoot* shadowRoot2 = d11->openShadowRoot(); | 540 ShadowRoot* shadowRoot2 = d11->openShadowRoot(); |
| 541 Element* d111 = shadowRoot2->querySelector("#d1-1-1", ASSERT_NO_EXCEPTION); | 541 Element* d111 = shadowRoot2->querySelector("#d1-1-1"); |
| 542 Element* d112 = shadowRoot2->querySelector("#d1-1-2", ASSERT_NO_EXCEPTION); | 542 Element* d112 = shadowRoot2->querySelector("#d1-1-2"); |
| 543 Element* d11s1 = shadowRoot2->querySelector("[name=d1-1-s1]", ASSERT_NO_EXCE
PTION); | 543 Element* d11s1 = shadowRoot2->querySelector("[name=d1-1-s1]"); |
| 544 Element* d11s2 = shadowRoot2->querySelector("[name=d1-1-s2]", ASSERT_NO_EXCE
PTION); | 544 Element* d11s2 = shadowRoot2->querySelector("[name=d1-1-s2]"); |
| 545 | 545 |
| 546 EXPECT_TRUE(d5); | 546 EXPECT_TRUE(d5); |
| 547 EXPECT_TRUE(d12); | 547 EXPECT_TRUE(d12); |
| 548 EXPECT_TRUE(d13); | 548 EXPECT_TRUE(d13); |
| 549 EXPECT_TRUE(d1s0); | 549 EXPECT_TRUE(d1s0); |
| 550 EXPECT_TRUE(d1s1); | 550 EXPECT_TRUE(d1s1); |
| 551 EXPECT_TRUE(d1s2); | 551 EXPECT_TRUE(d1s2); |
| 552 EXPECT_TRUE(d11s1); | 552 EXPECT_TRUE(d11s1); |
| 553 EXPECT_TRUE(d11s2); | 553 EXPECT_TRUE(d11s2); |
| 554 EXPECT_EQ(d11, FlatTreeTraversal::next(*d1)); | 554 EXPECT_EQ(d11, FlatTreeTraversal::next(*d1)); |
| 555 EXPECT_EQ(d111, FlatTreeTraversal::next(*d11)); | 555 EXPECT_EQ(d111, FlatTreeTraversal::next(*d11)); |
| 556 EXPECT_EQ(d2, FlatTreeTraversal::next(*d111)); | 556 EXPECT_EQ(d2, FlatTreeTraversal::next(*d111)); |
| 557 EXPECT_EQ(d14, FlatTreeTraversal::next(*d2)); | 557 EXPECT_EQ(d14, FlatTreeTraversal::next(*d2)); |
| 558 EXPECT_EQ(d112, FlatTreeTraversal::next(*d14)); | 558 EXPECT_EQ(d112, FlatTreeTraversal::next(*d14)); |
| 559 EXPECT_EQ(d6, FlatTreeTraversal::next(*d112)); | 559 EXPECT_EQ(d6, FlatTreeTraversal::next(*d112)); |
| 560 | 560 |
| 561 EXPECT_EQ(d112, FlatTreeTraversal::previous(*d6)); | 561 EXPECT_EQ(d112, FlatTreeTraversal::previous(*d6)); |
| 562 | 562 |
| 563 EXPECT_EQ(d11, FlatTreeTraversal::parent(*d111)); | 563 EXPECT_EQ(d11, FlatTreeTraversal::parent(*d111)); |
| 564 EXPECT_EQ(d11, FlatTreeTraversal::parent(*d112)); | 564 EXPECT_EQ(d11, FlatTreeTraversal::parent(*d112)); |
| 565 EXPECT_EQ(d11, FlatTreeTraversal::parent(*d2)); | 565 EXPECT_EQ(d11, FlatTreeTraversal::parent(*d2)); |
| 566 EXPECT_EQ(d11, FlatTreeTraversal::parent(*d14)); | 566 EXPECT_EQ(d11, FlatTreeTraversal::parent(*d14)); |
| 567 EXPECT_EQ(nullptr, FlatTreeTraversal::parent(*d3)); | 567 EXPECT_EQ(nullptr, FlatTreeTraversal::parent(*d3)); |
| 568 EXPECT_EQ(nullptr, FlatTreeTraversal::parent(*d4)); | 568 EXPECT_EQ(nullptr, FlatTreeTraversal::parent(*d4)); |
| 569 } | 569 } |
| 570 | 570 |
| 571 } // namespace blink | 571 } // namespace blink |
| OLD | NEW |