vimemacs.html (8155B)
1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>CodeMirror: VIM/Emacs 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: VIM/Emacs 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="sublime_test.js"></script> 54 <script src="vim_test.js"></script> 55 <script src="emacs_test.js"></script> 56 57 <!-- Basic tests are in codemirror.html 58 <script src="cm_driver.js"></script> 59 <script src="cm_test.js"></script> 60 <script src="cm_comment_test.js"></script> 61 <script src="cm_doc_test.js"></script> 62 <script src="cm_driver.js"></script> 63 <script src="cm_emacs_test.js"></script> 64 <script src="cm_mode_test.js"></script> 65 <script src="cm_mode_javascript_test.js"></script> 66 <script src="cm_multi_test.js"></script> 67 <script src="cm_search_test.js"></script> 68 --> 69 70 <!-- These modes/addons are not used by Editor 71 <script src="doc_test.js"></script> 72 <script src="../mode/css/css.js"></script> 73 <script src="../mode/css/test.js"></script> 74 <script src="../mode/css/scss_test.js"></script> 75 <script src="../mode/xml/xml.js"></script> 76 <script src="../mode/htmlmixed/htmlmixed.js"></script> 77 <script src="../mode/ruby/ruby.js"></script> 78 <script src="../mode/haml/haml.js"></script> 79 <script src="../mode/haml/test.js"></script> 80 <script src="../mode/markdown/markdown.js"></script> 81 <script src="../mode/markdown/test.js"></script> 82 <script src="../mode/gfm/gfm.js"></script> 83 <script src="../mode/gfm/test.js"></script> 84 <script src="../mode/stex/stex.js"></script> 85 <script src="../mode/stex/test.js"></script> 86 <script src="../mode/xquery/xquery.js"></script> 87 <script src="../mode/xquery/test.js"></script> 88 <script src="../addon/mode/multiplex_test.js"></script>--> 89 90 <script> 91 window.onload = runHarness; 92 CodeMirror.on(window, 'hashchange', runHarness); 93 94 function esc(str) { 95 return str.replace(/[<&]/, function(ch) { return ch == "<" ? "<" : "&"; }); 96 } 97 98 var output = document.getElementById("output"), 99 progress = document.getElementById("progress"), 100 progressRan = document.getElementById("progress_ran").childNodes[0], 101 progressTotal = document.getElementById("progress_total").childNodes[0]; 102 103 var count = 0, 104 failed = 0, 105 skipped = 0, 106 bad = "", 107 running = false, // Flag that states tests are running 108 quit = false, // Flag to quit tests ASAP 109 verbose = false, // Adds message for *every* test to output 110 phantom = false, 111 Pos = CodeMirror.Pos; // Required for VIM tests 112 113 function runHarness(){ 114 if (running) { 115 quit = true; 116 setStatus("Restarting tests...", '', true); 117 setTimeout(function(){runHarness();}, 500); 118 return; 119 } 120 filters = []; 121 verbose = false; 122 if (window.location.hash.substr(1)){ 123 var strings = window.location.hash.substr(1).split(","); 124 while (strings.length) { 125 var s = strings.shift(); 126 if (s === "verbose") 127 verbose = true; 128 else 129 filters.push(parseTestFilter(decodeURIComponent(s))); 130 } 131 } 132 quit = false; 133 running = true; 134 setStatus("Loading tests..."); 135 count = 0; 136 failed = 0; 137 skipped = 0; 138 bad = ""; 139 totalTests = countTests(); 140 progressTotal.nodeValue = " of " + totalTests; 141 progressRan.nodeValue = count; 142 output.innerHTML = ''; 143 document.getElementById("testground").innerHTML = "<form>" + 144 "<textarea id=\"code\" name=\"code\"></textarea>" + 145 "<input type=submit value=ok name=submit>" + 146 "</form>"; 147 runTests(displayTest); 148 } 149 150 function setStatus(message, className, force){ 151 if (quit && !force) return; 152 if (!message) throw("must provide message"); 153 var status = document.getElementById("status").childNodes[0]; 154 status.nodeValue = message; 155 status.parentNode.className = className; 156 } 157 function addOutput(name, className, code){ 158 var newOutput = document.createElement("dl"); 159 var newTitle = document.createElement("dt"); 160 newTitle.className = className; 161 newTitle.appendChild(document.createTextNode(name)); 162 newOutput.appendChild(newTitle); 163 var newMessage = document.createElement("dd"); 164 newMessage.innerHTML = code; 165 newOutput.appendChild(newTitle); 166 newOutput.appendChild(newMessage); 167 output.appendChild(newOutput); 168 } 169 function displayTest(type, name, customMessage) { 170 var message = "???"; 171 if (type != "done" && type != "skipped") ++count; 172 progress.style.width = (count * (progress.parentNode.clientWidth - 2) / totalTests) + "px"; 173 progressRan.nodeValue = count; 174 if (type == "ok") { 175 message = "Test '" + name + "' succeeded"; 176 if (!verbose) customMessage = false; 177 } else if (type == "skipped") { 178 message = "Test '" + name + "' skipped"; 179 ++skipped; 180 if (!verbose) customMessage = false; 181 } else if (type == "expected") { 182 message = "Test '" + name + "' failed as expected"; 183 if (!verbose) customMessage = false; 184 } else if (type == "error" || type == "fail") { 185 ++failed; 186 message = "Test '" + name + "' failed"; 187 } else if (type == "done") { 188 if (failed) { 189 type += " fail"; 190 message = failed + " failure" + (failed > 1 ? "s" : ""); 191 } else if (count < totalTests) { 192 failed = totalTests - count; 193 type += " fail"; 194 message = failed + " failure" + (failed > 1 ? "s" : ""); 195 } else { 196 type += " ok"; 197 message = "All passed"; 198 if (skipped) { 199 message += " (" + skipped + " skipped)"; 200 } 201 } 202 progressTotal.nodeValue = ''; 203 customMessage = true; // Hack to avoid adding to output 204 } 205 if (window.mozilla_setStatus) 206 mozilla_setStatus(message, type, customMessage); 207 if (verbose && !customMessage) customMessage = message; 208 setStatus(message, type); 209 if (customMessage && customMessage.length > 0) { 210 addOutput(name, type, customMessage); 211 } 212 } 213 </script> 214 </body> 215 </html>