summaryrefslogtreecommitdiffstats
path: root/editor/libeditor/tests/test_nsITableEditor_getSelectedCellsType.html
diff options
context:
space:
mode:
Diffstat (limited to 'editor/libeditor/tests/test_nsITableEditor_getSelectedCellsType.html')
-rw-r--r--editor/libeditor/tests/test_nsITableEditor_getSelectedCellsType.html251
1 files changed, 251 insertions, 0 deletions
diff --git a/editor/libeditor/tests/test_nsITableEditor_getSelectedCellsType.html b/editor/libeditor/tests/test_nsITableEditor_getSelectedCellsType.html
new file mode 100644
index 0000000000..33884b8e20
--- /dev/null
+++ b/editor/libeditor/tests/test_nsITableEditor_getSelectedCellsType.html
@@ -0,0 +1,251 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Test for nsITableEditor.getSelectedCellsType()</title>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script src="/tests/SimpleTest/EventUtils.js"></script>
+ <link rel="stylesheet" href="/tests/SimpleTest/test.css">
+</head>
+<body>
+<div id="display">
+</div>
+<div id="content" contenteditable></div>
+<pre id="test">
+</pre>
+
+<script class="testbody" type="application/javascript">
+"use strict";
+
+SimpleTest.waitForExplicitFinish();
+SimpleTest.waitForFocus(function() {
+ let editor = document.getElementById("content");
+ let selection = document.getSelection();
+
+ const kTableSelectionMode_None = 0;
+ const kTableSelectionMode_Cell = 1;
+ const kTableSelectionMode_Row = 2;
+ const kTableSelectionMode_Column = 3;
+
+ (function test_without_selection_range() {
+ selection.removeAllRanges();
+ try {
+ getTableEditor().getSelectedCellsType(null);
+ ok(false, "nsITableEditor.getSelectedCellsType(null) should cause throwing an exception when editor does not have Selection");
+ } catch (e) {
+ ok(true, "nsITableEditor.getSelectedCellsType(null) should cause throwing an exception when editor does not have Selection");
+ }
+ })();
+
+ (function test_without_table() {
+ editor.innerHTML = "<p>Here is a paragraph</p>";
+ selection.collapse(editor.querySelector("p").firstChild, 0);
+ try {
+ getTableEditor().getSelectedCellsType(null);
+ ok(false, "nsITableEditor.getSelectedCellsType(null) should cause throwing an exception when editor does not have a <table>");
+ } catch (e) {
+ ok(true, "nsITableEditor.getSelectedCellsType(null) should cause throwing an exception when editor does not have a <table>");
+ }
+ })();
+
+ (function test_with_selection_outside_table() {
+ editor.innerHTML = "<p>Here is a paragraph before the table</p>" +
+ "<table><tr><td>cell</td></tr></table>";
+ selection.collapse(editor.querySelector("p").firstChild, 0);
+ try {
+ getTableEditor().getSelectedCellsType(null);
+ ok(false, "nsITableEditor.getSelectedCellsType(null) should cause throwing an exception when selection is outside the <table>");
+ } catch (e) {
+ ok(true, "nsITableEditor.getSelectedCellsType(null) should cause throwing an exception when selection is outside the <table>");
+ }
+ })();
+
+ (function test_with_selection_in_text_in_cell() {
+ editor.innerHTML = "<table><tr><td>cell</td></tr></table>";
+ selection.collapse(editor.querySelector("td").firstChild, 0);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_None,
+ "nsITableEditor.getSelectedCellsType(null) should return None when selection is collapsed in a text node in a cell");
+ })();
+
+ (function test_with_selecting_a_cell_which_is_only_one_cell_in_table() {
+ editor.innerHTML = "<table><tr><td>cell</td></tr></table>";
+ selection.setBaseAndExtent(editor.querySelector("tr"), 0, editor.querySelector("tr"), 1);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_Row,
+ "nsITableEditor.getSelectedCellsType(null) should return Row when selection selects the cell which is only one in the table");
+ })();
+
+ (function test_with_selecting_a_cell_whose_table_has_one_row() {
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr></table>";
+ selection.setBaseAndExtent(editor.querySelector("tr"), 0, editor.querySelector("tr"), 1);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_Column,
+ "nsITableEditor.getSelectedCellsType(null) should return Column when selection selects a cell in the first row which is only one in the table");
+ })();
+
+ (function test_with_selecting_a_cell_whose_table_has_one_column() {
+ editor.innerHTML = "<table><tr><td>cell1</td></tr><tr><td>cell2</td></tr></table>";
+ selection.setBaseAndExtent(editor.querySelector("tr"), 0, editor.querySelector("tr"), 1);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_Row,
+ "nsITableEditor.getSelectedCellsType(null) should return Row when selection selects a cell in the first row which is only one in the row");
+ })();
+
+ (function test_with_selecting_a_cell_at_1_1_whose_table_has_2x2_cells() {
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ selection.setBaseAndExtent(editor.querySelector("tr"), 0, editor.querySelector("tr"), 1);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_Cell,
+ "nsITableEditor.getSelectedCellsType(null) should return Cell when selection selects a cell at first row and first column");
+ })();
+
+ (function test_with_selecting_a_cell_at_1_2_whose_table_has_2x2_cells() {
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ selection.setBaseAndExtent(editor.querySelector("tr"), 1, editor.querySelector("tr"), 2);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_Cell,
+ "nsITableEditor.getSelectedCellsType(null) should return Cell when selection selects a cell at first row and second column");
+ })();
+
+ (function test_with_selecting_a_cell_at_2_1_whose_table_has_2x2_cells() {
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ selection.setBaseAndExtent(editor.querySelector("tr + tr"), 0, editor.querySelector("tr + tr"), 1);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_Cell,
+ "nsITableEditor.getSelectedCellsType(null) should return Cell when selection selects a cell at second row and first column");
+ })();
+
+ (function test_with_selecting_a_cell_at_2_2_whose_table_has_2x2_cells() {
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ selection.setBaseAndExtent(editor.querySelector("tr + tr"), 1, editor.querySelector("tr + tr"), 2);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_Cell,
+ "nsITableEditor.getSelectedCellsType(null) should return Cell when selection selects a cell at second row and second column");
+ })();
+
+ (function test_with_selecting_a_cell_at_1_1_whose_colspan_2_and_whose_table_has_2x2_cells() {
+ editor.innerHTML = "<table><tr><td colspan=\"2\">cell1</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ selection.setBaseAndExtent(editor.querySelector("tr"), 0, editor.querySelector("tr"), 1);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_Row,
+ "nsITableEditor.getSelectedCellsType(null) should return Row when selection selects a cell whose colspan is 2 at first row");
+ })();
+
+ (function test_with_selecting_a_cell_at_1_1_whose_rowspan_2_and_whose_table_has_2x2_cells() {
+ editor.innerHTML = "<table><tr><td rowspan=\"2\">cell1</td><td>cell2</td></tr><tr><td>cell4</td></tr></table>";
+ selection.setBaseAndExtent(editor.querySelector("tr"), 0, editor.querySelector("tr"), 1);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_Column,
+ "nsITableEditor.getSelectedCellsType(null) should return Column when selection selects a cell whose row is 2 at first column");
+ })();
+
+ (function test_with_selecting_all_cells_in_first_row_whose_table_has_2x2_cells() {
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ synthesizeMouseAtCenter(editor.querySelector("td"), {accelKey: true});
+ synthesizeMouseAtCenter(editor.querySelector("td + td"), {accelKey: true});
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_Row,
+ "nsITableEditor.getSelectedCellsType(null) should return Row when selection selects all cells in the first row whose table has 2 rows and 2 columns");
+ })();
+
+ (function test_with_selecting_all_cells_in_first_column_whose_table_has_2x2_cells() {
+ selection.removeAllRanges();
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ synthesizeMouseAtCenter(editor.querySelector("td"), {accelKey: true});
+ synthesizeMouseAtCenter(editor.querySelector("tr + tr > td"), {accelKey: true});
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_Column,
+ "nsITableEditor.getSelectedCellsType(null) should return Row when selection selects all cells in the first column whose table has 2 rows and 2 columns");
+ })();
+
+ (function test_with_selecting_all_cells_whose_table_has_2x2_cells() {
+ selection.removeAllRanges();
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ synthesizeMouseAtCenter(editor.querySelector("td"), {accelKey: true});
+ synthesizeMouseAtCenter(editor.querySelector("td + td"), {accelKey: true});
+ synthesizeMouseAtCenter(editor.querySelector("tr + tr > td"), {accelKey: true});
+ synthesizeMouseAtCenter(editor.querySelector("tr + tr > td + td"), {accelKey: true});
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_Row,
+ "nsITableEditor.getSelectedCellsType(null) should return Row when selection selects all cells whose table has 2 rows and 2 columns");
+ })();
+
+ (function test_with_selecting_a_raw() {
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ selection.setBaseAndExtent(editor.querySelector("tbody"), 0, editor.querySelector("tbody"), 1);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_None,
+ "nsITableEditor.getSelectedCellsType(null) should return None when selection selects a row");
+ })();
+
+ (function test_with_selecting_a_tbody() {
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ selection.setBaseAndExtent(editor.querySelector("table"), 0, editor.querySelector("table"), 1);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_None,
+ "nsITableEditor.getSelectedCellsType(null) should return None when selection selects a tbody");
+ })();
+
+ (function test_with_selecting_a_table() {
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ selection.setBaseAndExtent(editor, 0, editor, 1);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_None,
+ "nsITableEditor.getSelectedCellsType(null) should return None when selection selects a table");
+ })();
+
+ (function test_with_selecting_cells_in_different_table() {
+ selection.removeAllRanges();
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>" +
+ "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ let range = document.createRange();
+ range.selectNode(editor.querySelector("td"));
+ selection.addRange(range);
+ range = document.createRange();
+ range.selectNode(editor.querySelector("table + table td"));
+ selection.addRange(range);
+ is(getTableEditor().getSelectedCellsType(null), kTableSelectionMode_Cell,
+ "nsITableEditor.getSelectedCellsType(null) should return Cell when selection selects 2 cells in different tables");
+ })();
+
+ (function test_with_selecting_a_cell_in_the_table() {
+ selection.removeAllRanges();
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>" +
+ "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ let range = document.createRange();
+ range.selectNode(editor.querySelector("td"));
+ selection.addRange(range);
+ is(getTableEditor().getSelectedCellsType(editor.querySelector("table")), kTableSelectionMode_Cell,
+ "nsITableEditor.getSelectedCellsType(editor.querySelector(\"table\")) should return Cell when selection selects a cell in the table");
+ })();
+
+ (function test_with_selecting_a_cell_in_the_table_specifying_different_cell() {
+ selection.removeAllRanges();
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>" +
+ "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ let range = document.createRange();
+ range.selectNode(editor.querySelector("tr + tr > td"));
+ selection.addRange(range);
+ is(getTableEditor().getSelectedCellsType(editor.querySelector("td")), kTableSelectionMode_Cell,
+ "nsITableEditor.getSelectedCellsType(editor.querySelector(\"td\")) should return Cell when selection selects a cell in the table");
+ })();
+
+ (function test_with_selecting_a_cell_in_the_other_table() {
+ selection.removeAllRanges();
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>" +
+ "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ let range = document.createRange();
+ range.selectNode(editor.querySelector("td"));
+ selection.addRange(range);
+ todo_is(getTableEditor().getSelectedCellsType(editor.querySelector("table + table")), kTableSelectionMode_None,
+ "nsITableEditor.getSelectedCellsType(editor.querySelector(\"table + table\")) should return None when selection selects a cell in the other table");
+ })();
+
+ (function test_with_selecting_a_cell_in_the_other_table_specifying_a_cell_in_the_other_one() {
+ selection.removeAllRanges();
+ editor.innerHTML = "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>" +
+ "<table><tr><td>cell1</td><td>cell2</td></tr><tr><td>cell3</td><td>cell4</td></tr></table>";
+ let range = document.createRange();
+ range.selectNode(editor.querySelector("td"));
+ selection.addRange(range);
+ todo_is(getTableEditor().getSelectedCellsType(editor.querySelector("table + table td")), kTableSelectionMode_None,
+ "nsITableEditor.getSelectedCellsType(editor.querySelector(\"table + table td\")) should return None when selection selects a cell in the other table");
+ })();
+
+ SimpleTest.finish();
+});
+
+function getTableEditor() {
+ var Ci = SpecialPowers.Ci;
+ var editingSession = SpecialPowers.wrap(window).docShell.editingSession;
+ return editingSession.getEditorForWindow(window).QueryInterface(Ci.nsITableEditor);
+}
+
+</script>
+</body>
+
+</html>