browser/devtools/sourceeditor/test/browser_css_statemachine.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

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 }

mercurial