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

Side by Side Diff: javatests/org/chromium/distiller/DomUtilTest.java

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

Powered by Google App Engine
This is Rietveld 408576698