blob: b9fa5ded2db28dd59f7febdd9abc584ae1eb6c41 [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(`Verify that syncing Node.js contents works fine.\n`);
await TestRunner.loadModule('sources_test_runner');
await TestRunner.loadModule('bindings_test_runner');
var testMapping = BindingsTestRunner.initializeTestMapping();
// Pretend we are running under V8 front-end.
SDK.targetManager.mainTarget().markAsNodeJSForTest();
var content = ['', '', 'var express = require("express");', '//TODO'].join('\n');
var fsContent = Persistence.Persistence._NodeShebang + content;
var nodeContent = Persistence.Persistence._NodePrefix + content + Persistence.Persistence._NodeSuffix;
TestRunner.addResult('Initial fileSystem content:');
TestRunner.addResult(indent(fsContent));
TestRunner.addResult('\n Initial network content:');
TestRunner.addResult(indent(nodeContent));
await SourcesTestRunner.addScriptUISourceCode('http://127.0.0.1:8000/nodejs.js', nodeContent);
// Add filesystem UISourceCode and mapping.
var fs = new BindingsTestRunner.TestFileSystem('file:///var/www');
var fsEntry = fs.root.addFile('nodejs.js', fsContent);
fs.reportCreated(function() {});
var binding;
testMapping.addBinding('nodejs.js');
BindingsTestRunner.waitForBinding('nodejs.js').then(onBindingCreated);
function onBindingCreated(theBinding) {
binding = theBinding;
TestRunner.addResult('Binding created: ' + binding);
TestRunner.runTestSuite(testSuite);
}
var testSuite = [
function addNetworkUISourceCodeRevision(next) {
var newContent = nodeContent.replace('//TODO', 'network();\n//TODO');
TestRunner.addSniffer(Persistence.Persistence.prototype, '_contentSyncedForTest', onSynced);
const writePromise = TestRunner.addSnifferPromise(BindingsTestRunner.TestFileSystem.Writer.prototype, 'truncate');
binding.network.addRevision(newContent);
function onSynced() {
dumpBindingContent();
writePromise.then(next);
}
},
function setNetworkUISourceCodeWorkingCopy(next) {
var newContent = nodeContent.replace('//TODO', 'workingCopy1();\n//TODO');
TestRunner.addSniffer(Persistence.Persistence.prototype, '_contentSyncedForTest', onSynced);
binding.network.setWorkingCopy(newContent);
function onSynced() {
dumpBindingContent();
next();
}
},
async function changeFileSystemFile(next) {
var newContent = fsContent.replace('//TODO', 'filesystem();\n//TODO');
TestRunner.addSniffer(Persistence.Persistence.prototype, '_contentSyncedForTest', onSynced);
fsEntry.setContent(newContent);
function onSynced() {
dumpBindingContent();
next();
}
},
function setFileSystemUISourceCodeWorkingCopy(next) {
var newContent = fsContent.replace('//TODO', 'workingCopy2();\n//TODO');
TestRunner.addSniffer(Persistence.Persistence.prototype, '_contentSyncedForTest', onSynced);
binding.fileSystem.setWorkingCopy(newContent);
function onSynced() {
dumpBindingContent();
next();
}
},
];
function dumpBindingContent() {
TestRunner.addResult('Network:');
TestRunner.addResult(indent(binding.network.workingCopy()));
TestRunner.addResult('');
TestRunner.addResult('FileSystem:');
TestRunner.addResult(indent(binding.fileSystem.workingCopy()));
TestRunner.addResult('');
}
function indent(content) {
return content.split('\n').map(line => ' ' + line).join('\n');
}
})();