| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| /** |
| * @fileoverview using private properties isn't a Closure violation in tests. |
| * @suppress {accessControls} |
| */ |
| |
| DataGridTestRunner.dumpDataGrid = function(root, descentIntoCollapsed, prefix) { |
| if (!prefix) { |
| prefix = ''; |
| } |
| const suffix = root.selected ? ' <- selected' : ''; |
| const columnKeys = root.dataGrid._columnsArray.map(column => column.id); |
| const outputColumns = []; |
| for (const key of columnKeys) { |
| if (key in root.data) { |
| outputColumns.push(root.data[key]); |
| } |
| } |
| if (outputColumns.length) { |
| TestRunner.addResult(prefix + outputColumns.join(' | ') + suffix); |
| } |
| |
| if (!descentIntoCollapsed && !root.expanded) { |
| return; |
| } |
| for (const child of root.children) { |
| DataGridTestRunner.dumpDataGrid(child, descentIntoCollapsed, prefix + ' '); |
| } |
| }; |
| |
| DataGridTestRunner.validateDataGrid = function(root) { |
| const children = root.children; |
| |
| for (let i = 0; i < children.length; ++i) { |
| const child = children[i]; |
| |
| if (child.parent !== root) { |
| throw 'Wrong parent for child ' + child.data.id + ' of ' + root.data.id; |
| } |
| |
| if (child.nextSibling !== ((i + 1 === children.length ? null : children[i + 1]))) { |
| throw 'Wrong child.nextSibling for ' + child.data.id + ' (' + i + ' of ' + children.length + ') '; |
| } |
| |
| if (child.previousSibling !== ((i ? children[i - 1] : null))) { |
| throw 'Wrong child.previousSibling for ' + child.data.id + ' (' + i + ' of ' + children.length + ') '; |
| } |
| |
| if (child.parent && !child.parent._isRoot && child.depth !== root.depth + 1) { |
| throw 'Wrong depth for ' + child.data.id + ' expected ' + (root.depth + 1) + ' but got ' + child.depth; |
| } |
| |
| DataGridTestRunner.validateDataGrid(child); |
| } |
| |
| const selectedNode = root.dataGrid.selectedNode; |
| |
| if (!root.parent && selectedNode) { |
| if (!selectedNode.selectable) { |
| throw 'Selected node is not selectable'; |
| } |
| let node = selectedNode; |
| for (; node && node !== root; node = node.parent) { |
| } |
| |
| if (!node) { |
| throw 'Selected node (' + selectedNode.data.id + ') is not within the DataGrid'; |
| } |
| } |
| }; |
| |
| DataGridTestRunner.dumpAndValidateDataGrid = function(root) { |
| DataGridTestRunner.dumpDataGrid(root); |
| DataGridTestRunner.validateDataGrid(root); |
| }; |