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.

     1 (function() {
     2   "use strict";
     4   var Pos = CodeMirror.Pos;
     5   namespace = "emacs_";
     7   var eventCache = {};
     8   function fakeEvent(keyName) {
     9     var event = eventCache[key];
    10     if (event) return event;
    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);
    24     return eventCache[keyName] = {
    25       type: "keydown", keyCode: code, ctrlKey: ctrl, shiftKey: shift, altKey: alt,
    26       preventDefault: function(){}, stopPropagation: function(){}
    27     };
    28   }
    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   }
    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); }; }
    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));
    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));
    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));
    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"));
    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"));
    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));
    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));
    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 "));
   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 "));
   109   sim("openLine", "foo bar", "Alt-F", "Ctrl-O", txt("foo\n bar"))
   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));
   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"));
   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"));
   128   sim("clearMark", "abcde", Pos(0, 2), "Ctrl-Space", "Ctrl-F", "Ctrl-F",
   129       "Ctrl-G", "Ctrl-W", txt("abcde"));
   131   testCM("save", function(cm) {
   132     var saved = false;
   133     CodeMirror.commands.save = function(cm) { saved = cm.getValue(); };
   134     cm.triggerOnKeyDown(fakeEvent("Ctrl-X"));
   135     cm.triggerOnKeyDown(fakeEvent("Ctrl-S"));
   136     is(saved, "hi");
   137   }, {value: "hi", keyMap: "emacs"});
   138 })();

mercurial