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 com.google.gwt.dom.client.Document; | 7 import com.google.gwt.dom.client.Document; |
8 import com.google.gwt.dom.client.Element; | 8 import com.google.gwt.dom.client.Element; |
9 import com.google.gwt.dom.client.NodeList; | 9 import com.google.gwt.dom.client.NodeList; |
10 import com.google.gwt.dom.client.TableElement; | 10 import com.google.gwt.dom.client.TableElement; |
11 | 11 |
12 public class TableClassifierTest extends DomDistillerJsTestCase { | 12 class FixedWidthJsTestCase extends DomDistillerJsTestCase { |
13 @Override | |
14 public void setUp() throws Exception { | |
15 super.setUp(); | |
16 // With this, the width of chrome window won't affect the layout. | |
17 mRoot.getStyle().setProperty("width", "800px"); | |
cjhopman
2015/05/28 21:30:02
How about just doing this in DomDistillerJsTestCas
wychen
2015/05/29 06:43:10
That's what I originally did. I thought it might b
| |
18 } | |
19 } | |
20 | |
21 public class TableClassifierTest extends FixedWidthJsTestCase { | |
22 public void testDocumentWidth() { | |
23 assertEquals(800, mRoot.getOffsetWidth()); | |
24 assertEquals("800px", DomUtil.getComputedStyle(mRoot).getProperty("width ")); | |
25 } | |
26 | |
13 public void testInputElement() { | 27 public void testInputElement() { |
14 Element input = Document.get().createTextInputElement(); | 28 Element input = Document.get().createTextInputElement(); |
15 mBody.appendChild(input); | 29 mBody.appendChild(input); |
16 TableElement table = createDefaultTableWithTH(); | 30 TableElement table = createDefaultTableWithTH(); |
17 input.appendChild(table); | 31 input.appendChild(table); |
18 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); | 32 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); |
19 assertEquals(TableClassifier.Reason.INSIDE_EDITABLE_AREA, TableClassifie r.sReason); | 33 assertEquals(TableClassifier.Reason.INSIDE_EDITABLE_AREA, TableClassifie r.sReason); |
20 } | 34 } |
21 | 35 |
22 public void testContentEditableAttribute() { | 36 public void testContentEditableAttribute() { |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
287 abbr.setInnerHTML("HTML"); | 301 abbr.setInnerHTML("HTML"); |
288 td.appendChild(abbr); | 302 td.appendChild(abbr); |
289 Element tr = getFirstElement(table, "TR"); | 303 Element tr = getFirstElement(table, "TR"); |
290 tr.appendChild(td); | 304 tr.appendChild(td); |
291 assertEquals(TableClassifier.Type.DATA, TableClassifier.table(table)); | 305 assertEquals(TableClassifier.Type.DATA, TableClassifier.table(table)); |
292 assertEquals(TableClassifier.Reason.ONLY_HAS_ABBR, TableClassifier.sReas on); | 306 assertEquals(TableClassifier.Reason.ONLY_HAS_ABBR, TableClassifier.sReas on); |
293 } | 307 } |
294 | 308 |
295 public void testWideTable() { | 309 public void testWideTable() { |
296 TableElement table = createDefaultTableWithNoTH(); | 310 TableElement table = createDefaultTableWithNoTH(); |
297 Element root = Document.get().getDocumentElement(); | 311 int rootWidth = mRoot.getOffsetWidth(); |
298 int width = (int) ((0.95 * root.getOffsetWidth()) + 1.0); | 312 int width = (int) ((0.95 * rootWidth) + 1.0); |
299 table.setAttribute("style", "width:" + width + "px"); | 313 table.setAttribute("style", "width:" + width + "px"); |
300 NodeList<Element> bodies = root.getElementsByTagName("BODY"); | 314 assertEquals(rootWidth, mRoot.getOffsetWidth()); |
301 assertTrue(bodies.getLength() > 0); | |
302 bodies.getItem(0).appendChild(table); | |
303 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); | 315 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); |
304 assertEquals(TableClassifier.Reason.MORE_95_PERCENT_DOC_WIDTH, TableClas sifier.sReason); | 316 assertEquals(TableClassifier.Reason.MORE_95_PERCENT_DOC_WIDTH, TableClas sifier.sReason); |
305 | 317 |
306 // Test same wide table with viewport meta. | 318 // Test same wide table with viewport meta. |
307 NodeList<Element> heads = root.getElementsByTagName("HEAD"); | |
308 assertTrue(heads.getLength() > 0); | |
309 Element meta = TestUtil.createMetaName("viewport", "width=device-width") ; | 319 Element meta = TestUtil.createMetaName("viewport", "width=device-width") ; |
310 heads.getItem(0).appendChild(meta); | 320 mHead.appendChild(meta); |
311 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); | 321 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); |
312 assertEquals(TableClassifier.Reason.LESS_EQ_10_CELLS, TableClassifier.sR eason); | 322 assertEquals(TableClassifier.Reason.LESS_EQ_10_CELLS, TableClassifier.sR eason); |
313 meta.removeFromParent(); | 323 meta.removeFromParent(); |
314 } | 324 } |
315 | 325 |
316 public void testSummaryAttribute() { | 326 public void testSummaryAttribute() { |
317 TableElement table = createDefaultTableWithNoTH(); | 327 TableElement table = createDefaultTableWithNoTH(); |
318 table.setAttribute("summary", "Testing summary attribute"); | 328 table.setAttribute("summary", "Testing summary attribute"); |
319 assertEquals(TableClassifier.Type.DATA, TableClassifier.table(table)); | 329 assertEquals(TableClassifier.Type.DATA, TableClassifier.table(table)); |
320 assertEquals(TableClassifier.Reason.SUMMARY, TableClassifier.sReason); | 330 assertEquals(TableClassifier.Reason.SUMMARY, TableClassifier.sReason); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
446 | 456 |
447 public void testAppletElement() { | 457 public void testAppletElement() { |
448 TableElement table = createBigDefaultTableWithNoTH(); | 458 TableElement table = createBigDefaultTableWithNoTH(); |
449 Element embed = Document.get().createElement("APPLET"); | 459 Element embed = Document.get().createElement("APPLET"); |
450 getFirstElement(table, "TD").appendChild(embed); | 460 getFirstElement(table, "TD").appendChild(embed); |
451 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); | 461 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); |
452 assertEquals(TableClassifier.Reason.EMBED_OBJECT_APPLET_IFRAME, TableCla ssifier.sReason); | 462 assertEquals(TableClassifier.Reason.EMBED_OBJECT_APPLET_IFRAME, TableCla ssifier.sReason); |
453 } | 463 } |
454 | 464 |
455 public void testIframeElement() { | 465 public void testIframeElement() { |
466 int rootWidth = mRoot.getOffsetWidth(); | |
456 TableElement table = createBigDefaultTableWithNoTH(); | 467 TableElement table = createBigDefaultTableWithNoTH(); |
457 Element embed = Document.get().createElement("IFRAME"); | 468 Element embed = Document.get().createElement("IFRAME"); |
458 getFirstElement(table, "TD").appendChild(embed); | 469 getFirstElement(table, "TD").appendChild(embed); |
470 assertEquals(rootWidth, mRoot.getOffsetWidth()); | |
459 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); | 471 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); |
460 assertEquals(TableClassifier.Reason.EMBED_OBJECT_APPLET_IFRAME, TableCla ssifier.sReason); | 472 assertEquals(TableClassifier.Reason.EMBED_OBJECT_APPLET_IFRAME, TableCla ssifier.sReason); |
461 } | 473 } |
462 | 474 |
463 public void testTallTable() { | 475 public void testTallTable() { |
464 TableElement table = createBigDefaultTableWithNoTH(); | 476 TableElement table = createBigDefaultTableWithNoTH(); |
465 Element root = Document.get().getDocumentElement(); | 477 // With min-height, the height of mRoot remains the same after resizing the table. |
466 int height = (int) ((0.90 * root.getOffsetHeight()) + 1.0); | 478 mRoot.getStyle().setProperty("min-height", "200px"); |
479 int rootHeight = mRoot.getOffsetHeight(); | |
480 int height = (int) ((0.90 * rootHeight) + 1.0); | |
467 table.setAttribute("style", "height:" + height + "px"); | 481 table.setAttribute("style", "height:" + height + "px"); |
468 NodeList<Element> bodies = root.getElementsByTagName("BODY"); | 482 assertEquals(height, table.getOffsetHeight()); |
469 assertTrue(bodies.getLength() > 0); | 483 assertEquals(rootHeight, mRoot.getOffsetHeight()); |
470 bodies.getItem(0).appendChild(table); | |
471 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); | 484 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); |
472 assertEquals(TableClassifier.Reason.MORE_90_PERCENT_DOC_HEIGHT, TableCla ssifier.sReason); | 485 assertEquals(TableClassifier.Reason.MORE_90_PERCENT_DOC_HEIGHT, TableCla ssifier.sReason); |
473 } | 486 } |
474 | 487 |
475 private TableElement createTable(String html) { | 488 private TableElement createTable(String html) { |
476 TableElement table = Document.get().createTableElement(); | 489 TableElement table = Document.get().createTableElement(); |
477 table.setInnerHTML(html); | 490 table.setInnerHTML(html); |
478 mBody.appendChild(table); | 491 mBody.appendChild(table); |
479 return table; | 492 return table; |
480 } | 493 } |
481 | 494 |
482 private TableElement createDefaultTableWithTH() { | 495 private TableElement createDefaultTableWithTH() { |
483 String tableStr = "<tbody>" + | 496 String tableStr = "<tbody>" + |
484 "<tr>" + | 497 "<tr>" + |
485 "<th>heading1</th>" + | 498 "<th>heading1</th>" + |
486 "<th>heading2</th>" + | 499 "<th>heading2</th>" + |
487 "</tr>" + | 500 "</tr>" + |
488 "<tr>" + | 501 "<tr>" + |
489 "<td>row1col1</td>" + | 502 "<td>row1col1</td>" + |
490 "<td>row1col2</td>" + | 503 "<td>row1col2</td>" + |
491 "</tr>" + | 504 "</tr>" + |
492 "<tr>" + | 505 "<tr>" + |
493 "<td>row2col1</td>" + | 506 "<td>row2col1</td>" + |
494 "<td>row2col2</td>" + | 507 "<td>row2col2</td>" + |
495 "</tr>" + | 508 "</tr>" + |
496 "</tbody>"; | 509 "</tbody>"; |
497 TableElement table = createTable(tableStr); | 510 TableElement table = createTable(tableStr); |
511 mBody.appendChild(table); | |
498 assertEquals(TableClassifier.Type.DATA, TableClassifier.table(table)); | 512 assertEquals(TableClassifier.Type.DATA, TableClassifier.table(table)); |
499 assertEquals(TableClassifier.Reason.CAPTION_THEAD_TFOOT_COLGROUP_COL_TH, | 513 assertEquals(TableClassifier.Reason.CAPTION_THEAD_TFOOT_COLGROUP_COL_TH, |
500 TableClassifier.sReason); | 514 TableClassifier.sReason); |
501 mBody.appendChild(table); | |
502 return table; | 515 return table; |
503 } | 516 } |
504 | 517 |
505 private TableElement createDefaultTableWithNoTH() { | 518 private TableElement createDefaultTableWithNoTH() { |
506 String tableStr = "<tbody>" + | 519 String tableStr = "<tbody>" + |
507 "<tr>" + | 520 "<tr>" + |
508 "<td>row1col1</td>" + | 521 "<td>row1col1</td>" + |
509 "<td>row1col2</td>" + | 522 "<td>row1col2</td>" + |
510 "</tr>" + | 523 "</tr>" + |
511 "<tr>" + | 524 "<tr>" + |
512 "<td>row2col1</td>" + | 525 "<td>row2col1</td>" + |
513 "<td>row2col2</td>" + | 526 "<td>row2col2</td>" + |
514 "</tr>" + | 527 "</tr>" + |
515 "</tbody>"; | 528 "</tbody>"; |
516 TableElement table = createTable(tableStr); | 529 TableElement table = createTable(tableStr); |
530 mBody.appendChild(table); | |
517 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); | 531 assertEquals(TableClassifier.Type.LAYOUT, TableClassifier.table(table)); |
518 assertEquals(TableClassifier.Reason.LESS_EQ_10_CELLS, TableClassifier.sR eason); | 532 assertEquals(TableClassifier.Reason.LESS_EQ_10_CELLS, TableClassifier.sR eason); |
519 mBody.appendChild(table); | |
520 return table; | 533 return table; |
521 } | 534 } |
522 | 535 |
523 private TableElement createBigDefaultTableWithNoTH() { | 536 private TableElement createBigDefaultTableWithNoTH() { |
524 String tableStr = "<tbody>" + | 537 String tableStr = "<tbody>" + |
525 "<tr>" + | 538 "<tr>" + |
526 "<td>row1col1</td>" + | 539 "<td>row1col1</td>" + |
527 "<td>row1col2</td>" + | 540 "<td>row1col2</td>" + |
528 "<td>row1col3</td>" + | 541 "<td>row1col3</td>" + |
529 "<td>row1col4</td>" + | 542 "<td>row1col4</td>" + |
530 "</tr>" + | 543 "</tr>" + |
531 "<tr>" + | 544 "<tr>" + |
532 "<td>row2col1</td>" + | 545 "<td>row2col1</td>" + |
533 "<td>row2col2</td>" + | 546 "<td>row2col2</td>" + |
534 "<td>row2col3</td>" + | 547 "<td>row2col3</td>" + |
535 "<td>row2col4</td>" + | 548 "<td>row2col4</td>" + |
536 "</tr>" + | 549 "</tr>" + |
537 "<tr>" + | 550 "<tr>" + |
538 "<td>row3col1</td>" + | 551 "<td>row3col1</td>" + |
539 "<td>row3col2</td>" + | 552 "<td>row3col2</td>" + |
540 "<td>row3col3</td>" + | 553 "<td>row3col3</td>" + |
541 "<td>row3col4</td>" + | 554 "<td>row3col4</td>" + |
542 "</tr>" + | 555 "</tr>" + |
543 "</tbody>"; | 556 "</tbody>"; |
544 TableElement table = createTable(tableStr); | 557 TableElement table = createTable(tableStr); |
558 mBody.appendChild(table); | |
545 assertEquals(TableClassifier.Type.DATA, TableClassifier.table(table)); | 559 assertEquals(TableClassifier.Type.DATA, TableClassifier.table(table)); |
546 assertEquals(TableClassifier.Reason.DEFAULT, TableClassifier.sReason); | 560 assertEquals(TableClassifier.Reason.DEFAULT, TableClassifier.sReason); |
547 mBody.appendChild(table); | |
548 return table; | 561 return table; |
549 } | 562 } |
550 | 563 |
551 private void setRoleForFirstElement(Element table, String tagname, String ro le) { | 564 private void setRoleForFirstElement(Element table, String tagname, String ro le) { |
552 setAttributeForFirstElement(table, tagname, "role", role); | 565 setAttributeForFirstElement(table, tagname, "role", role); |
553 } | 566 } |
554 | 567 |
555 private void setAttributeForFirstElement(Element table, String tagname, Stri ng attrName, | 568 private void setAttributeForFirstElement(Element table, String tagname, Stri ng attrName, |
556 String attrValue) { | 569 String attrValue) { |
557 getFirstElement(table, tagname).setAttribute(attrName, attrValue); | 570 getFirstElement(table, tagname).setAttribute(attrName, attrValue); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
589 | 602 |
590 private TableElement createNestedTable(String nestedTableStr, Element parent Table) { | 603 private TableElement createNestedTable(String nestedTableStr, Element parent Table) { |
591 TableElement nestedTable = createTable(nestedTableStr); | 604 TableElement nestedTable = createTable(nestedTableStr); |
592 // Insert nested table into 1st row of |parentTable|. | 605 // Insert nested table into 1st row of |parentTable|. |
593 NodeList<Element> rows = parentTable.getElementsByTagName("TR"); | 606 NodeList<Element> rows = parentTable.getElementsByTagName("TR"); |
594 assertEquals(2, rows.getLength()); | 607 assertEquals(2, rows.getLength()); |
595 rows.getItem(0).appendChild(nestedTable); | 608 rows.getItem(0).appendChild(nestedTable); |
596 return nestedTable; | 609 return nestedTable; |
597 } | 610 } |
598 } | 611 } |
OLD | NEW |