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