tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

emacs_test.js (6182B)


      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 (code == 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, sticky) { return function(cm) { eqCursorPos(cm.getCursor(), Pos(line, ch, sticky)); }; }
     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, "after"));
     46  sim("motionHMulti", "abcde",
     47      "Ctrl-4", "Ctrl-F", at(0, 4, "before"), "Ctrl--", "Ctrl-2", "Ctrl-F", at(0, 2, "after"),
     48      "Ctrl-5", "Ctrl-B", at(0, 0, "after"));
     49 
     50  sim("motionHWord", "abc. def ghi",
     51      "Alt-F", at(0, 3, "before"), "Alt-F", at(0, 8, "before"),
     52      "Ctrl-B", "Alt-B", at(0, 5, "after"), "Alt-B", at(0, 0, "after"));
     53  sim("motionHWordMulti", "abc. def ghi ",
     54      "Ctrl-3", "Alt-F", at(0, 12, "before"), "Ctrl-2", "Alt-B", at(0, 5, "after"),
     55      "Ctrl--", "Alt-B", at(0, 8, "before"));
     56 
     57  sim("motionVSimple", "a\nb\nc\n", "Ctrl-N", "Ctrl-N", "Ctrl-P", at(1, 0, "after"));
     58  sim("motionVMulti", "a\nb\nc\nd\ne\n",
     59      "Ctrl-2", "Ctrl-N", at(2, 0, "after"), "Ctrl-F", "Ctrl--", "Ctrl-N", at(1, 1, "before"),
     60      "Ctrl--", "Ctrl-3", "Ctrl-P", at(4, 1, "before"));
     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\ne",
    112      "Ctrl-F", "Ctrl-T", "Ctrl-T", txt("bcad\ne"), at(0, 3),
    113      "Ctrl-F", "Ctrl-T", "Ctrl-T", "Ctrl-T", txt("bcda\ne"), at(0, 4),
    114      "Ctrl-F", "Ctrl-T", txt("bcde\na"), 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  sim("clearMark", "abcde", Pos(0, 2), "Ctrl-Space", "Ctrl-F", "Ctrl-F",
    129      "Ctrl-G", "Ctrl-W", txt("abcde"));
    130 
    131  sim("delRegion", "abcde", "Ctrl-Space", "Ctrl-F", "Ctrl-F", "Delete", txt("cde"));
    132  sim("backspaceRegion", "abcde", "Ctrl-Space", "Ctrl-F", "Ctrl-F", "Backspace", txt("cde"));
    133 
    134  sim("backspaceDoesntAddToRing", "foobar", "Ctrl-F", "Ctrl-F", "Ctrl-F", "Ctrl-K", "Backspace", "Backspace", "Ctrl-Y", txt("fbar"));
    135 
    136  testCM("save", function(cm) {
    137    var saved = false;
    138    CodeMirror.commands.save = function(cm) { saved = cm.getValue(); };
    139    cm.triggerOnKeyDown(fakeEvent("Ctrl-X"));
    140    cm.triggerOnKeyDown(fakeEvent("Ctrl-S"));
    141    is(saved, "hi");
    142  }, {value: "hi", keyMap: "emacs"});
    143 
    144  testCM("gotoInvalidLineFloat", function(cm) {
    145    cm.openDialog = function(_, cb) { cb("2.2"); };
    146    cm.triggerOnKeyDown(fakeEvent("Alt-G"));
    147    cm.triggerOnKeyDown(fakeEvent("G"));
    148  }, {value: "1\n2\n3\n4", keyMap: "emacs"});
    149 })();