Fix: merge conflict
[myslice.git] / to-be-integrated / third-party / codemirror-3.15 / test / emacs_test.js
1 (function() {
2   "use strict";
3
4   var Pos = CodeMirror.Pos;
5   namespace = "emacs_";
6
7   var eventCache = {};
8   function fakeEvent(keyName) {
9     var event = eventCache[key];
10     if (event) return event;
11
12     var ctrl, shift, alt;
13     var key = keyName.replace(/\w+-/g, function(type) {
14       if (type == "Ctrl-") ctrl = true;
15       else if (type == "Alt-") alt = true;
16       else if (type == "Shift-") shift = true;
17       return "";
18     });
19     var code;
20     for (var c in CodeMirror.keyNames)
21       if (CodeMirror.keyNames[c] == key) { code = c; break; }
22     if (c == null) throw new Error("Unknown key: " + key);
23
24     return eventCache[keyName] = {
25       type: "keydown", keyCode: code, ctrlKey: ctrl, shiftKey: shift, altKey: alt,
26       preventDefault: function(){}, stopPropagation: function(){}
27     };
28   }
29
30   function sim(name, start /*, actions... */) {
31     var keys = Array.prototype.slice.call(arguments, 2);
32     testCM(name, function(cm) {
33       for (var i = 0; i < keys.length; ++i) {
34         var cur = keys[i];
35         if (cur instanceof Pos) cm.setCursor(cur);
36         else if (cur.call) cur(cm);
37         else cm.triggerOnKeyDown(fakeEvent(cur));
38       }
39     }, {keyMap: "emacs", value: start, mode: "javascript"});
40   }
41
42   function at(line, ch) { return function(cm) { eqPos(cm.getCursor(), Pos(line, ch)); }; }
43   function txt(str) { return function(cm) { eq(cm.getValue(), str); }; }
44
45   sim("motionHSimple", "abc", "Ctrl-F", "Ctrl-F", "Ctrl-B", at(0, 1));
46   sim("motionHMulti", "abcde",
47       "Ctrl-4", "Ctrl-F", at(0, 4), "Ctrl--", "Ctrl-2", "Ctrl-F", at(0, 2),
48       "Ctrl-5", "Ctrl-B", at(0, 0));
49
50   sim("motionHWord", "abc. def ghi",
51       "Alt-F", at(0, 3), "Alt-F", at(0, 8),
52       "Ctrl-B", "Alt-B", at(0, 5), "Alt-B", at(0, 0));
53   sim("motionHWordMulti", "abc. def ghi ",
54       "Ctrl-3", "Alt-F", at(0, 12), "Ctrl-2", "Alt-B", at(0, 5),
55       "Ctrl--", "Alt-B", at(0, 8));
56
57   sim("motionVSimple", "a\nb\nc\n", "Ctrl-N", "Ctrl-N", "Ctrl-P", at(1, 0));
58   sim("motionVMulti", "a\nb\nc\nd\ne\n",
59       "Ctrl-2", "Ctrl-N", at(2, 0), "Ctrl-F", "Ctrl--", "Ctrl-N", at(1, 1),
60       "Ctrl--", "Ctrl-3", "Ctrl-P", at(4, 1));
61
62   sim("killYank", "abc\ndef\nghi",
63       "Ctrl-F", "Ctrl-Space", "Ctrl-N", "Ctrl-N", "Ctrl-W", "Ctrl-E", "Ctrl-Y",
64       txt("ahibc\ndef\ng"));
65   sim("killRing", "abcdef",
66       "Ctrl-Space", "Ctrl-F", "Ctrl-W", "Ctrl-Space", "Ctrl-F", "Ctrl-W",
67       "Ctrl-Y", "Alt-Y",
68       txt("acdef"));
69   sim("copyYank", "abcd",
70       "Ctrl-Space", "Ctrl-E", "Alt-W", "Ctrl-Y",
71       txt("abcdabcd"));
72
73   sim("killLineSimple", "foo\nbar", "Ctrl-F", "Ctrl-K", txt("f\nbar"));
74   sim("killLineEmptyLine", "foo\n  \nbar", "Ctrl-N", "Ctrl-K", txt("foo\nbar"));
75   sim("killLineMulti", "foo\nbar\nbaz",
76       "Ctrl-F", "Ctrl-F", "Ctrl-K", "Ctrl-K", "Ctrl-K", "Ctrl-A", "Ctrl-Y",
77       txt("o\nbarfo\nbaz"));
78
79   sim("moveByParagraph", "abc\ndef\n\n\nhij\nklm\n\n",
80       "Ctrl-F", "Ctrl-Down", at(2, 0), "Ctrl-Down", at(6, 0),
81       "Ctrl-N", "Ctrl-Up", at(3, 0), "Ctrl-Up", at(0, 0),
82       Pos(1, 2), "Ctrl-Down", at(2, 0), Pos(4, 2), "Ctrl-Up", at(3, 0));
83   sim("moveByParagraphMulti", "abc\n\ndef\n\nhij\n\nklm",
84       "Ctrl-U", "2", "Ctrl-Down", at(3, 0),
85       "Shift-Alt-.", "Ctrl-3", "Ctrl-Up", at(1, 0));
86
87   sim("moveBySentence", "sentence one! sentence\ntwo\n\nparagraph two",
88       "Alt-E", at(0, 13), "Alt-E", at(1, 3), "Ctrl-F", "Alt-A", at(0, 13));
89
90   sim("moveByExpr", "function foo(a, b) {}",
91       "Ctrl-Alt-F", at(0, 8), "Ctrl-Alt-F", at(0, 12), "Ctrl-Alt-F", at(0, 18),
92       "Ctrl-Alt-B", at(0, 12), "Ctrl-Alt-B", at(0, 9));
93   sim("moveByExprMulti", "foo bar baz bug",
94       "Ctrl-2", "Ctrl-Alt-F", at(0, 7),
95       "Ctrl--", "Ctrl-Alt-F", at(0, 4),
96       "Ctrl--", "Ctrl-2", "Ctrl-Alt-B", at(0, 11));
97   sim("delExpr", "var x = [\n  a,\n  b\n  c\n];",
98       Pos(0, 8), "Ctrl-Alt-K", txt("var x = ;"), "Ctrl-/",
99       Pos(4, 1), "Ctrl-Alt-Backspace", txt("var x = ;"));
100   sim("delExprMulti", "foo bar baz",
101       "Ctrl-2", "Ctrl-Alt-K", txt(" baz"),
102       "Ctrl-/", "Ctrl-E", "Ctrl-2", "Ctrl-Alt-Backspace", txt("foo "));
103
104   sim("justOneSpace", "hi      bye  ",
105       Pos(0, 4), "Alt-Space", txt("hi bye  "),
106       Pos(0, 4), "Alt-Space", txt("hi b ye  "),
107       "Ctrl-A", "Alt-Space", "Ctrl-E", "Alt-Space", txt(" hi b ye "));
108
109   sim("openLine", "foo bar", "Alt-F", "Ctrl-O", txt("foo\n bar"))
110
111   sim("transposeChar", "abcd\n\ne",
112       "Ctrl-F", "Ctrl-T", "Ctrl-T", txt("bcad\n\ne"), at(0, 3),
113       "Ctrl-F", "Ctrl-T", "Ctrl-T", "Ctrl-T", txt("bcda\n\ne"), at(0, 4),
114       "Ctrl-F", "Ctrl-T", txt("bcd\na\ne"), at(1, 1));
115
116   sim("manipWordCase", "foo BAR bAZ",
117       "Alt-C", "Alt-L", "Alt-U", txt("Foo bar BAZ"),
118       "Ctrl-A", "Alt-U", "Alt-L", "Alt-C", txt("FOO bar Baz"));
119   sim("manipWordCaseMulti", "foo Bar bAz",
120       "Ctrl-2", "Alt-U", txt("FOO BAR bAz"),
121       "Ctrl-A", "Ctrl-3", "Alt-C", txt("Foo Bar Baz"));
122
123   sim("upExpr", "foo {\n  bar[];\n  baz(blah);\n}",
124       Pos(2, 7), "Ctrl-Alt-U", at(2, 5), "Ctrl-Alt-U", at(0, 4));
125   sim("transposeExpr", "do foo[bar] dah",
126       Pos(0, 6), "Ctrl-Alt-T", txt("do [bar]foo dah"));
127
128   testCM("save", function(cm) {
129     var saved = false;
130     CodeMirror.commands.save = function(cm) { saved = cm.getValue(); };
131     cm.triggerOnKeyDown(fakeEvent("Ctrl-X"));
132     cm.triggerOnKeyDown(fakeEvent("Ctrl-S"));
133     is(saved, "hi");
134   }, {value: "hi", keyMap: "emacs"});
135 })();