Chromium Code Reviews| 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 |