browser/devtools/sourceeditor/test/cm_emacs_test.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/browser/devtools/sourceeditor/test/cm_emacs_test.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,138 @@
     1.4 +(function() {
     1.5 +  "use strict";
     1.6 +
     1.7 +  var Pos = CodeMirror.Pos;
     1.8 +  namespace = "emacs_";
     1.9 +
    1.10 +  var eventCache = {};
    1.11 +  function fakeEvent(keyName) {
    1.12 +    var event = eventCache[key];
    1.13 +    if (event) return event;
    1.14 +
    1.15 +    var ctrl, shift, alt;
    1.16 +    var key = keyName.replace(/\w+-/g, function(type) {
    1.17 +      if (type == "Ctrl-") ctrl = true;
    1.18 +      else if (type == "Alt-") alt = true;
    1.19 +      else if (type == "Shift-") shift = true;
    1.20 +      return "";
    1.21 +    });
    1.22 +    var code;
    1.23 +    for (var c in CodeMirror.keyNames)
    1.24 +      if (CodeMirror.keyNames[c] == key) { code = c; break; }
    1.25 +    if (c == null) throw new Error("Unknown key: " + key);
    1.26 +
    1.27 +    return eventCache[keyName] = {
    1.28 +      type: "keydown", keyCode: code, ctrlKey: ctrl, shiftKey: shift, altKey: alt,
    1.29 +      preventDefault: function(){}, stopPropagation: function(){}
    1.30 +    };
    1.31 +  }
    1.32 +
    1.33 +  function sim(name, start /*, actions... */) {
    1.34 +    var keys = Array.prototype.slice.call(arguments, 2);
    1.35 +    testCM(name, function(cm) {
    1.36 +      for (var i = 0; i < keys.length; ++i) {
    1.37 +        var cur = keys[i];
    1.38 +        if (cur instanceof Pos) cm.setCursor(cur);
    1.39 +        else if (cur.call) cur(cm);
    1.40 +        else cm.triggerOnKeyDown(fakeEvent(cur));
    1.41 +      }
    1.42 +    }, {keyMap: "emacs", value: start, mode: "javascript"});
    1.43 +  }
    1.44 +
    1.45 +  function at(line, ch) { return function(cm) { eqPos(cm.getCursor(), Pos(line, ch)); }; }
    1.46 +  function txt(str) { return function(cm) { eq(cm.getValue(), str); }; }
    1.47 +
    1.48 +  sim("motionHSimple", "abc", "Ctrl-F", "Ctrl-F", "Ctrl-B", at(0, 1));
    1.49 +  sim("motionHMulti", "abcde",
    1.50 +      "Ctrl-4", "Ctrl-F", at(0, 4), "Ctrl--", "Ctrl-2", "Ctrl-F", at(0, 2),
    1.51 +      "Ctrl-5", "Ctrl-B", at(0, 0));
    1.52 +
    1.53 +  sim("motionHWord", "abc. def ghi",
    1.54 +      "Alt-F", at(0, 3), "Alt-F", at(0, 8),
    1.55 +      "Ctrl-B", "Alt-B", at(0, 5), "Alt-B", at(0, 0));
    1.56 +  sim("motionHWordMulti", "abc. def ghi ",
    1.57 +      "Ctrl-3", "Alt-F", at(0, 12), "Ctrl-2", "Alt-B", at(0, 5),
    1.58 +      "Ctrl--", "Alt-B", at(0, 8));
    1.59 +
    1.60 +  sim("motionVSimple", "a\nb\nc\n", "Ctrl-N", "Ctrl-N", "Ctrl-P", at(1, 0));
    1.61 +  sim("motionVMulti", "a\nb\nc\nd\ne\n",
    1.62 +      "Ctrl-2", "Ctrl-N", at(2, 0), "Ctrl-F", "Ctrl--", "Ctrl-N", at(1, 1),
    1.63 +      "Ctrl--", "Ctrl-3", "Ctrl-P", at(4, 1));
    1.64 +
    1.65 +  sim("killYank", "abc\ndef\nghi",
    1.66 +      "Ctrl-F", "Ctrl-Space", "Ctrl-N", "Ctrl-N", "Ctrl-W", "Ctrl-E", "Ctrl-Y",
    1.67 +      txt("ahibc\ndef\ng"));
    1.68 +  sim("killRing", "abcdef",
    1.69 +      "Ctrl-Space", "Ctrl-F", "Ctrl-W", "Ctrl-Space", "Ctrl-F", "Ctrl-W",
    1.70 +      "Ctrl-Y", "Alt-Y",
    1.71 +      txt("acdef"));
    1.72 +  sim("copyYank", "abcd",
    1.73 +      "Ctrl-Space", "Ctrl-E", "Alt-W", "Ctrl-Y",
    1.74 +      txt("abcdabcd"));
    1.75 +
    1.76 +  sim("killLineSimple", "foo\nbar", "Ctrl-F", "Ctrl-K", txt("f\nbar"));
    1.77 +  sim("killLineEmptyLine", "foo\n  \nbar", "Ctrl-N", "Ctrl-K", txt("foo\nbar"));
    1.78 +  sim("killLineMulti", "foo\nbar\nbaz",
    1.79 +      "Ctrl-F", "Ctrl-F", "Ctrl-K", "Ctrl-K", "Ctrl-K", "Ctrl-A", "Ctrl-Y",
    1.80 +      txt("o\nbarfo\nbaz"));
    1.81 +
    1.82 +  sim("moveByParagraph", "abc\ndef\n\n\nhij\nklm\n\n",
    1.83 +      "Ctrl-F", "Ctrl-Down", at(2, 0), "Ctrl-Down", at(6, 0),
    1.84 +      "Ctrl-N", "Ctrl-Up", at(3, 0), "Ctrl-Up", at(0, 0),
    1.85 +      Pos(1, 2), "Ctrl-Down", at(2, 0), Pos(4, 2), "Ctrl-Up", at(3, 0));
    1.86 +  sim("moveByParagraphMulti", "abc\n\ndef\n\nhij\n\nklm",
    1.87 +      "Ctrl-U", "2", "Ctrl-Down", at(3, 0),
    1.88 +      "Shift-Alt-.", "Ctrl-3", "Ctrl-Up", at(1, 0));
    1.89 +
    1.90 +  sim("moveBySentence", "sentence one! sentence\ntwo\n\nparagraph two",
    1.91 +      "Alt-E", at(0, 13), "Alt-E", at(1, 3), "Ctrl-F", "Alt-A", at(0, 13));
    1.92 +
    1.93 +  sim("moveByExpr", "function foo(a, b) {}",
    1.94 +      "Ctrl-Alt-F", at(0, 8), "Ctrl-Alt-F", at(0, 12), "Ctrl-Alt-F", at(0, 18),
    1.95 +      "Ctrl-Alt-B", at(0, 12), "Ctrl-Alt-B", at(0, 9));
    1.96 +  sim("moveByExprMulti", "foo bar baz bug",
    1.97 +      "Ctrl-2", "Ctrl-Alt-F", at(0, 7),
    1.98 +      "Ctrl--", "Ctrl-Alt-F", at(0, 4),
    1.99 +      "Ctrl--", "Ctrl-2", "Ctrl-Alt-B", at(0, 11));
   1.100 +  sim("delExpr", "var x = [\n  a,\n  b\n  c\n];",
   1.101 +      Pos(0, 8), "Ctrl-Alt-K", txt("var x = ;"), "Ctrl-/",
   1.102 +      Pos(4, 1), "Ctrl-Alt-Backspace", txt("var x = ;"));
   1.103 +  sim("delExprMulti", "foo bar baz",
   1.104 +      "Ctrl-2", "Ctrl-Alt-K", txt(" baz"),
   1.105 +      "Ctrl-/", "Ctrl-E", "Ctrl-2", "Ctrl-Alt-Backspace", txt("foo "));
   1.106 +
   1.107 +  sim("justOneSpace", "hi      bye  ",
   1.108 +      Pos(0, 4), "Alt-Space", txt("hi bye  "),
   1.109 +      Pos(0, 4), "Alt-Space", txt("hi b ye  "),
   1.110 +      "Ctrl-A", "Alt-Space", "Ctrl-E", "Alt-Space", txt(" hi b ye "));
   1.111 +
   1.112 +  sim("openLine", "foo bar", "Alt-F", "Ctrl-O", txt("foo\n bar"))
   1.113 +
   1.114 +  sim("transposeChar", "abcd\n\ne",
   1.115 +      "Ctrl-F", "Ctrl-T", "Ctrl-T", txt("bcad\n\ne"), at(0, 3),
   1.116 +      "Ctrl-F", "Ctrl-T", "Ctrl-T", "Ctrl-T", txt("bcda\n\ne"), at(0, 4),
   1.117 +      "Ctrl-F", "Ctrl-T", txt("bcd\na\ne"), at(1, 1));
   1.118 +
   1.119 +  sim("manipWordCase", "foo BAR bAZ",
   1.120 +      "Alt-C", "Alt-L", "Alt-U", txt("Foo bar BAZ"),
   1.121 +      "Ctrl-A", "Alt-U", "Alt-L", "Alt-C", txt("FOO bar Baz"));
   1.122 +  sim("manipWordCaseMulti", "foo Bar bAz",
   1.123 +      "Ctrl-2", "Alt-U", txt("FOO BAR bAz"),
   1.124 +      "Ctrl-A", "Ctrl-3", "Alt-C", txt("Foo Bar Baz"));
   1.125 +
   1.126 +  sim("upExpr", "foo {\n  bar[];\n  baz(blah);\n}",
   1.127 +      Pos(2, 7), "Ctrl-Alt-U", at(2, 5), "Ctrl-Alt-U", at(0, 4));
   1.128 +  sim("transposeExpr", "do foo[bar] dah",
   1.129 +      Pos(0, 6), "Ctrl-Alt-T", txt("do [bar]foo dah"));
   1.130 +
   1.131 +  sim("clearMark", "abcde", Pos(0, 2), "Ctrl-Space", "Ctrl-F", "Ctrl-F",
   1.132 +      "Ctrl-G", "Ctrl-W", txt("abcde"));
   1.133 +
   1.134 +  testCM("save", function(cm) {
   1.135 +    var saved = false;
   1.136 +    CodeMirror.commands.save = function(cm) { saved = cm.getValue(); };
   1.137 +    cm.triggerOnKeyDown(fakeEvent("Ctrl-X"));
   1.138 +    cm.triggerOnKeyDown(fakeEvent("Ctrl-S"));
   1.139 +    is(saved, "hi");
   1.140 +  }, {value: "hi", keyMap: "emacs"});
   1.141 +})();

mercurial