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