browser/devtools/sourceeditor/test/cm_emacs_test.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

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

mercurial