Split AuraLinux accessibility formatting code into methods
This makes the code a bit easier to read.
Bug: 971966
Change-Id: If073a03773185ee6931208d15e3e48c744951301
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1649739
Commit-Queue: Martin Robinson <mrobinson@igalia.com>
Reviewed-by: Joanmarie Diggs <jdiggs@igalia.com>
Cr-Commit-Position: refs/heads/master@{#667538}
diff --git a/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc b/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc
index c9e23d0..e29ca1e 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc
+++ b/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc
@@ -54,6 +54,12 @@
std::unique_ptr<base::DictionaryValue> BuildAccessibilityTreeWithNode(
AtspiAccessible* node);
+ void AddValueProperties(AtkObject* atk_object, base::DictionaryValue* dict);
+ void AddTableProperties(AtkObject* atk_object, base::DictionaryValue* dict);
+ void AddTableCellProperties(const ui::AXPlatformNodeAuraLinux* node,
+ AtkObject* atk_object,
+ base::DictionaryValue* dict);
+
void RecursiveBuildAccessibilityTree(AtspiAccessible* node,
base::DictionaryValue* dict);
virtual void AddProperties(AtspiAccessible* node,
@@ -318,6 +324,157 @@
"footnote", // ATK_ROLE_FOOTNOTE = 122.
};
+void AccessibilityTreeFormatterAuraLinux::AddValueProperties(
+ AtkObject* atk_object,
+ base::DictionaryValue* dict) {
+ if (!ATK_IS_VALUE(atk_object))
+ return;
+
+ auto value_properties = std::make_unique<base::ListValue>();
+ AtkValue* value = ATK_VALUE(atk_object);
+ GValue current = G_VALUE_INIT;
+ g_value_init(¤t, G_TYPE_FLOAT);
+ atk_value_get_current_value(value, ¤t);
+ value_properties->AppendString(
+ base::StringPrintf("current=%f", g_value_get_float(¤t)));
+
+ GValue minimum = G_VALUE_INIT;
+ g_value_init(&minimum, G_TYPE_FLOAT);
+ atk_value_get_minimum_value(value, &minimum);
+ value_properties->AppendString(
+ base::StringPrintf("minimum=%f", g_value_get_float(&minimum)));
+
+ GValue maximum = G_VALUE_INIT;
+ g_value_init(&maximum, G_TYPE_FLOAT);
+ atk_value_get_maximum_value(value, &maximum);
+ value_properties->AppendString(
+ base::StringPrintf("maximum=%f", g_value_get_float(&maximum)));
+ dict->Set("value", std::move(value_properties));
+}
+
+void AccessibilityTreeFormatterAuraLinux::AddTableProperties(
+ AtkObject* atk_object,
+ base::DictionaryValue* dict) {
+ if (!ATK_IS_TABLE(atk_object))
+ return;
+
+ // Column details.
+ AtkTable* table = ATK_TABLE(atk_object);
+ int n_cols = atk_table_get_n_columns(table);
+ auto table_properties = std::make_unique<base::ListValue>();
+ table_properties->AppendString(base::StringPrintf("cols=%i", n_cols));
+
+ std::vector<std::string> col_headers;
+ for (int i = 0; i < n_cols; i++) {
+ std::string header = atk_table_get_column_description(table, i);
+ if (!header.empty())
+ col_headers.push_back(base::StringPrintf("'%s'", header.c_str()));
+ }
+
+ if (!col_headers.size())
+ col_headers.push_back("NONE");
+
+ table_properties->AppendString(base::StringPrintf(
+ "headers=(%s);", base::JoinString(col_headers, ", ").c_str()));
+
+ // Row details.
+ int n_rows = atk_table_get_n_rows(table);
+ table_properties->AppendString(base::StringPrintf("rows=%i", n_rows));
+
+ std::vector<std::string> row_headers;
+ for (int i = 0; i < n_rows; i++) {
+ std::string header = atk_table_get_row_description(table, i);
+ if (!header.empty())
+ row_headers.push_back(base::StringPrintf("'%s'", header.c_str()));
+ }
+
+ if (!row_headers.size())
+ row_headers.push_back("NONE");
+
+ table_properties->AppendString(base::StringPrintf(
+ "headers=(%s);", base::JoinString(row_headers, ", ").c_str()));
+
+ // Caption details.
+ AtkObject* caption = atk_table_get_caption(table);
+ table_properties->AppendString(
+ base::StringPrintf("caption=%s;", caption ? "true" : "false"));
+
+ // Summarize information about the cells from the table's perspective here.
+ std::vector<std::string> span_info;
+ for (int r = 0; r < n_rows; r++) {
+ for (int c = 0; c < n_cols; c++) {
+ int row_span = atk_table_get_row_extent_at(table, r, c);
+ int col_span = atk_table_get_column_extent_at(table, r, c);
+ if (row_span != 1 || col_span != 1) {
+ span_info.push_back(base::StringPrintf("cell at %i,%i: %ix%i", r, c,
+ row_span, col_span));
+ }
+ }
+ }
+ if (!span_info.size())
+ span_info.push_back("all: 1x1");
+
+ table_properties->AppendString(base::StringPrintf(
+ "spans=(%s)", base::JoinString(span_info, ", ").c_str()));
+ dict->Set("table", std::move(table_properties));
+}
+
+void AccessibilityTreeFormatterAuraLinux::AddTableCellProperties(
+ const ui::AXPlatformNodeAuraLinux* node,
+ AtkObject* atk_object,
+ base::DictionaryValue* dict) {
+ AtkRole role = atk_object_get_role(atk_object);
+ if (role != ATK_ROLE_TABLE_CELL && role != ATK_ROLE_COLUMN_HEADER &&
+ role != ATK_ROLE_ROW_HEADER) {
+ return;
+ }
+
+ int row = 0, col = 0, row_span = 0, col_span = 0;
+ int n_row_headers = 0, n_column_headers = 0;
+
+ // Properties obtained via AtkTableCell, if possible. If we do not have at
+ // least ATK 2.12, use the same logic in our AtkTableCell implementation so
+ // that tests can still be run.
+ auto cell_interface = ui::AtkTableCellInterface::Get();
+ if (cell_interface.has_value()) {
+ AtkTableCell* cell = G_TYPE_CHECK_INSTANCE_CAST(
+ (atk_object), cell_interface->GetType(), AtkTableCell);
+
+ cell_interface->GetRowColumnSpan(cell, &row, &col, &row_span, &col_span);
+
+ GPtrArray* column_headers = cell_interface->GetColumnHeaderCells(cell);
+ n_column_headers = column_headers->len;
+ g_ptr_array_unref(column_headers);
+
+ GPtrArray* row_headers = cell_interface->GetRowHeaderCells(cell);
+ n_row_headers = row_headers->len;
+ g_ptr_array_unref(row_headers);
+ } else {
+ row = node->GetTableRow();
+ col = node->GetTableColumn();
+ row_span = node->GetTableRowSpan();
+ col_span = node->GetTableColumnSpan();
+ if (role == ATK_ROLE_TABLE_CELL) {
+ auto* delegate = node->GetTable()->GetDelegate();
+ n_column_headers = delegate->GetColHeaderNodeIds(col).size();
+ n_row_headers = delegate->GetRowHeaderNodeIds(row).size();
+ }
+ }
+
+ std::vector<std::string> cell_info;
+ cell_info.push_back(base::StringPrintf("row=%i", row));
+ cell_info.push_back(base::StringPrintf("col=%i", col));
+ cell_info.push_back(base::StringPrintf("row_span=%i", row_span));
+ cell_info.push_back(base::StringPrintf("col_span=%i", col_span));
+ cell_info.push_back(base::StringPrintf("n_row_headers=%i", n_row_headers));
+ cell_info.push_back(base::StringPrintf("n_col_headers=%i", n_column_headers));
+
+ auto cell_properties = std::make_unique<base::ListValue>();
+ cell_properties->AppendString(
+ base::StringPrintf("(%s)", base::JoinString(cell_info, ", ").c_str()));
+ dict->Set("cell", std::move(cell_properties));
+}
+
void AccessibilityTreeFormatterAuraLinux::AddProperties(
const BrowserAccessibility& node,
base::DictionaryValue* dict) {
@@ -371,132 +528,9 @@
atk_attribute_set_free(attributes);
// Properties obtained via AtkValue.
- auto value_properties = std::make_unique<base::ListValue>();
- if (ATK_IS_VALUE(atk_object)) {
- AtkValue* value = ATK_VALUE(atk_object);
- GValue current = G_VALUE_INIT;
- g_value_init(¤t, G_TYPE_FLOAT);
- atk_value_get_current_value(value, ¤t);
- value_properties->AppendString(
- base::StringPrintf("current=%f", g_value_get_float(¤t)));
-
- GValue minimum = G_VALUE_INIT;
- g_value_init(&minimum, G_TYPE_FLOAT);
- atk_value_get_minimum_value(value, &minimum);
- value_properties->AppendString(
- base::StringPrintf("minimum=%f", g_value_get_float(&minimum)));
-
- GValue maximum = G_VALUE_INIT;
- g_value_init(&maximum, G_TYPE_FLOAT);
- atk_value_get_maximum_value(value, &maximum);
- value_properties->AppendString(
- base::StringPrintf("maximum=%f", g_value_get_float(&maximum)));
- }
- dict->Set("value", std::move(value_properties));
-
- // Properties obtained via AtkTable.
- auto table_properties = std::make_unique<base::ListValue>();
- if (ATK_IS_TABLE(atk_object)) {
- AtkTable* table = ATK_TABLE(atk_object);
-
- // Column details.
- int n_cols = atk_table_get_n_columns(table);
- table_properties->AppendString(base::StringPrintf("cols=%i", n_cols));
-
- std::vector<std::string> col_headers;
- for (int i = 0; i < n_cols; i++) {
- std::string header = atk_table_get_column_description(table, i);
- if (!header.empty())
- col_headers.push_back(base::StringPrintf("'%s'", header.c_str()));
- }
-
- if (!col_headers.size())
- col_headers.push_back("NONE");
-
- table_properties->AppendString(base::StringPrintf(
- "headers=(%s);", base::JoinString(col_headers, ", ").c_str()));
-
- // Row details.
- int n_rows = atk_table_get_n_rows(table);
- table_properties->AppendString(base::StringPrintf("rows=%i", n_rows));
-
- std::vector<std::string> row_headers;
- for (int i = 0; i < n_rows; i++) {
- std::string header = atk_table_get_row_description(table, i);
- if (!header.empty())
- row_headers.push_back(base::StringPrintf("'%s'", header.c_str()));
- }
-
- if (!row_headers.size())
- row_headers.push_back("NONE");
-
- table_properties->AppendString(base::StringPrintf(
- "headers=(%s);", base::JoinString(row_headers, ", ").c_str()));
-
- // Caption details.
- AtkObject* caption = atk_table_get_caption(table);
- table_properties->AppendString(
- base::StringPrintf("caption=%s;", caption ? "true" : "false"));
-
- // Summarize information about the cells from the table's perspective here.
- std::vector<std::string> span_info;
- for (int r = 0; r < n_rows; r++) {
- for (int c = 0; c < n_cols; c++) {
- int row_span = atk_table_get_row_extent_at(table, r, c);
- int col_span = atk_table_get_column_extent_at(table, r, c);
- if (row_span != 1 || col_span != 1) {
- span_info.push_back(base::StringPrintf("cell at %i,%i: %ix%i", r, c,
- row_span, col_span));
- }
- }
- }
- if (!span_info.size())
- span_info.push_back("all: 1x1");
-
- table_properties->AppendString(base::StringPrintf(
- "spans=(%s)", base::JoinString(span_info, ", ").c_str()));
- }
-
- dict->Set("table", std::move(table_properties));
-
- // Properties obtained via AtkTableCell, if possible. If we do not have at
- // least ATK 2.12, use the same logic in our AtkTableCell implementation so
- // that tests can still be run.
- auto cell_properties = std::make_unique<base::ListValue>();
- if (role == ATK_ROLE_TABLE_CELL || role == ATK_ROLE_COLUMN_HEADER ||
- role == ATK_ROLE_ROW_HEADER) {
- int row, col, row_span, col_span;
- int n_row_headers = 0, n_column_headers = 0;
- auto cell_interface = ui::AtkTableCellInterface::Get();
- if (cell_interface.has_value()) {
- AtkTableCell* cell = G_TYPE_CHECK_INSTANCE_CAST(
- (atk_object), cell_interface->GetType(), AtkTableCell);
- GPtrArray* column_headers = cell_interface->GetColumnHeaderCells(cell);
- GPtrArray* row_headers = cell_interface->GetRowHeaderCells(cell);
- n_column_headers = column_headers->len;
- n_row_headers = row_headers->len;
- g_ptr_array_unref(column_headers);
- g_ptr_array_unref(row_headers);
- cell_interface->GetRowColumnSpan(cell, &row, &col, &row_span, &col_span);
- } else {
- row = ax_platform_node->GetTableRow();
- col = ax_platform_node->GetTableColumn();
- row_span = ax_platform_node->GetTableRowSpan();
- col_span = ax_platform_node->GetTableColumnSpan();
- if (role == ATK_ROLE_TABLE_CELL) {
- auto* delegate = ax_platform_node->GetTable()->GetDelegate();
- n_column_headers = delegate->GetColHeaderNodeIds(col).size();
- n_row_headers = delegate->GetRowHeaderNodeIds(row).size();
- }
- }
- cell_properties->AppendString(
- base::StringPrintf("(row=%i, col=%i, row_span=%i, col_span=%i", row,
- col, row_span, col_span));
- cell_properties->AppendString(
- base::StringPrintf("n_row_headers=%i, n_col_headers=%i)", n_row_headers,
- n_column_headers));
- }
- dict->Set("cell", std::move(cell_properties));
+ AddValueProperties(atk_object, dict);
+ AddTableProperties(atk_object, dict);
+ AddTableCellProperties(ax_platform_node, atk_object, dict);
}
void AccessibilityTreeFormatterAuraLinux::AddProperties(
diff --git a/content/test/data/accessibility/aria/aria-cell-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-cell-expected-auralinux.txt
index 88b140d4..7f1e4d00d 100644
--- a/content/test/data/accessibility/aria/aria-cell-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-cell-expected-auralinux.txt
@@ -1,12 +1,12 @@
[document web]
++[table] cols=2 headers=('Browser', 'Rendering Engine'); rows=2 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[column header] name='Browser' selectable (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Browser' selectable (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Browser'
-++++++[column header] name='Rendering Engine' selectable (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Rendering Engine' selectable (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Rendering Engine'
++++[table row] selectable
-++++++[table cell] name='Chrome' selectable (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Chrome' selectable (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Chrome'
-++++++[table cell] name='Blink' selectable (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Blink' selectable (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Blink'
diff --git a/content/test/data/accessibility/aria/aria-col-attr-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-col-attr-expected-auralinux.txt
index ef09828..43091386 100644
--- a/content/test/data/accessibility/aria/aria-col-attr-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-col-attr-expected-auralinux.txt
@@ -1,18 +1,18 @@
[document web]
++[table] colcount:5 cols=4 headers=('cell 2', 'cell 4', 'cell 5'); rows=2 headers=(NONE); caption=false; spans=(cell at 0,3: 0x0)
++++[table row] selectable
-++++++[column header] name='cell 2' selectable colindex:2 colspan:2 (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='cell 2' selectable colindex:2 colspan:2 (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='cell 2'
-++++++[column header] name='cell 4' selectable colindex:4 (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='cell 4' selectable colindex:4 (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='cell 4'
-++++++[column header] name='cell 5' selectable colindex:5 (row=0, col=2, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='cell 5' selectable colindex:5 (row=0, col=2, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='cell 5'
++++[table row] selectable
-++++++[table cell] name='cell 2' selectable colindex:2 (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='cell 2' selectable colindex:2 (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='cell 2'
-++++++[table cell] name='cell 3' selectable colindex:3 (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='cell 3' selectable colindex:3 (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='cell 3'
-++++++[table cell] name='cell 4' selectable colindex:4 (row=1, col=2, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='cell 4' selectable colindex:4 (row=1, col=2, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='cell 4'
-++++++[table cell] name='cell 5' selectable colindex:5 (row=1, col=3, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='cell 5' selectable colindex:5 (row=1, col=3, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='cell 5'
diff --git a/content/test/data/accessibility/aria/aria-columnheader-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-columnheader-expected-auralinux.txt
index 2724dbc..78dabd1 100644
--- a/content/test/data/accessibility/aria/aria-columnheader-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-columnheader-expected-auralinux.txt
@@ -1,17 +1,17 @@
[document web]
++[table] cols=2 headers=('Browser', 'Rendering Engine'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[column header] name='Browser' selectable (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Browser' selectable (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Browser'
-++++++[column header] name='Rendering Engine' selectable (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Rendering Engine' selectable (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Rendering Engine'
++++[table row] selectable
-++++++[table cell] name='Chrome' selectable (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Chrome' selectable (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Chrome'
-++++++[table cell] name='Blink' selectable (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Blink' selectable (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Blink'
++++[table row] selectable
-++++++[table cell] name='Safari' selectable (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Safari' selectable (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Safari'
-++++++[table cell] name='WebKit' selectable (row=2, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='WebKit' selectable (row=2, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='WebKit'
diff --git a/content/test/data/accessibility/aria/aria-grid-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-grid-expected-auralinux.txt
index ba72a89..57b3c43 100644
--- a/content/test/data/accessibility/aria/aria-grid-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-grid-expected-auralinux.txt
@@ -1,12 +1,12 @@
[document web]
++[table] xml-roles:grid cols=2 headers=('Browser', 'Rendering Engine'); rows=2 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row] selectable xml-roles:row
-++++++[column header] name='Browser' selectable colindex:1 rowindex:1 xml-roles:columnheader (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Browser' selectable colindex:1 rowindex:1 xml-roles:columnheader (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Browser'
-++++++[column header] name='Rendering Engine' selectable colindex:2 rowindex:1 xml-roles:columnheader (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Rendering Engine' selectable colindex:2 rowindex:1 xml-roles:columnheader (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Rendering Engine'
++++[table row] selectable xml-roles:row
-++++++[table cell] name='Chrome' selectable colindex:1 rowindex:2 xml-roles:gridcell (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Chrome' selectable colindex:1 rowindex:2 xml-roles:gridcell (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Chrome'
-++++++[table cell] name='Blink' selectable colindex:2 rowindex:2 xml-roles:gridcell (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Blink' selectable colindex:2 rowindex:2 xml-roles:gridcell (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Blink'
diff --git a/content/test/data/accessibility/aria/aria-gridcell-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-gridcell-expected-auralinux.txt
index df09bb2..48b74fd 100644
--- a/content/test/data/accessibility/aria/aria-gridcell-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-gridcell-expected-auralinux.txt
@@ -1,12 +1,12 @@
[document web]
++[table] multiselectable xml-roles:grid cols=2 headers=('Browser', 'Rendering Engine'); rows=2 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row] selectable xml-roles:row
-++++++[column header] name='Browser' selectable colindex:1 rowindex:1 xml-roles:columnheader (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Browser' selectable colindex:1 rowindex:1 xml-roles:columnheader (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Browser'
-++++++[column header] name='Rendering Engine' selectable colindex:2 rowindex:1 xml-roles:columnheader (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Rendering Engine' selectable colindex:2 rowindex:1 xml-roles:columnheader (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Rendering Engine'
++++[table row] selectable xml-roles:row
-++++++[table cell] name='Chrome' selectable colindex:1 rowindex:2 xml-roles:gridcell (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Chrome' selectable colindex:1 rowindex:2 xml-roles:gridcell (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Chrome'
-++++++[table cell] name='Blink' selectable colindex:2 rowindex:2 xml-roles:gridcell (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Blink' selectable colindex:2 rowindex:2 xml-roles:gridcell (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Blink'
diff --git a/content/test/data/accessibility/aria/aria-illegal-val-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-illegal-val-expected-auralinux.txt
index 780db7e..6c5f965 100644
--- a/content/test/data/accessibility/aria/aria-illegal-val-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-illegal-val-expected-auralinux.txt
@@ -21,4 +21,4 @@
++[entry] name='Required illegal' required selectable-text
++[tree] multiselectable
++++[tree item] name='Selected illegal' selectable selected
-++[column header] name='Sort illegal' selectable sort:other (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++[column header] name='Sort illegal' selectable sort:other (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
diff --git a/content/test/data/accessibility/aria/aria-level-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-level-expected-auralinux.txt
index 413a33c..4d69dfd 100644
--- a/content/test/data/accessibility/aria/aria-level-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-level-expected-auralinux.txt
@@ -23,8 +23,8 @@
++++++[text] name='Tree item at level 3'
++[tree table]
++++[table row] selectable level:1
-++++++[table cell] name='Cell at level 1' selectable (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='Cell at level 1' selectable (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Cell at level 1'
++++[table row] selectable level:2
-++++++[table cell] name='Cell at level 2' selectable (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='Cell at level 2' selectable (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Cell at level 2'
diff --git a/content/test/data/accessibility/aria/aria-row-attr-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-row-attr-expected-auralinux.txt
index 6ad5b7b..8208642b 100644
--- a/content/test/data/accessibility/aria/aria-row-attr-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-row-attr-expected-auralinux.txt
@@ -1,14 +1,14 @@
[document web]
++[table] rowcount:5 cols=3 headers=('cell 2', 'cell 3', 'cell 4'); rows=2 headers=(NONE); caption=false; spans=(cell at 1,2: 0x0)
++++[table row] selectable
-++++++[column header] name='cell 2' selectable rowindex:3 (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='cell 2' selectable rowindex:3 (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='cell 2'
-++++++[column header] name='cell 3' selectable rowindex:3 (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='cell 3' selectable rowindex:3 (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='cell 3'
-++++++[column header] name='cell 4' selectable rowindex:3 rowspan:2 (row=0, col=2, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='cell 4' selectable rowindex:3 rowspan:2 (row=0, col=2, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='cell 4'
++++[table row] selectable rowindex:4
-++++++[table cell] name='cell 2' selectable rowindex:4 (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='cell 2' selectable rowindex:4 (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='cell 2'
-++++++[table cell] name='cell 3' selectable rowindex:4 (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='cell 3' selectable rowindex:4 (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='cell 3'
diff --git a/content/test/data/accessibility/aria/aria-row-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-row-expected-auralinux.txt
index 2724dbc..78dabd1 100644
--- a/content/test/data/accessibility/aria/aria-row-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-row-expected-auralinux.txt
@@ -1,17 +1,17 @@
[document web]
++[table] cols=2 headers=('Browser', 'Rendering Engine'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[column header] name='Browser' selectable (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Browser' selectable (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Browser'
-++++++[column header] name='Rendering Engine' selectable (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Rendering Engine' selectable (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Rendering Engine'
++++[table row] selectable
-++++++[table cell] name='Chrome' selectable (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Chrome' selectable (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Chrome'
-++++++[table cell] name='Blink' selectable (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Blink' selectable (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Blink'
++++[table row] selectable
-++++++[table cell] name='Safari' selectable (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Safari' selectable (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Safari'
-++++++[table cell] name='WebKit' selectable (row=2, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='WebKit' selectable (row=2, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='WebKit'
diff --git a/content/test/data/accessibility/aria/aria-rowheader-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-rowheader-expected-auralinux.txt
index 209ead19..8334afd 100644
--- a/content/test/data/accessibility/aria/aria-rowheader-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-rowheader-expected-auralinux.txt
@@ -1,16 +1,16 @@
[document web]
++[table] xml-roles:grid cols=3 headers=(NONE); rows=2 headers=('Browser', 'Rendering Engine'); caption=false; spans=(all: 1x1)
++++[table row] selectable xml-roles:row
-++++++[row header] name='Browser' selectable xml-roles:rowheader (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Browser' selectable xml-roles:rowheader (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Browser'
-++++++[table cell] name='Chrome' selectable xml-roles:gridcell (row=0, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='Chrome' selectable xml-roles:gridcell (row=0, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='Chrome'
-++++++[table cell] name='Safari' selectable xml-roles:gridcell (row=0, col=2, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='Safari' selectable xml-roles:gridcell (row=0, col=2, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='Safari'
++++[table row] selectable xml-roles:row
-++++++[row header] name='Rendering Engine' selectable xml-roles:rowheader (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Rendering Engine' selectable xml-roles:rowheader (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Rendering Engine'
-++++++[table cell] name='Blink' selectable xml-roles:gridcell (row=1, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='Blink' selectable xml-roles:gridcell (row=1, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='Blink'
-++++++[table cell] name='WebKit' selectable xml-roles:gridcell (row=1, col=2, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='WebKit' selectable xml-roles:gridcell (row=1, col=2, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='WebKit'
diff --git a/content/test/data/accessibility/aria/aria-rowtext-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-rowtext-expected-auralinux.txt
index 4bfd3c2..952d1e1 100644
--- a/content/test/data/accessibility/aria/aria-rowtext-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-rowtext-expected-auralinux.txt
@@ -1,12 +1,12 @@
[document web]
++[table] cols=2 headers=(NONE); rows=2 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[table cell] name='cell A3' selectable colindex:1 coltext:A rowindex:3 rowtext:3 (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='cell A3' selectable colindex:1 coltext:A rowindex:3 rowtext:3 (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='cell A3'
-++++++[table cell] name='cell B3' selectable colindex:2 coltext:B rowindex:3 rowtext:3 (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='cell B3' selectable colindex:2 coltext:B rowindex:3 rowtext:3 (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='cell B3'
++++[table row] selectable
-++++++[table cell] name='cell A4' selectable colindex:1 coltext:A rowindex:4 rowtext:4 (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='cell A4' selectable colindex:1 coltext:A rowindex:4 rowtext:4 (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='cell A4'
-++++++[table cell] name='cell B4' selectable colindex:2 coltext:B rowindex:4 rowtext:4 (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='cell B4' selectable colindex:2 coltext:B rowindex:4 rowtext:4 (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='cell B4'
diff --git a/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-auralinux.txt
index 95cb00d..3dfa23d 100644
--- a/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-auralinux.txt
@@ -1,91 +1,91 @@
[document web]
++[table] cols=1 headers=('Alphabet'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[column header] name='Alphabet' selectable (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Alphabet' selectable (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
++++[table row] selectable
-++++++[table cell] name='A' selectable (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' selectable (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
++++[table row] selectable
-++++++[table cell] name='B' selectable (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='B' selectable (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='B'
++[table] cols=1 headers=('Alphabet'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[column header] name='Alphabet' selectable (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Alphabet' selectable (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
++++[table row] selectable
-++++++[table cell] name='A' selectable (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' selectable (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
++++[table row] selectable
-++++++[table cell] name='B' selectable (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='B' selectable (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='B'
++[table] cols=1 headers=('Alphabet'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[column header] name='Alphabet' selectable sort:ascending (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Alphabet' selectable sort:ascending (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
++++[table row] selectable
-++++++[table cell] name='A' selectable (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' selectable (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
++++[table row] selectable
-++++++[table cell] name='B' selectable (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='B' selectable (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='B'
++[table] cols=1 headers=('Alphabet'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[column header] name='Alphabet' selectable sort:descending (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Alphabet' selectable sort:descending (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
++++[table row] selectable
-++++++[table cell] name='B' selectable (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='B' selectable (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='B'
++++[table row] selectable
-++++++[table cell] name='A' selectable (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' selectable (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
++[table] cols=1 headers=('Alphabet'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[column header] name='Alphabet' selectable sort:other (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Alphabet' selectable sort:other (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
++++[table row] selectable
-++++++[table cell] name='A' selectable (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' selectable (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
++++[table row] selectable
-++++++[table cell] name='A' selectable (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' selectable (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
++[table] cols=3 headers=(NONE); rows=1 headers=('Alphabet'); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[row header] name='Alphabet' selectable (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Alphabet' selectable (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
-++++++[table cell] name='A' selectable (row=0, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='A' selectable (row=0, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='A'
-++++++[table cell] name='B' selectable (row=0, col=2, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='B' selectable (row=0, col=2, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='B'
++[table] cols=3 headers=(NONE); rows=1 headers=('Alphabet'); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[row header] name='Alphabet' selectable (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Alphabet' selectable (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
-++++++[table cell] name='A' selectable (row=0, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='A' selectable (row=0, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='A'
-++++++[table cell] name='B' selectable (row=0, col=2, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='B' selectable (row=0, col=2, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='B'
++[table] cols=3 headers=(NONE); rows=1 headers=('Alphabet'); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[row header] name='Alphabet' selectable sort:ascending (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Alphabet' selectable sort:ascending (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
-++++++[table cell] name='A' selectable (row=0, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='A' selectable (row=0, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='A'
-++++++[table cell] name='B' selectable (row=0, col=2, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='B' selectable (row=0, col=2, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='B'
++[table] cols=3 headers=(NONE); rows=1 headers=('Alphabet'); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[row header] name='Alphabet' selectable sort:descending (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Alphabet' selectable sort:descending (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
-++++++[table cell] name='B' selectable (row=0, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='B' selectable (row=0, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='B'
-++++++[table cell] name='A' selectable (row=0, col=2, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='A' selectable (row=0, col=2, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='A'
++[table] cols=3 headers=(NONE); rows=1 headers=('Alphabet'); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[row header] name='Alphabet' selectable sort:other (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Alphabet' selectable sort:other (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
-++++++[table cell] name='A' selectable (row=0, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='A' selectable (row=0, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='A'
-++++++[table cell] name='A' selectable (row=0, col=2, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='A' selectable (row=0, col=2, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='A'
diff --git a/content/test/data/accessibility/aria/aria-sort-html-table-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-sort-html-table-expected-auralinux.txt
index 9d0cdfc6..3b2497a7 100644
--- a/content/test/data/accessibility/aria/aria-sort-html-table-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-sort-html-table-expected-auralinux.txt
@@ -1,103 +1,103 @@
[document web]
++[table] name='Data table' cols=1 headers=('Alphabet'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[column header] name='Alphabet' (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Alphabet' (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
++++[table row]
-++++++[table cell] name='A' (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
++++[table row]
-++++++[table cell] name='B' (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='B' (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='B'
++[table] name='Data table' cols=1 headers=('Alphabet'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[column header] name='Alphabet' (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Alphabet' (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
++++[table row]
-++++++[table cell] name='A' (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
++++[table row]
-++++++[table cell] name='B' (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='B' (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='B'
++[table] name='Data table' cols=1 headers=('Alphabet'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[column header] name='Alphabet' sort:ascending (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Alphabet' sort:ascending (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
++++[table row]
-++++++[table cell] name='A' (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
++++[table row]
-++++++[table cell] name='B' (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='B' (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='B'
++[table] name='Data table' cols=1 headers=('Alphabet'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[column header] name='Alphabet' sort:descending (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Alphabet' sort:descending (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
++++[table row]
-++++++[table cell] name='B' (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='B' (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='B'
++++[table row]
-++++++[table cell] name='A' (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
++[table] name='Data table' cols=1 headers=('Alphabet'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[column header] name='Alphabet' sort:other (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Alphabet' sort:other (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
++++[table row]
-++++++[table cell] name='A' (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
++++[table row]
-++++++[table cell] name='A' (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
++[table] name='Data table' cols=3 headers=(NONE); rows=1 headers=('Alphabet'); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[row header] name='Alphabet' (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Alphabet' (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
-++++++[table cell] name='A' (row=0, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='A' (row=0, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='A'
-++++++[table cell] name='B' (row=0, col=2, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='B' (row=0, col=2, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='B'
++[table] name='Data table' cols=3 headers=(NONE); rows=1 headers=('Alphabet'); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[row header] name='Alphabet' (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Alphabet' (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
-++++++[table cell] name='A' (row=0, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='A' (row=0, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='A'
-++++++[table cell] name='B' (row=0, col=2, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='B' (row=0, col=2, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='B'
++[table] name='Data table' cols=3 headers=(NONE); rows=1 headers=('Alphabet'); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[row header] name='Alphabet' sort:ascending (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Alphabet' sort:ascending (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
-++++++[table cell] name='A' (row=0, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='A' (row=0, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='A'
-++++++[table cell] name='B' (row=0, col=2, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='B' (row=0, col=2, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='B'
++[table] name='Data table' cols=3 headers=(NONE); rows=1 headers=('Alphabet'); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[row header] name='Alphabet' sort:descending (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Alphabet' sort:descending (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
-++++++[table cell] name='B' (row=0, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='B' (row=0, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='B'
-++++++[table cell] name='A' (row=0, col=2, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='A' (row=0, col=2, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='A'
++[table] name='Data table' cols=3 headers=(NONE); rows=1 headers=('Alphabet'); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[row header] name='Alphabet' sort:other (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Alphabet' sort:other (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
-++++++[table cell] name='A' (row=0, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='A' (row=0, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='A'
-++++++[table cell] name='A' (row=0, col=2, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='A' (row=0, col=2, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='A'
++[table] name='Data table' cols=1 headers=('Alphabet'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[column header] name='Alphabet' (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Alphabet' (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Alphabet'
++++[table row]
-++++++[table cell] name='A' (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
++++[table row]
-++++++[table cell] name='B' (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='B' (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='B'
++[section]
++++[text] name='Alphabet'
diff --git a/content/test/data/accessibility/aria/aria-table-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-table-expected-auralinux.txt
index 88b140d4..7f1e4d00d 100644
--- a/content/test/data/accessibility/aria/aria-table-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-table-expected-auralinux.txt
@@ -1,12 +1,12 @@
[document web]
++[table] cols=2 headers=('Browser', 'Rendering Engine'); rows=2 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row] selectable
-++++++[column header] name='Browser' selectable (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Browser' selectable (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Browser'
-++++++[column header] name='Rendering Engine' selectable (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Rendering Engine' selectable (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Rendering Engine'
++++[table row] selectable
-++++++[table cell] name='Chrome' selectable (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Chrome' selectable (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Chrome'
-++++++[table cell] name='Blink' selectable (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Blink' selectable (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Blink'
diff --git a/content/test/data/accessibility/aria/aria-treegrid-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-treegrid-expected-auralinux.txt
index a50d2db..e9437cc 100644
--- a/content/test/data/accessibility/aria/aria-treegrid-expected-auralinux.txt
+++ b/content/test/data/accessibility/aria/aria-treegrid-expected-auralinux.txt
@@ -1,12 +1,12 @@
[document web]
++[tree table] xml-roles:treegrid
++++[table row] selectable level:1 xml-roles:row
-++++++[table cell] name='Cell at level 1' selectable xml-roles:gridcell (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='Cell at level 1' selectable xml-roles:gridcell (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Cell at level 1'
++++[table row] selectable level:2 xml-roles:row
-++++++[table cell] name='Cell at level 2' selectable xml-roles:gridcell (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='Cell at level 2' selectable xml-roles:gridcell (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Cell at level 2'
++[tree table] xml-roles:treegrid
++++[table row] selectable level:1 xml-roles:row
-++++++[table cell] name='Cell at level 1' selectable xml-roles:gridcell (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='Cell at level 1' selectable xml-roles:gridcell (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Cell at level 1'
diff --git a/content/test/data/accessibility/html/caption-expected-auralinux.txt b/content/test/data/accessibility/html/caption-expected-auralinux.txt
index b8531c2..2e805b63 100644
--- a/content/test/data/accessibility/html/caption-expected-auralinux.txt
+++ b/content/test/data/accessibility/html/caption-expected-auralinux.txt
@@ -3,17 +3,17 @@
++++[caption] label-for
++++++[text] name='Browser and Engine'
++++[table row]
-++++++[column header] name='Browser' (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Browser' (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Browser'
-++++++[column header] name='Engine' (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Engine' (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Engine'
++++[table row]
-++++++[table cell] name='Chrome' (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Chrome' (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Chrome'
-++++++[table cell] name='Blink' (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Blink' (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Blink'
++++[table row]
-++++++[table cell] name='Safari' (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Safari' (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Safari'
-++++++[table cell] name='WebKit' (row=2, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='WebKit' (row=2, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='WebKit'
diff --git a/content/test/data/accessibility/html/col-expected-auralinux.txt b/content/test/data/accessibility/html/col-expected-auralinux.txt
index 6863cda8..cfa81eb 100644
--- a/content/test/data/accessibility/html/col-expected-auralinux.txt
+++ b/content/test/data/accessibility/html/col-expected-auralinux.txt
@@ -1,12 +1,12 @@
[document web]
++[table] cols=2 headers=('Browser', 'Rendering Engine'); rows=2 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[column header] name='Browser' (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Browser' (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Browser'
-++++++[column header] name='Rendering Engine' (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Rendering Engine' (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Rendering Engine'
++++[table row]
-++++++[table cell] name='Chrome' (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Chrome' (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Chrome'
-++++++[table cell] name='Blink' (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Blink' (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Blink'
diff --git a/content/test/data/accessibility/html/colgroup-expected-auralinux.txt b/content/test/data/accessibility/html/colgroup-expected-auralinux.txt
index 93d4721..173f62b1 100644
--- a/content/test/data/accessibility/html/colgroup-expected-auralinux.txt
+++ b/content/test/data/accessibility/html/colgroup-expected-auralinux.txt
@@ -1,12 +1,12 @@
[document web]
++[table] cols=2 headers=('Single', 'Pair'); rows=2 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[column header] name='Single' (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Single' (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Single'
-++++++[column header] name='Pair' (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Pair' (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Pair'
++++[table row]
-++++++[table cell] name='A' (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='A' (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='A'
-++++++[table cell] name='AA' (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='AA' (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='AA'
diff --git a/content/test/data/accessibility/html/contenteditable-descendants-expected-auralinux.txt b/content/test/data/accessibility/html/contenteditable-descendants-expected-auralinux.txt
index fb2efbe..40c01f6e 100644
--- a/content/test/data/accessibility/html/contenteditable-descendants-expected-auralinux.txt
+++ b/content/test/data/accessibility/html/contenteditable-descendants-expected-auralinux.txt
@@ -11,7 +11,7 @@
++++++[text] name='.' editable
++++[table] editable cols=1 headers=(NONE); rows=1 headers=(NONE); caption=false; spans=(all: 1x1)
++++++[table row] editable
-++++++++[table cell] name='Always expose editable tables as tables.' editable (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++++[table cell] name='Always expose editable tables as tables.' editable (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++++[text] name='Always expose editable tables as tables.' editable
++++[list] editable
++++++[list item] editable
diff --git a/content/test/data/accessibility/html/contenteditable-descendants-with-selection-expected-auralinux.txt b/content/test/data/accessibility/html/contenteditable-descendants-with-selection-expected-auralinux.txt
index 2fa7f7a..c7d2535 100644
--- a/content/test/data/accessibility/html/contenteditable-descendants-with-selection-expected-auralinux.txt
+++ b/content/test/data/accessibility/html/contenteditable-descendants-with-selection-expected-auralinux.txt
@@ -11,7 +11,7 @@
++++++[text] name='.' editable
++++[table] editable cols=1 headers=(NONE); rows=1 headers=(NONE); caption=false; spans=(all: 1x1)
++++++[table row] editable
-++++++++[table cell] name='Always expose editable tables as tables.' editable (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++++[table cell] name='Always expose editable tables as tables.' editable (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++++[text] name='Always expose editable tables as tables.' editable
++++[list] editable
++++++[list item] editable
diff --git a/content/test/data/accessibility/html/table-focusable-sections-expected-auralinux.txt b/content/test/data/accessibility/html/table-focusable-sections-expected-auralinux.txt
index f776f1df..92491f7 100644
--- a/content/test/data/accessibility/html/table-focusable-sections-expected-auralinux.txt
+++ b/content/test/data/accessibility/html/table-focusable-sections-expected-auralinux.txt
@@ -2,24 +2,24 @@
++[table] cols=2 headers=('Sum', 'Subtraction'); rows=4 headers=(NONE); caption=false; spans=(all: 1x1)
++++[panel]
++++++[table row]
-++++++++[column header] name='Sum' (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++++[column header] name='Sum' (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++++[text] name='Sum'
-++++++++[column header] name='Subtraction' (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++++[column header] name='Subtraction' (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++++[text] name='Subtraction'
++++[panel]
++++++[table row]
-++++++++[table cell] name='10' (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++++[table cell] name='10' (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++++[text] name='10'
-++++++++[table cell] name='7' (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++++[table cell] name='7' (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++++[text] name='7'
++++++[table row]
-++++++++[table cell] name='2' (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++++[table cell] name='2' (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++++[text] name='2'
-++++++++[table cell] name='4' (row=2, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++++[table cell] name='4' (row=2, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++++[text] name='4'
++++[panel]
++++++[table row]
-++++++++[table cell] name='12' (row=3, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++++[table cell] name='12' (row=3, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++++[text] name='12'
-++++++++[table cell] name='3' (row=3, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++++[table cell] name='3' (row=3, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++++[text] name='3'
diff --git a/content/test/data/accessibility/html/table-simple-expected-auralinux.txt b/content/test/data/accessibility/html/table-simple-expected-auralinux.txt
index 6f2a7de..b086df3 100644
--- a/content/test/data/accessibility/html/table-simple-expected-auralinux.txt
+++ b/content/test/data/accessibility/html/table-simple-expected-auralinux.txt
@@ -1,17 +1,17 @@
[document web] name='Table example'
++[table] cols=2 headers=('Pair', 'Single'); rows=3 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[column header] name='Pair' (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Pair' (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Pair'
-++++++[column header] name='Single' (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Single' (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Single'
++++[table row]
-++++++[table cell] name='AB' (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='AB' (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='AB'
-++++++[table cell] name='B' (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='B' (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='B'
++++[table row]
-++++++[table cell] name='CD' (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='CD' (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='CD'
-++++++[table cell] name='D' (row=2, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='D' (row=2, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='D'
diff --git a/content/test/data/accessibility/html/table-spans-expected-auralinux.txt b/content/test/data/accessibility/html/table-spans-expected-auralinux.txt
index 3380342..4161be06 100644
--- a/content/test/data/accessibility/html/table-spans-expected-auralinux.txt
+++ b/content/test/data/accessibility/html/table-spans-expected-auralinux.txt
@@ -1,21 +1,21 @@
[document web] name='Table example with rowspan and colspan'
++[table] cols=2 headers=(NONE); rows=2 headers=(NONE); caption=false; spans=(cell at 0,0: 2x1, cell at 1,0: 2x1)
++++[table row]
-++++++[table cell] name='AD' (row=0, col=0, row_span=2, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='AD' (row=0, col=0, row_span=2, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='AD'
-++++++[table cell] name='BC' (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='BC' (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='BC'
++++[table row]
-++++++[table cell] name='EF' (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='EF' (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='EF'
++[table] cols=3 headers=(NONE); rows=2 headers=(NONE); caption=false; spans=(cell at 0,0: 2x1, cell at 0,1: 1x2, cell at 0,2: 1x2, cell at 1,0: 2x1)
++++[table row]
-++++++[table cell] name='AD' (row=0, col=0, row_span=2, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='AD' (row=0, col=0, row_span=2, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='AD'
-++++++[table cell] name='BC' (row=0, col=1, row_span=1, col_span=2 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='BC' (row=0, col=1, row_span=1, col_span=2, n_row_headers=0, n_col_headers=0)
++++++++[text] name='BC'
++++[table row]
-++++++[table cell] name='EF' (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='EF' (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='EF'
-++++++[table cell] name='GH' (row=1, col=2, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[table cell] name='GH' (row=1, col=2, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='GH'
diff --git a/content/test/data/accessibility/html/table-th-colheader-expected-auralinux.txt b/content/test/data/accessibility/html/table-th-colheader-expected-auralinux.txt
index 15a3f20..53fa61da 100644
--- a/content/test/data/accessibility/html/table-th-colheader-expected-auralinux.txt
+++ b/content/test/data/accessibility/html/table-th-colheader-expected-auralinux.txt
@@ -1,12 +1,12 @@
[document web]
++[table] cols=2 headers=('Firstname', 'Lastname'); rows=2 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[column header] name='Firstname' table-cell-index:0 (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Firstname' table-cell-index:0 (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Firstname'
-++++++[column header] name='Lastname' table-cell-index:1 (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Lastname' table-cell-index:1 (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Lastname'
++++[table row]
-++++++[table cell] name='Jill' table-cell-index:2 (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Jill' table-cell-index:2 (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Jill'
-++++++[table cell] name='Smith' table-cell-index:3 (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='Smith' table-cell-index:3 (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='Smith'
diff --git a/content/test/data/accessibility/html/table-th-rowheader-expected-auralinux.txt b/content/test/data/accessibility/html/table-th-rowheader-expected-auralinux.txt
index ed81a2c..6455469 100644
--- a/content/test/data/accessibility/html/table-th-rowheader-expected-auralinux.txt
+++ b/content/test/data/accessibility/html/table-th-rowheader-expected-auralinux.txt
@@ -1,12 +1,12 @@
[document web] name='Table example - th rowheader'
++[table] cols=2 headers=(NONE); rows=2 headers=('Firstname', 'Lastname'); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[row header] name='Firstname' (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Firstname' (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Firstname'
-++++++[table cell] name='Jill' (row=0, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='Jill' (row=0, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='Jill'
++++[table row]
-++++++[row header] name='Lastname' (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[row header] name='Lastname' (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Lastname'
-++++++[table cell] name='Smith' (row=1, col=1, row_span=1, col_span=1 n_row_headers=1, n_col_headers=0)
+++++++[table cell] name='Smith' (row=1, col=1, row_span=1, col_span=1, n_row_headers=1, n_col_headers=0)
++++++++[text] name='Smith'
diff --git a/content/test/data/accessibility/html/table-thead-tbody-tfoot-expected-auralinux.txt b/content/test/data/accessibility/html/table-thead-tbody-tfoot-expected-auralinux.txt
index f71c4455..49d96556 100644
--- a/content/test/data/accessibility/html/table-thead-tbody-tfoot-expected-auralinux.txt
+++ b/content/test/data/accessibility/html/table-thead-tbody-tfoot-expected-auralinux.txt
@@ -1,22 +1,22 @@
[document web] name='Table example - thead, tbody, tfoot'
++[table] cols=2 headers=('Sum', 'Subtraction'); rows=4 headers=(NONE); caption=false; spans=(all: 1x1)
++++[table row]
-++++++[column header] name='Sum' (row=0, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Sum' (row=0, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Sum'
-++++++[column header] name='Subtraction' (row=0, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=0)
+++++++[column header] name='Subtraction' (row=0, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=0)
++++++++[text] name='Subtraction'
++++[table row]
-++++++[table cell] name='10' (row=1, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='10' (row=1, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='10'
-++++++[table cell] name='7' (row=1, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='7' (row=1, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='7'
++++[table row]
-++++++[table cell] name='2' (row=2, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='2' (row=2, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='2'
-++++++[table cell] name='4' (row=2, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='4' (row=2, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='4'
++++[table row]
-++++++[table cell] name='12' (row=3, col=0, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='12' (row=3, col=0, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='12'
-++++++[table cell] name='3' (row=3, col=1, row_span=1, col_span=1 n_row_headers=0, n_col_headers=1)
+++++++[table cell] name='3' (row=3, col=1, row_span=1, col_span=1, n_row_headers=0, n_col_headers=1)
++++++++[text] name='3'