annotate .cms/lib/codemirror/test/html-hint-test.js @ 1:1d486627aa1e draft default tip

24.10
author Coffee CMS <info@coffee-cms.ru>
date Sat, 12 Oct 2024 02:51:39 +0000
parents 78edf6b517a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2 // Distributed under an MIT license: https://codemirror.net/5/LICENSE
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 (function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 var Pos = CodeMirror.Pos;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 namespace = "html-hint_";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 testData =[
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 name: "html-element",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 value: "<htm",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13 list: ["<html"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 name: "element-close",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 value: "<a href='#a'>\n</",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 list: ["</a>"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 name: "linkref-attribute",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 value: "<link hreflang='z",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 from: Pos(0,"<link hreflang=".length),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 list: ["'zh'","'za'","'zu'"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 name: "html-completion",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 value: "<html>\n",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 list: ["<head","<body","</html>"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 ];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 function escapeHtmlList(o) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 return '<code>' +
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 JSON.stringify(o.list,null,2)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 .replace(/</g, "&lt;")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 .replace(/>/g, "&gt;") +
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 '</code>'
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 function test(name, spec) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 testCM(name, function(cm) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 cm.setValue(spec.value);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 cm.setCursor(spec.cursor);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 var completion = CodeMirror.hint.html(cm);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 if (!deepCompare(completion.list, spec.list))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 throw new Failure("Wrong completion results. Got" +
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 escapeHtmlList(completion) +" but expected" +
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 escapeHtmlList(spec));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 eqCharPos(completion.from, spec.from,'from-failed');
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 eqCharPos(completion.to, spec.to, 'to-failed');
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 }, {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 value: spec.value,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 mode: spec.mode || "text/html"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 testData.forEach(function (value) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 // Use sane defaults
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 var lines = value.value.split(/\n/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 value.to = value.pos || Pos(lines.length-1, lines[lines.length-1].length);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 value.from = value.from || Pos(lines.length-1,0);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 value.cursor = value.cursor || value.to;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 var name = value.name ||value.value;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 test(name,value)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 function deepCompare(a, b) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 if (a === b) return true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 if (!(a && typeof a === "object") ||
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 !(b && typeof b === "object")) return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 var array = a instanceof Array
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 if ((b instanceof Array) !== array) return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 if (array) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 if (a.length !== b.length) return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 for (var i = 0; i < a.length; i++) if (!deepCompare(a[i], b[i])) return false
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 for (var p in a) if (!(p in b) || !deepCompare(a[p], b[p])) return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 for (var p in b) if (!(p in a)) return false
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 return true
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 })();