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 { |
19 | |
wychen
2016/06/07 16:20:08
nit: extra line
marcelorcorrea
2016/06/07 17:06:02
Done.
| |
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 Loading... | |
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 | |
wychen
2016/06/07 16:20:08
nit: extra line
marcelorcorrea
2016/06/07 17:06:02
Done.
| |
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 Loading... | |
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 } |
OLD | NEW |