blob: 88a3b2ed8a850e9dd8775e19382dd434db1919ae [file] [log] [blame]
// 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.
(async function() {
TestRunner.addResult(`Tests SourceMap and StyleSheetMapping.\n`);
await TestRunner.loadModule('sources_test_runner');
await TestRunner.evaluateInPagePromise(`
function addStyleSheet()
{
var style = document.createElement("link");
style.setAttribute("rel", "stylesheet");
style.setAttribute("type", "text/css");
style.setAttribute("href", "http://127.0.0.1:8000/devtools/resources/example.css");
document.head.appendChild(style);
}
`);
var contentReceived;
var finalMappedLocation;
var target = TestRunner.mainTarget;
var cssModel = TestRunner.cssModel;
const styleSheetURL = 'http://127.0.0.1:8000/devtools/resources/example.css';
const sourceURL = 'http://127.0.0.1:8000/devtools/resources/example.scss';
var styleSheetId;
TestRunner.waitForUISourceCode(styleSheetURL).then(cssUISourceCodeAdded);
TestRunner.evaluateInPage('addStyleSheet()');
function locationsUpdated() {
var header = cssModel.styleSheetHeaderForId(styleSheetId);
var uiLocation = Bindings.cssWorkspaceBinding.rawLocationToUILocation(new SDK.CSSLocation(header, 2, 3));
if (uiLocation.uiSourceCode.url().indexOf('.scss') === -1)
return;
finalMappedLocation = uiLocation.uiSourceCode.url() + ':' + uiLocation.lineNumber + ':' + uiLocation.columnNumber;
join();
}
function cssUISourceCodeAdded(uiSourceCode) {
styleSheetId = cssModel.styleSheetIdsForURL(styleSheetURL)[0];
TestRunner.addSniffer(Bindings.CSSWorkspaceBinding.ModelInfo.prototype, '_updateLocations', locationsUpdated, true);
TestRunner.addResult('Added CSS uiSourceCode: ' + uiSourceCode.url());
TestRunner.waitForUISourceCode(sourceURL).then(scssUISourceCodeAdded);
}
function testAndDumpLocation(uiSourceCode, expectedLine, expectedColumn, line, column) {
var header = cssModel.styleSheetHeaderForId(styleSheetId);
var uiLocation = Bindings.cssWorkspaceBinding.rawLocationToUILocation(new SDK.CSSLocation(header, line, column));
TestRunner.assertEquals(
uiSourceCode, uiLocation.uiSourceCode,
`Incorrect uiSourceCode, expected ${uiSourceCode.url()}, but got ${
location.uiSourceCode ? location.uiSourceCode.url() : null}`);
var reverseRaw = Bindings.cssWorkspaceBinding.uiLocationToRawLocations(uiLocation)[0];
TestRunner.addResult(
`${line}:${column} ${uiLocation.lineNumber}:${uiLocation.columnNumber}` +
`(expected: ${expectedLine}:${expectedColumn}) -> ${reverseRaw.lineNumber}:${reverseRaw.columnNumber}`);
}
function scssUISourceCodeAdded(uiSourceCode) {
TestRunner.addResult('Added SCSS uiSourceCode: ' + uiSourceCode.url());
var cssUISourceCode = Workspace.workspace.uiSourceCodeForURL(styleSheetURL);
var scssUISourceCode = Workspace.workspace.uiSourceCodeForURL(sourceURL);
testAndDumpLocation(cssUISourceCode, 0, 3, 0, 3);
testAndDumpLocation(scssUISourceCode, 1, 0, 1, 0);
testAndDumpLocation(scssUISourceCode, 2, 2, 2, 4);
testAndDumpLocation(scssUISourceCode, 2, 5, 2, 6);
testAndDumpLocation(scssUISourceCode, 2, 7, 2, 9);
testAndDumpLocation(scssUISourceCode, 2, 10, 3, 7);
testAndDumpLocation(scssUISourceCode, 4, 2, 4, 8);
testAndDumpLocation(scssUISourceCode, 4, 2, 4, 10);
testAndDumpLocation(scssUISourceCode, 4, 11, 4, 11);
testAndDumpLocation(scssUISourceCode, 4, 13, 4, 15);
testAndDumpLocation(scssUISourceCode, 4, 17, 4, 20);
scssUISourceCode.requestContent().then(didRequestContent);
function didRequestContent({ content, error, isEncoded }) {
TestRunner.assertEquals(0, content.indexOf('/* Comment */'));
contentReceived = true;
join();
}
}
function join() {
if (!contentReceived || !finalMappedLocation)
return;
TestRunner.addResult('UILocation upon LiveLocation update: ' + finalMappedLocation);
TestRunner.completeTest();
}
})();