/* vim: set ts=2 et sw=2 tw=80: */ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; const CSSCompleter = require("devtools/client/sourceeditor/css-autocompleter"); const {InspectorFront} = require("devtools/shared/fronts/inspector"); const CSS_URI = "http://mochi.test:8888/browser/devtools/client/sourceeditor" + "/test/css_statemachine_testcases.css"; const TESTS_URI = "http://mochi.test:8888/browser/devtools/client" + "/sourceeditor/test/css_autocompletion_tests.json"; const source = read(CSS_URI); const tests = eval(read(TESTS_URI)); const TEST_URI = "data:text/html;charset=UTF-8," + encodeURIComponent( ["", "", " ", " CSS State machine tests.", " ", " ", " ", "

State machine tests for CSS autocompleter.


", "
", "
", "
", "
", "
", "
", "
", "
", "
", "
", "
", "
", " ", " ", "
", "
", " ", " " ].join("\n")); let doc = null; let index = 0; let completer = null; let progress; let progressDiv; let inspector; function test() { waitForExplicitFinish(); addTab(TEST_URI).then(function () { doc = content.document; runTests(); }); } function runTests() { progress = doc.getElementById("progress"); progressDiv = doc.querySelector("#progress > div"); let target = TargetFactory.forTab(gBrowser.selectedTab); target.makeRemote().then(() => { inspector = InspectorFront(target.client, target.form); inspector.getWalker().then(walker => { completer = new CSSCompleter({walker: walker, cssProperties: getClientCssProperties()}); checkStateAndMoveOn(); }); }); } function checkStateAndMoveOn() { if (index == tests.length) { finishUp(); return; } let [lineCh, expectedSuggestions] = tests[index]; let [line, ch] = lineCh; progress.dataset.progress = ++index; progressDiv.style.width = 100 * index / tests.length + "%"; completer.complete(limit(source, lineCh), {line, ch}) .then(actualSuggestions => checkState(expectedSuggestions, actualSuggestions)) .then(checkStateAndMoveOn); } function checkState(expected, actual) { if (expected.length != actual.length) { ok(false, "Number of suggestions did not match up for state " + index + ". Expected: " + expected.length + ", Actual: " + actual.length); progress.classList.add("failed"); return; } for (let i = 0; i < actual.length; i++) { if (expected[i] != actual[i].label) { ok(false, "Suggestion " + i + " of state " + index + " did not match up" + ". Expected: " + expected[i] + ". Actual: " + actual[i].label); return; } } ok(true, "Test " + index + " passed. "); } function finishUp() { completer.walker.release().then(() => { inspector.destroy(); inspector = null; completer = null; gBrowser.removeCurrentTab(); finish(); }); progress = null; progressDiv = null; }