META-INF.dirigible.dev-tools.layers_test_runner.LayersTestRunner.js Maven / Gradle / Ivy
// 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}
*/
LayersTestRunner.layerTreeModel = function() {
if (!LayersTestRunner._layerTreeModel) {
LayersTestRunner._layerTreeModel = TestRunner.mainTarget.model(Layers.LayerTreeModel);
}
return LayersTestRunner._layerTreeModel;
};
LayersTestRunner.labelForLayer = function(layer) {
const node = layer.nodeForSelfOrAncestor();
let label = (node ? Elements.DOMPath.fullQualifiedSelector(node, false) : '');
const height = layer.height();
const width = layer.width();
if (height <= 200 && width <= 200) {
label += ' ' + height + 'x' + width;
}
if (typeof layer.__extraData !== 'undefined') {
label += ' (' + layer.__extraData + ')';
}
return label;
};
LayersTestRunner.dumpLayerTree = function(prefix, root) {
if (!prefix) {
prefix = '';
}
if (!root) {
root = LayersTestRunner.layerTreeModel().layerTree().contentRoot();
if (!root) {
TestRunner.addResult('No layer root, perhaps not in the composited mode! ');
TestRunner.completeTest();
return;
}
}
TestRunner.addResult(prefix + LayersTestRunner.labelForLayer(root));
root.children().forEach(LayersTestRunner.dumpLayerTree.bind(LayersTestRunner, prefix + ' '));
};
LayersTestRunner.dumpLayers3DView = function(prefix, root) {
if (!prefix) {
prefix = '';
}
if (!root) {
root = UI.panels.layers._layers3DView._rotatingContainerElement;
}
if (root.__layer) {
TestRunner.addResult(prefix + LayersTestRunner.labelForLayer(root.__layer));
}
for (let element = root.firstElementChild; element; element = element.nextSibling) {
LayersTestRunner.dumpLayers3DView(prefix + ' ', element);
}
};
LayersTestRunner.evaluateAndWaitForTreeChange = async function(expression) {
await TestRunner.evaluateInPageAnonymously(expression);
return LayersTestRunner.layerTreeModel().once(Layers.LayerTreeModel.Events.LayerTreeChanged);
};
LayersTestRunner.findLayerByNodeIdAttribute = function(nodeIdAttribute) {
let result;
function testLayer(layer) {
const node = layer.node();
if (!node) {
return false;
}
if (!node || node.getAttribute('id') !== nodeIdAttribute) {
return false;
}
result = layer;
return true;
}
LayersTestRunner.layerTreeModel().layerTree().forEachLayer(testLayer);
if (!result) {
TestRunner.addResult('ERROR: No layer for ' + nodeIdAttribute);
}
return result;
};
LayersTestRunner.requestLayers = function() {
LayersTestRunner.layerTreeModel().enable();
return LayersTestRunner.layerTreeModel().once(Layers.LayerTreeModel.Events.LayerTreeChanged);
};
LayersTestRunner.dispatchMouseEvent = function(eventType, button, element, offsetX, offsetY) {
const totalOffset = element.totalOffset();
const eventArguments = {
bubbles: true,
cancelable: true,
view: window,
screenX: totalOffset.left - element.scrollLeft + offsetX,
screenY: totalOffset.top - element.scrollTop + offsetY,
clientX: totalOffset.left + offsetX,
clientY: totalOffset.top + offsetY,
button: button,
composed: true
};
if (eventType === 'mouseout') {
eventArguments.screenX = 0;
eventArguments.screenY = 0;
eventArguments.clientX = 0;
eventArguments.clientY = 0;
}
element.dispatchEvent(new MouseEvent(eventType, eventArguments));
};
LayersTestRunner.findLayerTreeElement = function(layer) {
const element = layer[LayerViewer.LayerTreeElement._symbol];
element.reveal();
return element.listItemElement;
};
LayersTestRunner.dispatchMouseEventToLayerTree = function(eventType, button, layer) {
const element = LayersTestRunner.findLayerTreeElement(layer);
TestRunner.assertTrue(!!element);
LayersTestRunner.dispatchMouseEvent(eventType, button, element, element.clientWidth >> 1, element.clientHeight >> 1);
};
LayersTestRunner.dumpSelectedStyles = function(message, element) {
const classes = [];
if (element.classList.contains('selected')) {
classes.push('selected');
}
if (element.classList.contains('hovered')) {
classes.push('hovered');
}
TestRunner.addResult(message + ': ' + classes.join(', '));
};