Wed, 31 Dec 2014 06:09:35 +0100
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 | })(); |