OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 package org.chromium.distiller; | 5 package org.chromium.distiller; |
6 | 6 |
7 import org.chromium.distiller.webdocument.WebTable; | 7 import org.chromium.distiller.webdocument.WebTable; |
8 | 8 |
9 import com.google.gwt.core.client.JsArray; | 9 import com.google.gwt.core.client.JsArray; |
10 import com.google.gwt.dom.client.Document; | 10 import com.google.gwt.dom.client.Document; |
11 import com.google.gwt.dom.client.Element; | 11 import com.google.gwt.dom.client.Element; |
12 import com.google.gwt.dom.client.Node; | 12 import com.google.gwt.dom.client.Node; |
| 13 import com.google.gwt.dom.client.NodeList; |
13 | 14 |
14 import java.util.Map; | 15 import java.util.Map; |
15 import java.util.List; | 16 import java.util.List; |
16 | 17 |
17 public class DomUtilTest extends DomDistillerJsTestCase { | 18 public class DomUtilTest extends DomDistillerJsTestCase { |
18 public void testGetAttributes() { | 19 public void testGetAttributes() { |
19 Element e = Document.get().createDivElement(); | 20 Element e = Document.get().createDivElement(); |
20 e.setInnerHTML("<div style=\"width:50px; height:100px\" id=\"f\" class=\
"sdf\"></div>"); | 21 e.setInnerHTML("<div style=\"width:50px; height:100px\" id=\"f\" class=\
"sdf\"></div>"); |
21 e = Element.as(e.getChildNodes().getItem(0)); | 22 e = Element.as(e.getChildNodes().getItem(0)); |
22 JsArray<Node> jsAttrs = DomUtil.getAttributes(e); | 23 JsArray<Node> jsAttrs = DomUtil.getAttributes(e); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 | 104 |
104 Element currDiv = TestUtil.createDiv(3); | 105 Element currDiv = TestUtil.createDiv(3); |
105 div2.appendChild(currDiv); | 106 div2.appendChild(currDiv); |
106 Element finalDiv1 = currDiv; | 107 Element finalDiv1 = currDiv; |
107 | 108 |
108 currDiv = TestUtil.createDiv(4); | 109 currDiv = TestUtil.createDiv(4); |
109 div2.appendChild(currDiv); | 110 div2.appendChild(currDiv); |
110 currDiv.appendChild(TestUtil.createDiv(5)); | 111 currDiv.appendChild(TestUtil.createDiv(5)); |
111 | 112 |
112 assertEquals(div2, DomUtil.getNearestCommonAncestor(finalDiv1, currDiv.g
etChild(0))); | 113 assertEquals(div2, DomUtil.getNearestCommonAncestor(finalDiv1, currDiv.g
etChild(0))); |
113 assertEquals(div2, DomUtil.getNearestCommonAncestor( | 114 NodeList<Element> nodeList = DomUtil.querySelectorAll(mRoot, "[id=\"3\"]
,[id=\"5\"]"); |
114 DomUtil.querySelectorAll(mRoot, "[id=\"3\"],[id=\"5\"]"))); | 115 assertEquals(div2, DomUtil.getNearestCommonAncestor(TestUtil.nodeListToL
ist(nodeList))); |
115 } | 116 } |
116 | 117 |
117 /** | 118 /** |
118 * The tree graph is: | 119 * The tree graph is: |
119 * 1 - 2 - 3 | 120 * 1 - 2 - 3 |
120 */ | 121 */ |
121 public void testNearestCommonAncestorIsRoot() { | 122 public void testNearestCommonAncestorIsRoot() { |
122 Element div = TestUtil.createDiv(1); | 123 Element div = TestUtil.createDiv(1); |
123 mBody.appendChild(div); | 124 mBody.appendChild(div); |
124 | 125 |
125 Element div2 = TestUtil.createDiv(2); | 126 Element div2 = TestUtil.createDiv(2); |
126 div.appendChild(div2); | 127 div.appendChild(div2); |
127 | 128 |
128 Element div3 = TestUtil.createDiv(3); | 129 Element div3 = TestUtil.createDiv(3); |
129 div2.appendChild(div3); | 130 div2.appendChild(div3); |
130 | 131 |
131 assertEquals(div, DomUtil.getNearestCommonAncestor(div, div3)); | 132 assertEquals(div, DomUtil.getNearestCommonAncestor(div, div3)); |
132 assertEquals(div, DomUtil.getNearestCommonAncestor( | 133 NodeList<Element> nodeList = DomUtil.querySelectorAll(mRoot, "[id=\"1\"]
,[id=\"3\"]"); |
133 DomUtil.querySelectorAll(mRoot, "[id=\"1\"],[id=\"3\"]"))); | 134 assertEquals(div, DomUtil.getNearestCommonAncestor(TestUtil.nodeListToLi
st(nodeList))); |
134 } | 135 } |
135 | 136 |
136 public void testNodeDepth() { | 137 public void testNodeDepth() { |
137 Element div = TestUtil.createDiv(1); | 138 Element div = TestUtil.createDiv(1); |
138 | 139 |
139 Element div2 = TestUtil.createDiv(2); | 140 Element div2 = TestUtil.createDiv(2); |
140 div.appendChild(div2); | 141 div.appendChild(div2); |
141 | 142 |
142 Element div3 = TestUtil.createDiv(3); | 143 Element div3 = TestUtil.createDiv(3); |
143 div2.appendChild(div3); | 144 div2.appendChild(div3); |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 for (int i = 0; i < mBody.getChildCount(); i++) { | 372 for (int i = 0; i < mBody.getChildCount(); i++) { |
372 DomUtil.stripImageElements(mBody.getChild(i)); | 373 DomUtil.stripImageElements(mBody.getChild(i)); |
373 } | 374 } |
374 assertEquals(expected, mBody.getInnerHTML()); | 375 assertEquals(expected, mBody.getInnerHTML()); |
375 | 376 |
376 mBody.setInnerHTML(html); | 377 mBody.setInnerHTML(html); |
377 DomUtil.stripImageElements(mBody); | 378 DomUtil.stripImageElements(mBody); |
378 assertEquals(expected, mBody.getInnerHTML()); | 379 assertEquals(expected, mBody.getInnerHTML()); |
379 } | 380 } |
380 | 381 |
| 382 public void testIsVisibleByOffsetParentDisplayNone() { |
| 383 String html = |
| 384 "<div style=\"display: none;\">" + |
| 385 "<div></div>" + |
| 386 "</div>"; |
| 387 mBody.setInnerHTML(html); |
| 388 Element child = mBody.getFirstChildElement().getFirstChildElement(); |
| 389 assertFalse(DomUtil.isVisibleByOffset(child)); |
| 390 } |
| 391 |
| 392 public void testIsVisibleByOffsetChildDisplayNone() { |
| 393 String html = |
| 394 "<div>" + |
| 395 "<div style=\"display: none;\"></div>" + |
| 396 "</div>"; |
| 397 mBody.setInnerHTML(html); |
| 398 Element child = mBody.getFirstChildElement().getFirstChildElement(); |
| 399 assertFalse(DomUtil.isVisibleByOffset(child)); |
| 400 } |
| 401 |
| 402 public void testIsVisibleByOffsetDisplayBlock() { |
| 403 String html = |
| 404 "<div>" + |
| 405 "<div></div>" + |
| 406 "</div>"; |
| 407 mBody.setInnerHTML(html); |
| 408 Element child = mBody.getFirstChildElement().getFirstChildElement(); |
| 409 assertTrue(DomUtil.isVisibleByOffset(child)); |
| 410 } |
| 411 |
| 412 public void testOnlyProcessArticleElement() { |
| 413 final String htmlArticle = |
| 414 "<h1></h1>" + |
| 415 "<article></article>"; |
| 416 |
| 417 String expected = "<article></article>"; |
| 418 |
| 419 Element result = getArticleElement(htmlArticle); |
| 420 assertEquals(expected, result.getString()); |
| 421 } |
| 422 |
| 423 public void testOnlyProcessArticleElementWithHiddenArticleElement() { |
| 424 final String htmlArticle = |
| 425 "<h1></h1>" + |
| 426 "<article></article>" + |
| 427 "<article style=\"display:none\"></article>"; |
| 428 |
| 429 String expected = "<article></article>"; |
| 430 |
| 431 Element result = getArticleElement(htmlArticle); |
| 432 assertEquals(expected, result.getString()); |
| 433 } |
| 434 |
| 435 public void testOnlyProcessArticleElementMultiple() { |
| 436 final String htmlArticle = |
| 437 "<h1></h1>" + |
| 438 "<article></article>" + |
| 439 "<article></article>"; |
| 440 |
| 441 // The existence of multiple articles disables the fast path. |
| 442 assertNull(getArticleElement(htmlArticle)); |
| 443 } |
| 444 |
| 445 public void testOnlyProcessSchemaOrgArticle() { |
| 446 final String htmlArticle = |
| 447 "<h1></h1>" + |
| 448 "<div itemscope itemtype=\"http://schema.org/Article\">" + |
| 449 "</div>"; |
| 450 |
| 451 final String expected = |
| 452 "<div itemscope=\"\" " + |
| 453 "itemtype=\"http://schema.org/Article\">" + |
| 454 "</div>"; |
| 455 |
| 456 Element result = getArticleElement(htmlArticle); |
| 457 assertEquals(expected, result.getString()); |
| 458 } |
| 459 |
| 460 public void testOnlyProcessSchemaOrgArticleWithHiddenArticleElement() { |
| 461 final String htmlArticle = |
| 462 "<h1></h1>" + |
| 463 "<div itemscope itemtype=\"http://schema.org/Article\">" + |
| 464 "</div>" + |
| 465 "<div itemscope itemtype=\"http://schema.org/Article\" " + |
| 466 "style=\"display:none\">" + |
| 467 "</div>"; |
| 468 |
| 469 String expected = |
| 470 "<div itemscope=\"\" itemtype=\"http://schema.org/Article\">" + |
| 471 "</div>"; |
| 472 |
| 473 Element result = getArticleElement(htmlArticle); |
| 474 assertEquals(expected, result.getString()); |
| 475 } |
| 476 |
| 477 public void testOnlyProcessSchemaOrgArticleNews() { |
| 478 final String htmlArticle = |
| 479 "<h1></h1>" + |
| 480 "<div itemscope itemtype=\"http://schema.org/NewsArticle\">" + |
| 481 "</div>"; |
| 482 |
| 483 final String expected = |
| 484 "<div itemscope=\"\" " + |
| 485 "itemtype=\"http://schema.org/NewsArticle\">" + |
| 486 "</div>"; |
| 487 |
| 488 Element result = getArticleElement(htmlArticle); |
| 489 assertEquals(expected, result.getString()); |
| 490 } |
| 491 |
| 492 public void testOnlyProcessSchemaOrgArticleBlog() { |
| 493 final String htmlArticle = |
| 494 "<h1></h1>" + |
| 495 "<div itemscope itemtype=\"http://schema.org/BlogPosting\">" + |
| 496 "</div>"; |
| 497 |
| 498 final String expected = |
| 499 "<div itemscope=\"\" " + |
| 500 "itemtype=\"http://schema.org/BlogPosting\">" + |
| 501 "</div>"; |
| 502 |
| 503 Element result = getArticleElement(htmlArticle); |
| 504 assertEquals(expected, result.getString()); |
| 505 } |
| 506 |
| 507 public void testOnlyProcessSchemaOrgArticleNested() { |
| 508 final String htmlArticle = |
| 509 "<h1></h1>" + |
| 510 "<div itemscope itemtype=\"http://schema.org/Article\">" + |
| 511 "<div itemscope itemtype=\"http://schema.org/Article\">" + |
| 512 "</div>" + |
| 513 "</div>"; |
| 514 |
| 515 final String expected = |
| 516 "<div itemscope=\"\" itemtype=\"http://schema.org/Article\">" + |
| 517 "<div itemscope=\"\" itemtype=\"http://schema.org/Article\">" + |
| 518 "</div>" + |
| 519 "</div>"; |
| 520 |
| 521 Element result = getArticleElement(htmlArticle); |
| 522 assertEquals(expected, result.getString()); |
| 523 } |
| 524 |
| 525 public void testOnlyProcessSchemaOrgArticleNestedWithNestedHiddenArticleElem
ent() { |
| 526 final String htmlArticle = |
| 527 "<h1></h1>" + |
| 528 "<div itemscope itemtype=\"http://schema.org/Article\">" + |
| 529 "<div itemscope itemtype=\"http://schema.org/Article\">" + |
| 530 "</div>" + |
| 531 "<div itemscope itemtype=\"http://schema.org/Article\" " + |
| 532 "style=\"display:none\">" + |
| 533 "</div>" + |
| 534 "</div>"; |
| 535 |
| 536 final String expected = |
| 537 "<div itemscope=\"\" itemtype=\"http://schema.org/Article\">" + |
| 538 "<div itemscope=\"\" itemtype=\"http://schema.org/Article\">" + |
| 539 "</div>" + |
| 540 "<div itemscope=\"\" itemtype=\"http://schema.org/Article\" " + |
| 541 "style=\"display:none\">" + |
| 542 "</div>" + |
| 543 "</div>"; |
| 544 |
| 545 Element result = getArticleElement(htmlArticle); |
| 546 assertEquals(expected, result.getString()); |
| 547 } |
| 548 |
| 549 public void testOnlyProcessSchemaOrgArticleNestedWithHiddenArticleElement()
{ |
| 550 final String paragraph = "<p></p>"; |
| 551 |
| 552 final String htmlArticle = |
| 553 "<h1></h1>" + |
| 554 "<div itemscope itemtype=\"http://schema.org/Article\">" + |
| 555 "<div itemscope itemtype=\"http://schema.org/Article\">" + |
| 556 "</div>" + |
| 557 "</div>" + |
| 558 "<div itemscope itemtype=\"http://schema.org/Article\" " + |
| 559 "style=\"display:none\">" + |
| 560 "</div>"; |
| 561 |
| 562 final String expected = |
| 563 "<div itemscope=\"\" itemtype=\"http://schema.org/Article\">" + |
| 564 "<div itemscope=\"\" itemtype=\"http://schema.org/Article\">" + |
| 565 "</div>" + |
| 566 "</div>"; |
| 567 |
| 568 Element result = getArticleElement(htmlArticle); |
| 569 assertEquals(expected, result.getString()); |
| 570 } |
| 571 |
| 572 public void testOnlyProcessSchemaOrgNonArticleMovie() { |
| 573 final String htmlArticle = |
| 574 "<h1></h1>" + |
| 575 "<div itemscope itemtype=\"http://schema.org/Movie\">" + |
| 576 "</div>"; |
| 577 |
| 578 // Non-article schema.org types should not use the fast path. |
| 579 Element result = getArticleElement(htmlArticle); |
| 580 assertNull(result); |
| 581 } |
| 582 |
| 583 private Element getArticleElement(String html) { |
| 584 mBody.setInnerHTML(html); |
| 585 return DomUtil.getArticleElement(mRoot); |
| 586 } |
| 587 |
381 public void testGetArea() { | 588 public void testGetArea() { |
382 String elements = | 589 String elements = |
383 "<div style=\"width: 200px; height: 100px\">w</div>" + | 590 "<div style=\"width: 200px; height: 100px\">w</div>" + |
384 "<div style=\"width: 300px;\">" + | 591 "<div style=\"width: 300px;\">" + |
385 "<div style=\"width: 300px; height: 200px\"></div>" + | 592 "<div style=\"width: 300px; height: 200px\"></div>" + |
386 "</div>" + | 593 "</div>" + |
387 "<div style=\"width: 400px; height: 100px\">" + | 594 "<div style=\"width: 400px; height: 100px\">" + |
388 "<div style=\"height: 100%\"></div>" + | 595 "<div style=\"height: 100%\"></div>" + |
389 "</div>"; | 596 "</div>"; |
390 mBody.setInnerHTML(elements); | 597 mBody.setInnerHTML(elements); |
391 | 598 |
392 Element element = mBody.getFirstChildElement(); | 599 Element element = mBody.getFirstChildElement(); |
393 assertEquals(200*100, DomUtil.getArea(element)); | 600 assertEquals(200*100, DomUtil.getArea(element)); |
394 | 601 |
395 element = element.getNextSiblingElement(); | 602 element = element.getNextSiblingElement(); |
396 assertEquals(300*200, DomUtil.getArea(element)); | 603 assertEquals(300*200, DomUtil.getArea(element)); |
397 | 604 |
398 element = element.getNextSiblingElement(); | 605 element = element.getNextSiblingElement(); |
399 assertEquals(400*100, DomUtil.getArea(element)); | 606 assertEquals(400*100, DomUtil.getArea(element)); |
400 | 607 |
401 element = element.getFirstChildElement(); | 608 element = element.getFirstChildElement(); |
402 assertEquals(400*100, DomUtil.getArea(element)); | 609 assertEquals(400*100, DomUtil.getArea(element)); |
403 } | 610 } |
404 } | 611 } |
OLD | NEW |