Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* vim: set ts=2 et sw=2 tw=80: */
2 /* Any copyright is dedicated to the Public Domain.
3 http://creativecommons.org/publicdomain/zero/1.0/ */
5 "use strict";
7 const cssAutoCompleter = require("devtools/sourceeditor/css-autocompleter");
8 const { Cc, Ci } = require("chrome");
10 const CSS_URI = "http://mochi.test:8888/browser/browser/devtools/sourceeditor" +
11 "/test/css_statemachine_testcases.css";
12 const TESTS_URI = "http://mochi.test:8888/browser/browser/devtools/sourceeditor" +
13 "/test/css_statemachine_tests.json";
15 const source = read(CSS_URI);
16 const tests = eval(read(TESTS_URI));
18 const TEST_URI = "data:text/html;charset=UTF-8," + encodeURIComponent(
19 ["<!DOCTYPE html>",
20 "<html>",
21 " <head>",
22 " <title>CSS State machine tests.</title>",
23 " <style type='text/css'>",
24 "#progress {",
25 " width: 500px; height: 30px;",
26 " border: 1px solid black;",
27 " position: relative",
28 "}",
29 "#progress div {",
30 " width: 0%; height: 100%;",
31 " background: green;",
32 " position: absolute;",
33 " z-index: -1; top: 0",
34 "}",
35 "#progress.failed div {",
36 " background: red !important;",
37 "}",
38 "#progress.failed:after {",
39 " content: 'Some tests failed';",
40 " color: white",
41 "}",
42 "#progress:before {",
43 " content: 'Running test ' attr(data-progress) ' of " + tests.length + "';",
44 " color: white;",
45 " text-shadow: 0 0 2px darkgreen;",
46 "}",
47 " </style>",
48 " </head>",
49 " <body>",
50 " <h2>State machine tests for CSS autocompleter.</h2><br>",
51 " <div id='progress' data-progress='0'>",
52 " <div></div>",
53 " </div>",
54 " </body>",
55 " </html>"
56 ].join("\n"));
58 let doc = null;
59 function test() {
60 waitForExplicitFinish();
61 gBrowser.selectedTab = gBrowser.addTab();
62 gBrowser.selectedBrowser.addEventListener("load", function onload() {
63 gBrowser.selectedBrowser.removeEventListener("load", onload, true);
64 doc = content.document;
65 runTests();
66 }, true);
67 content.location = TEST_URI;
68 }
70 function runTests() {
71 let completer = new cssAutoCompleter();
72 let checkState = state => {
73 if (state[0] == 'null' && (!completer.state || completer.state == 'null')) {
74 return true;
75 } else if (state[0] == completer.state && state[0] == 'selector' &&
76 state[1] == completer.selectorState &&
77 state[2] == completer.completing &&
78 state[3] == completer.selector) {
79 return true;
80 } else if (state[0] == completer.state && state[0] == 'value' &&
81 state[2] == completer.completing &&
82 state[3] == completer.propertyName) {
83 return true;
84 } else if (state[0] == completer.state &&
85 state[2] == completer.completing &&
86 state[0] != 'selector' && state[0] != 'value') {
87 return true;
88 }
89 return false;
90 };
92 let progress = doc.getElementById("progress");
93 let progressDiv = doc.querySelector("#progress > div");
94 let i = 0;
95 for (let test of tests) {
96 progress.dataset.progress = ++i;
97 progressDiv.style.width = 100*i/tests.length + "%";
98 completer.resolveState(limit(source, test[0]),
99 {line: test[0][0], ch: test[0][1]});
100 if (checkState(test[1])) {
101 ok(true, "Test " + i + " passed. ");
102 }
103 else {
104 ok(false, "Test " + i + " failed. Expected state : [" + test[1] + "] but" +
105 " found [" + completer.state + ", " + completer.selectorState + ", " +
106 completer.completing + ", " +
107 (completer.propertyName || completer.selector) + "].");
108 progress.classList.add("failed");
109 }
110 }
111 gBrowser.removeCurrentTab();
112 finish();
113 }