blob: ac6a8d5404e3606d09743d0f7f83e3e8a0d05447 [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 file system project.\n`);
await TestRunner.loadModule('sources_test_runner');
await TestRunner.loadModule('bindings_test_runner');
await TestRunner.showPanel('sources');
function fileSystemUISourceCodes() {
var uiSourceCodes = [];
var fileSystemProjects = Workspace.workspace.projectsForType(Workspace.projectTypes.FileSystem);
for (var project of fileSystemProjects)
uiSourceCodes = uiSourceCodes.concat(project.uiSourceCodes());
return uiSourceCodes;
}
function dumpUISourceCode(uiSourceCode, callback) {
TestRunner.addResult('UISourceCode: ' + uiSourceCode.url().replace(/.*(LayoutTests|web_tests)./, ''));
if (uiSourceCode.contentType() === Common.resourceTypes.Script ||
uiSourceCode.contentType() === Common.resourceTypes.Document)
TestRunner.addResult(
'UISourceCode is content script: ' +
(uiSourceCode.project().type() === Workspace.projectTypes.ContentScripts));
uiSourceCode.requestContent().then(didRequestContent);
function didRequestContent(content, contentEncoded) {
TestRunner.addResult('Highlighter type: ' + uiSourceCode.mimeType());
TestRunner.addResult('UISourceCode content: ' + content);
callback();
}
}
function dumpUISourceCodes(uiSourceCodes, next) {
innerDumpUISourceCodes(uiSourceCodes, 0, next);
function innerDumpUISourceCodes(uiSourceCodes, startIndex, next) {
TestRunner.addResult('');
if (startIndex === uiSourceCodes.length) {
next();
return;
}
dumpUISourceCode(
uiSourceCodes[startIndex], innerDumpUISourceCodes.bind(this, uiSourceCodes, startIndex + 1, next));
}
}
function dumpUISourceCodeLocations(uiSourceCodes, lineNumber) {
TestRunner.addResult('Dumping uiSourceCode location link texts:');
for (var i = 0; i < uiSourceCodes.length; ++i) {
var uiSourceCode = uiSourceCodes[i];
var uiLocation = uiSourceCode.uiLocation(lineNumber);
TestRunner.addResult(' - ' + uiLocation.linkText());
}
}
function dumpWorkspaceUISourceCodes() {
TestRunner.addResult('Dumping uiSourceCodes origin URLs:');
var uiSourceCodes = fileSystemUISourceCodes();
for (var i = 0; i < uiSourceCodes.length; ++i)
TestRunner.addResult(' - ' + uiSourceCodes[i].url());
}
function createFileSystem(name, callback) {
var fs = new BindingsTestRunner.TestFileSystem(name);
fs.root.mkdir('html').addFile('foo.js', '');
fs.root.mkdir('.git').addFile('foogit.js', '');
fs.root.addFile('bar.js', '');
fs.root.mkdir('html2').addFile('foo.js', '');
fs.reportCreated(callback.bind(null, fs));
}
TestRunner.runTestSuite([
function testFileSystems(next) {
TestRunner.addResult('Adding first file system.');
var fs1 = new BindingsTestRunner.TestFileSystem('file:///var/www');
var fs2 = new BindingsTestRunner.TestFileSystem('file:///foo/bar');
TestRunner.addResult('Adding second file system.');
TestRunner.addResult('Adding files to file systems.');
var localhostDir = fs1.root.mkdir('localhost');
localhostDir.addFile('foo.js', '<foo content>');
fs1.root.addFile('bar.js', '<bark content>');
fs2.root.addFile('baz.js', '<bazzz content>');
fs1.reportCreated(function() {});
fs2.reportCreated(function() {});
Workspace.workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded, onUISourceCode);
var count = 3;
function onUISourceCode() {
if (--count)
return;
Workspace.workspace.removeEventListener(Workspace.Workspace.Events.UISourceCodeAdded, onUISourceCode);
onUISourceCodesLoaded();
}
var uiSourceCodes;
function onUISourceCodesLoaded() {
uiSourceCodes = fileSystemUISourceCodes();
dumpUISourceCodes(uiSourceCodes, uiSourceCodesDumped);
}
function uiSourceCodesDumped() {
dumpUISourceCodeLocations(uiSourceCodes, 5);
Workspace.workspace.addEventListener(Workspace.Workspace.Events.WorkingCopyCommitted, contentCommitted, this);
uiSourceCodes[0].addRevision('<Modified UISourceCode content>');
}
function contentCommitted() {
TestRunner.addResult('After revision added:');
dumpUISourceCode(uiSourceCodes[0], finalize);
}
function finalize() {
fs1.reportRemoved();
fs2.reportRemoved();
next();
}
},
function testDefaultExcludes(next) {
createFileSystem('file:///var/www', dumpExcludes);
function dumpExcludes(fs) {
TestRunner.addResult('');
TestRunner.addResult('-- Default excludes --');
dumpWorkspaceUISourceCodes();
fs.reportRemoved();
next();
}
},
function testExcludesSettings(next) {
Common.settings.createLocalSetting('workspaceExcludedFolders', {}).set({'file:///var/www2': ['/html/']});
createFileSystem('file:///var/www2', dumpExcludes);
function dumpExcludes(fs) {
TestRunner.addResult('');
TestRunner.addResult('-- Excluded /html/ --');
dumpWorkspaceUISourceCodes();
fs.reportRemoved();
next();
}
},
function testExcludesViaDelegate(next) {
createFileSystem('file:///var/www3', dumpExcludes);
function dumpExcludes(fs) {
fileSystemUISourceCodes()[0].project().excludeFolder('file:///var/www3/html2/');
TestRunner.addResult('');
TestRunner.addResult('-- Excluded /html2/ --');
dumpWorkspaceUISourceCodes();
fs.reportRemoved();
next();
}
},
function testFileAddedExternally(next) {
var fs = new BindingsTestRunner.TestFileSystem('file:///var/www4');
var dir = fs.root.mkdir('html');
dir.addFile('foo.js', '');
fs.reportCreated(dumpFileSystem);
function dumpFileSystem() {
TestRunner.addResult('-- Original tree --');
dumpWorkspaceUISourceCodes();
dir.addFile('bar.js', '');
InspectorFrontendHost.events.dispatchEventToListeners(
InspectorFrontendHostAPI.Events.FileSystemFilesChangedAddedRemoved,
{changed: [], added: ['/var/www4/html/bar.js'], removed: []});
TestRunner.addResult('-- File added externally --');
dumpWorkspaceUISourceCodes();
fs.reportRemoved();
next();
}
},
function testGitFolders(next) {
var fs = new BindingsTestRunner.TestFileSystem('file:///var/www3');
var project1 = fs.root.mkdir('project_1');
project1.mkdir('.git').addFile('foo.git');
var project2 = fs.root.mkdir('project_2');
project2.mkdir('.git').addFile('bar.git');
var project3 = fs.root.mkdir('project_3');
project3.mkdir('.svn').addFile('baz.svn');
var project4 = fs.root.mkdir('project_4');
project4.addFile('index.html');
fs.reportCreated(dumpGitFolders);
function dumpGitFolders() {
var isolatedFileSystem = Persistence.isolatedFileSystemManager.fileSystem('file:///var/www3');
var folders = isolatedFileSystem.initialGitFolders();
folders.sort();
for (var gitFolder of folders)
TestRunner.addResult(gitFolder);
fs.reportRemoved();
next();
}
},
function testUISourceCodeMetadata(next) {
var fs = new BindingsTestRunner.TestFileSystem('file:///var/www3');
var file = fs.root.mkdir('test').addFile('hello.js', '123456');
fs.reportCreated(function() {});
SourcesTestRunner.waitForScriptSource('hello.js', onUISourceCode);
var uiSourceCode;
function onUISourceCode(sourceCode) {
uiSourceCode = sourceCode;
uiSourceCode.requestMetadata().then(onInitialMetadata);
}
function onInitialMetadata(metadata) {
dumpMetadata('Initial metadata', metadata);
file.setContent('changed content');
uiSourceCode.requestMetadata().then(onChangedMetadata);
}
function onChangedMetadata(metadata) {
dumpMetadata('Changed metadata', metadata);
fs.reportRemoved();
next();
}
function dumpMetadata(label, metadata) {
TestRunner.addResult(label);
TestRunner.addResult(' content size: ' + metadata.contentSize);
TestRunner.addResult(' modification time: ' + metadata.modificationTime.toISOString());
}
},
function testFileRename(next) {
var fs = new BindingsTestRunner.TestFileSystem('file:///var/www3');
var file = fs.root.mkdir('test').addFile('hello.js', '123456');
fs.reportCreated(function() {});
SourcesTestRunner.waitForScriptSource('hello.js', onUISourceCode);
var uiSourceCode;
var originalURL;
function onUISourceCode(sourceCode) {
uiSourceCode = sourceCode;
originalURL = uiSourceCode.url();
TestRunner.addResult('URL before rename: ' + originalURL);
uiSourceCode.rename('goodbye.js').then(renamed);
}
function renamed() {
TestRunner.addResult('URL after rename: ' + uiSourceCode.url());
if (uiSourceCode.project().workspace().uiSourceCodeForURL(originalURL))
TestRunner.addResult('ERROR: Still found original URL in workspace.');
if (!uiSourceCode.project().workspace().uiSourceCodeForURL(uiSourceCode.url()))
TestRunner.addResult('ERROR: Could not find new URL in workspace.');
next();
}
}
]);
})();