| Index: third_party/WebKit/LayoutTests/inspector/sass/test-workspace-adapter.html
|
| diff --git a/third_party/WebKit/LayoutTests/inspector/sass/test-workspace-adapter.html b/third_party/WebKit/LayoutTests/inspector/sass/test-workspace-adapter.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9243eedcc22a318bcef47d7a7546b219a618ca21
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/inspector/sass/test-workspace-adapter.html
|
| @@ -0,0 +1,189 @@
|
| +<html>
|
| +<head>
|
| +
|
| +<script src="../../http/tests/inspector/inspector-test.js"></script>
|
| +<script src="../../http/tests/inspector/debugger-test.js"></script>
|
| +<script src="../../http/tests/inspector/isolated-filesystem-test.js"></script>
|
| +<script src="./sass-test.js"></script>
|
| +<script>
|
| +
|
| +var styles = [];
|
| +function addStyleSheets()
|
| +{
|
| + for (var i = 0; i < 2; ++i) {
|
| + var style = document.createElement("style");
|
| + style.textContent = "<all.css content>\n/*# sourceURL=all.css */";
|
| + document.head.appendChild(style);
|
| + styles.push(style);
|
| + }
|
| +
|
| + var style = document.createElement("style");
|
| + style.textContent = "<print.css content>\n/*# sourceURL=print.css */";
|
| + document.head.appendChild(style);
|
| + styles.push(style);
|
| +}
|
| +
|
| +function removeStyles(amount)
|
| +{
|
| + for (var i = 0; i < amount; ++i)
|
| + styles.shift().remove();
|
| +}
|
| +
|
| +function test()
|
| +{
|
| + function createTracker(trackerName, cssURL, sassURLs)
|
| + {
|
| + var sources = sassURLs;
|
| + var fakeSourceMap = {
|
| + sources: () => sources,
|
| + compiledURL: () => cssURL
|
| + };
|
| + var tracker = InspectorTest.sassWorkspaceAdapter().trackSources(fakeSourceMap);
|
| + tracker.__NAME = trackerName;
|
| + tracker.addEventListener(WebInspector.SourceMapTracker.Events.SourceChanged, onSourceChanged);
|
| + tracker.addEventListener(WebInspector.SourceMapTracker.Events.TrackingStopped, onTrackingStopped);
|
| + return tracker;
|
| +
|
| + function onSourceChanged(event)
|
| + {
|
| + InspectorTest.addResult(" -- " + event.target.__NAME + " -- SourceChanged event: " + event.data);
|
| + }
|
| +
|
| + function onTrackingStopped(event)
|
| + {
|
| + InspectorTest.addResult(" -- " + event.target.__NAME + " -- TrackingStopped");
|
| + }
|
| + }
|
| +
|
| + var fileSystemPrefix = "file:///var/www";
|
| + var css1 = "all.css";
|
| + var css2 = "print.css";
|
| + var sass1 = fileSystemPrefix + "/a.scss";
|
| + var sass2 = fileSystemPrefix + "/b.scss";
|
| + var sassCommon = fileSystemPrefix + "/common.scss";
|
| + var tracker1 = createTracker("TRACKER 1", css1, [sass1, sassCommon]);
|
| + var tracker2 = createTracker("TRACKER 2", css2, [sass2, sassCommon]);
|
| +
|
| + InspectorTest.runTestSuite([
|
| + function loadFileSystemResources(next)
|
| + {
|
| + var fs = new InspectorTest.TestFileSystem(fileSystemPrefix);
|
| + fs.addFileMapping(fileSystemPrefix, "/");
|
| + fs.root.addFile("common.scss", "<common.scss content>");
|
| + fs.root.addFile("a.scss", "<a.scss content>");
|
| + fs.root.addFile("b.scss", "<b.scss content>");
|
| + fs.reportCreated(next);
|
| + },
|
| +
|
| + function loadCSSResources(next)
|
| + {
|
| + InspectorTest.evaluateInPage("addStyleSheets()", next);
|
| + },
|
| +
|
| + function mutateCSS(next)
|
| + {
|
| + InspectorTest.updateCSSText(css1, "<all.css update 1>")
|
| + .then(checkOutdated)
|
| + .then(() => InspectorTest.updateCSSText(css2, "<print.css update 1>"))
|
| + .then(checkOutdated)
|
| + .then(() => requestContent([css1], [css2]))
|
| + .then(checkOutdated)
|
| + .then(next);
|
| + },
|
| +
|
| + function mutateSASS(next)
|
| + {
|
| + InspectorTest.updateSASSText(sass1, "<a.scss update 1>");
|
| + checkOutdated();
|
| + InspectorTest.updateSASSText(sass2, "<b.scss update 1>");
|
| + checkOutdated();
|
| + requestContent([sass1], [sass2])
|
| + .then(checkOutdated)
|
| + .then(next);
|
| + },
|
| +
|
| + function mutateSASSCommon(next)
|
| + {
|
| + InspectorTest.updateSASSText(sassCommon, "<common.scss update 1>");
|
| + checkOutdated();
|
| + requestContent([sassCommon], [sassCommon])
|
| + .then(checkOutdated)
|
| + .then(next);
|
| + },
|
| +
|
| + function trackerSetCSS(next)
|
| + {
|
| + var result = tracker1.setCSSText("<all.css TRACKER 1>", []);
|
| + InspectorTest.addResult("tracker1.setCSSText result: " + result);
|
| + var result = tracker2.setCSSText("<print.css TRACKER 2>", []);
|
| + InspectorTest.addResult("tracker2.setCSSText result: " + result);
|
| + requestContent([css1], [css2])
|
| + .then(next);
|
| + },
|
| +
|
| + function trackerSetSASSCommon(next)
|
| + {
|
| + var result = tracker1.setSASSText(sassCommon, "<common.scss TRACKER 1>");
|
| + InspectorTest.addResult("tracker1.setSASSText result: " + result);
|
| + awaitSourceChanges(tracker2, sassCommon)
|
| + .then(checkOutdated)
|
| + .then(next);
|
| + },
|
| +
|
| + function removeFirstTrackerStyleSheets(next)
|
| + {
|
| + InspectorTest.evaluateInPage("removeStyles(2)", next);
|
| + },
|
| +
|
| + function removeSecondTrackerStyleSheets(next)
|
| + {
|
| + InspectorTest.evaluateInPage("removeStyles(1)", next);
|
| + },
|
| + ]);
|
| +
|
| + function awaitSourceChanges(tracker, url)
|
| + {
|
| + var callback;
|
| + var promise = new Promise(fulfill => callback = fulfill);
|
| + tracker.addEventListener(WebInspector.SourceMapTracker.Events.SourceChanged, onSourceChanged);
|
| + return promise;
|
| +
|
| + function onSourceChanged(event)
|
| + {
|
| + if (event.data !== url)
|
| + return;
|
| + tracker.removeEventListener(WebInspector.SourceMapTracker.Events.SourceChanged, onSourceChanged);
|
| + callback();
|
| + }
|
| + }
|
| +
|
| + function checkOutdated()
|
| + {
|
| + InspectorTest.addResult("== Outdated ==");
|
| + InspectorTest.addResult(tracker1.__NAME + ": " + tracker1.isOutdated());
|
| + InspectorTest.addResult(tracker2.__NAME + ": " + tracker2.isOutdated());
|
| + }
|
| +
|
| + function requestContent(urls1, urls2)
|
| + {
|
| + InspectorTest.addResult("== Contents ==");
|
| + urls1 = urls1 || [];
|
| + urls2 = urls2 || [];
|
| + var onContent = (url, content) => InspectorTest.addResult("content of " + url + ": " + content);
|
| + var promises = [];
|
| + for (var url of urls1)
|
| + promises.push(tracker1.content(url).then(text => onContent(url, text)));
|
| + for (var url of urls2)
|
| + promises.push(tracker2.content(url).then(text => onContent(url, text)));
|
| + return Promise.all(promises);
|
| + }
|
| +}
|
| +
|
| +</script>
|
| +
|
| +</head>
|
| +
|
| +<body onload="runTest()">
|
| +<p>Verify SourceMapTracker functionality.</p>
|
| +</body>
|
| +</html>
|
|
|