codemirror.html (8041B)
1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>CodeMirror: Basic Tests</title> 6 <link rel="stylesheet" href="chrome://devtools/content/shared/sourceeditor/codemirror/lib/codemirror.css"> 7 <link rel="stylesheet" href="cm_mode_test.css"> 8 <!--<link rel="stylesheet" href="../doc/docs.css">--> 9 10 <script src="chrome://devtools/content/shared/sourceeditor/codemirror/codemirror.bundle.js"></script> 11 <script src="chrome://devtools/content/shared/sourceeditor/codemirror/keymap/emacs.js"></script> 12 <script src="chrome://devtools/content/shared/sourceeditor/codemirror/keymap/sublime.js"></script> 13 <script src="chrome://devtools/content/shared/sourceeditor/codemirror/keymap/vim.js"></script> 14 15 <style type="text/css"> 16 .ok {color: #090;} 17 .fail {color: #e00;} 18 .error {color: #c90;} 19 .done {font-weight: bold;} 20 #progress { 21 background: #45d; 22 color: white; 23 text-shadow: 0 0 1px #45d, 0 0 2px #45d, 0 0 3px #45d; 24 font-weight: bold; 25 white-space: pre; 26 } 27 #testground { 28 visibility: hidden; 29 } 30 #testground.offscreen { 31 visibility: visible; 32 position: absolute; 33 left: -10000px; 34 top: -10000px; 35 } 36 .CodeMirror { border: 1px solid black; } 37 </style> 38 </head> 39 <body> 40 <h1>CodeMirror: Basic Tests</h1> 41 42 <p>A limited set of programmatic sanity tests for CodeMirror.</p> 43 44 <div style="border: 1px solid black; padding: 1px; max-width: 700px;"> 45 <div style="width: 0px;" id=progress><div style="padding: 3px;">Ran <span id="progress_ran">0</span><span id="progress_total"> of 0</span> tests</div></div> 46 </div> 47 <p id=status>Please enable JavaScript...</p> 48 <div id=output></div> 49 50 <div id=testground></div> 51 52 <script src="driver.js"></script> 53 <script src="test.js"></script> 54 <script src="comment_test.js"></script> 55 <script src="doc_test.js"></script> 56 <script src="driver.js"></script> 57 <script src="emacs_test.js"></script> 58 <script src="mode_test.js"></script> 59 <script src="mode/javascript/test.js"></script> 60 <script src="multi_test.js"></script> 61 <script src="search_test.js"></script> 62 63 <!-- VIM and Emacs mode tests are in vimemacs.html 64 <script src="cm_sublime_test.js"></script> 65 <script src="cm_vim_test.js"></script> 66 <script src="cm_emacs_test.js"></script> 67 --> 68 69 <!-- These modes/addons are not used by Editor 70 <script src="doc_test.js"></script> 71 <script src="../mode/css/css.js"></script> 72 <script src="../mode/css/test.js"></script> 73 <script src="../mode/css/scss_test.js"></script> 74 <script src="../mode/xml/xml.js"></script> 75 <script src="../mode/htmlmixed/htmlmixed.js"></script> 76 <script src="../mode/ruby/ruby.js"></script> 77 <script src="../mode/haml/haml.js"></script> 78 <script src="../mode/haml/test.js"></script> 79 <script src="../mode/markdown/markdown.js"></script> 80 <script src="../mode/markdown/test.js"></script> 81 <script src="../mode/gfm/gfm.js"></script> 82 <script src="../mode/gfm/test.js"></script> 83 <script src="../mode/stex/stex.js"></script> 84 <script src="../mode/stex/test.js"></script> 85 <script src="../mode/xquery/xquery.js"></script> 86 <script src="../mode/xquery/test.js"></script> 87 <script src="../addon/mode/multiplex_test.js"></script>--> 88 89 <script> 90 window.onload = runHarness; 91 CodeMirror.on(window, 'hashchange', runHarness); 92 93 function esc(str) { 94 return str.replace(/[<&]/, function(ch) { return ch == "<" ? "<" : "&"; }); 95 } 96 97 var output = document.getElementById("output"), 98 progress = document.getElementById("progress"), 99 progressRan = document.getElementById("progress_ran").childNodes[0], 100 progressTotal = document.getElementById("progress_total").childNodes[0]; 101 102 var count = 0, 103 failed = 0, 104 skipped = 0, 105 bad = "", 106 running = false, // Flag that states tests are running 107 quit = false, // Flag to quit tests ASAP 108 verbose = false, // Adds message for *every* test to output 109 phantom = false; 110 111 function runHarness(){ 112 if (running) { 113 quit = true; 114 setStatus("Restarting tests...", '', true); 115 setTimeout(function(){runHarness();}, 500); 116 return; 117 } 118 filters = []; 119 verbose = false; 120 if (window.location.hash.substr(1)){ 121 var strings = window.location.hash.substr(1).split(","); 122 while (strings.length) { 123 var s = strings.shift(); 124 if (s === "verbose") 125 verbose = true; 126 else 127 filters.push(parseTestFilter(decodeURIComponent(s))); 128 } 129 } 130 quit = false; 131 running = true; 132 setStatus("Loading tests..."); 133 count = 0; 134 failed = 0; 135 skipped = 0; 136 bad = ""; 137 totalTests = countTests(); 138 progressTotal.nodeValue = " of " + totalTests; 139 progressRan.nodeValue = count; 140 output.innerHTML = ''; 141 document.getElementById("testground").innerHTML = "<form>" + 142 "<textarea id=\"code\" name=\"code\"></textarea>" + 143 "<input type=submit value=ok name=submit>" + 144 "</form>"; 145 runTests(displayTest); 146 } 147 148 function setStatus(message, className, force){ 149 if (quit && !force) return; 150 if (!message) throw("must provide message"); 151 var status = document.getElementById("status").childNodes[0]; 152 status.nodeValue = message; 153 status.parentNode.className = className; 154 } 155 function addOutput(name, className, code){ 156 var newOutput = document.createElement("dl"); 157 var newTitle = document.createElement("dt"); 158 newTitle.className = className; 159 newTitle.appendChild(document.createTextNode(name)); 160 newOutput.appendChild(newTitle); 161 var newMessage = document.createElement("dd"); 162 newMessage.innerHTML = code; 163 newOutput.appendChild(newTitle); 164 newOutput.appendChild(newMessage); 165 output.appendChild(newOutput); 166 } 167 function displayTest(type, name, customMessage) { 168 var message = "???"; 169 if (type != "done" && type != "skipped") ++count; 170 progress.style.width = (count * (progress.parentNode.clientWidth - 2) / totalTests) + "px"; 171 progressRan.nodeValue = count; 172 if (type == "ok") { 173 message = "Test '" + name + "' succeeded"; 174 if (!verbose) customMessage = false; 175 } else if (type == "skipped") { 176 message = "Test '" + name + "' skipped"; 177 ++skipped; 178 if (!verbose) customMessage = false; 179 } else if (type == "expected") { 180 message = "Test '" + name + "' failed as expected"; 181 if (!verbose) customMessage = false; 182 } else if (type == "error" || type == "fail") { 183 ++failed; 184 message = "Test '" + name + "' failed"; 185 } else if (type == "done") { 186 if (failed) { 187 type += " fail"; 188 message = failed + " failure" + (failed > 1 ? "s" : ""); 189 } else if (count < totalTests) { 190 failed = totalTests - count; 191 type += " fail"; 192 message = failed + " failure" + (failed > 1 ? "s" : ""); 193 } else { 194 type += " ok"; 195 message = "All passed"; 196 if (skipped) { 197 message += " (" + skipped + " skipped)"; 198 } 199 } 200 progressTotal.nodeValue = ''; 201 customMessage = true; // Hack to avoid adding to output 202 } 203 if (window.mozilla_setStatus) 204 mozilla_setStatus(message, type, customMessage); 205 if (verbose && !customMessage) customMessage = message; 206 setStatus(message, type); 207 if (customMessage && customMessage.length > 0) { 208 addOutput(name, type, customMessage); 209 } 210 } 211 </script> 212 </body> 213 </html>