123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- (function() {
- "use strict";
-
- var Pos = CodeMirror.Pos;
- namespace = "sublime_";
- function stTest(name) {
- var actions = Array.prototype.slice.call(arguments, 1);
- testCM(name, function(cm) {
- for (var i = 0; i < actions.length; i++) {
- var action = actions[i];
- if (typeof action == "string" && i == 0)
- cm.setValue(action);
- else if (typeof action == "string")
- cm.execCommand(action);
- else if (action instanceof Pos)
- cm.setCursor(action);
- else
- action(cm);
- }
- });
- }
- function at(line, ch, msg) {
- return function(cm) {
- eq(cm.listSelections().length, 1);
- eqCursorPos(cm.getCursor("head"), Pos(line, ch), msg);
- eqCursorPos(cm.getCursor("anchor"), Pos(line, ch), msg);
- };
- }
- function val(content, msg) {
- return function(cm) { eq(cm.getValue(), content, msg); };
- }
- function argsToRanges(args) {
- if (args.length % 4) throw new Error("Wrong number of arguments for ranges.");
- var ranges = [];
- for (var i = 0; i < args.length; i += 4)
- ranges.push({anchor: Pos(args[i], args[i + 1]),
- head: Pos(args[i + 2], args[i + 3])});
- return ranges;
- }
- function setSel() {
- var ranges = argsToRanges(arguments);
- return function(cm) { cm.setSelections(ranges, 0); };
- }
- function hasSel() {
- var ranges = argsToRanges(arguments);
- return function(cm) {
- var sels = cm.listSelections();
- if (sels.length != ranges.length)
- throw new Failure("Expected " + ranges.length + " selections, but found " + sels.length);
- for (var i = 0; i < sels.length; i++) {
- eqCharPos(sels[i].anchor, ranges[i].anchor, "anchor " + i);
- eqCharPos(sels[i].head, ranges[i].head, "head " + i);
- }
- };
- }
- stTest("bySubword", "the foo_bar DooDahBah \n a",
- "goSubwordLeft", at(0, 0),
- "goSubwordRight", at(0, 3),
- "goSubwordRight", at(0, 7),
- "goSubwordRight", at(0, 11),
- "goSubwordRight", at(0, 15),
- "goSubwordRight", at(0, 18),
- "goSubwordRight", at(0, 21),
- "goSubwordRight", at(0, 22),
- "goSubwordRight", at(1, 0),
- "goSubwordRight", at(1, 2),
- "goSubwordRight", at(1, 2),
- "goSubwordLeft", at(1, 1),
- "goSubwordLeft", at(1, 0),
- "goSubwordLeft", at(0, 22),
- "goSubwordLeft", at(0, 18),
- "goSubwordLeft", at(0, 15),
- "goSubwordLeft", at(0, 12),
- "goSubwordLeft", at(0, 8),
- "goSubwordLeft", at(0, 4),
- "goSubwordLeft", at(0, 0));
- stTest("splitSelectionByLine", "abc\ndef\nghi",
- setSel(0, 1, 2, 2),
- "splitSelectionByLine",
- hasSel(0, 1, 0, 3,
- 1, 0, 1, 3,
- 2, 0, 2, 2));
- stTest("splitSelectionByLineMulti", "abc\ndef\nghi\njkl",
- setSel(0, 1, 1, 1,
- 1, 2, 3, 2,
- 3, 3, 3, 3),
- "splitSelectionByLine",
- hasSel(0, 1, 0, 3,
- 1, 0, 1, 1,
- 1, 2, 1, 3,
- 2, 0, 2, 3,
- 3, 0, 3, 2,
- 3, 3, 3, 3));
- stTest("selectLine", "abc\ndef\nghi",
- setSel(0, 1, 0, 1,
- 2, 0, 2, 1),
- "selectLine",
- hasSel(0, 0, 1, 0,
- 2, 0, 2, 3),
- setSel(0, 1, 1, 0),
- "selectLine",
- hasSel(0, 0, 2, 0));
- stTest("insertLineAfter", "abcde\nfghijkl\nmn",
- setSel(0, 1, 0, 1,
- 0, 3, 0, 3,
- 1, 2, 1, 2,
- 1, 3, 1, 5), "insertLineAfter",
- hasSel(1, 0, 1, 0,
- 3, 0, 3, 0), val("abcde\n\nfghijkl\n\nmn"));
- stTest("insertLineBefore", "abcde\nfghijkl\nmn",
- setSel(0, 1, 0, 1,
- 0, 3, 0, 3,
- 1, 2, 1, 2,
- 1, 3, 1, 5), "insertLineBefore",
- hasSel(0, 0, 0, 0,
- 2, 0, 2, 0), val("\nabcde\n\nfghijkl\nmn"));
- stTest("selectNextOccurrence", "a foo bar\nfoobar foo",
- setSel(0, 2, 0, 5),
- "selectNextOccurrence", hasSel(0, 2, 0, 5,
- 1, 0, 1, 3),
- "selectNextOccurrence", hasSel(0, 2, 0, 5,
- 1, 0, 1, 3,
- 1, 7, 1, 10),
- "selectNextOccurrence", hasSel(0, 2, 0, 5,
- 1, 0, 1, 3,
- 1, 7, 1, 10),
- Pos(0, 3), "selectNextOccurrence", hasSel(0, 2, 0, 5),
- "selectNextOccurrence", hasSel(0, 2, 0, 5,
- 1, 7, 1, 10),
- setSel(0, 6, 0, 9),
- "selectNextOccurrence", hasSel(0, 6, 0, 9,
- 1, 3, 1, 6));
- stTest("selectScope", "foo(a) {\n bar[1, 2];\n}",
- "selectScope", hasSel(0, 0, 2, 1),
- Pos(0, 4), "selectScope", hasSel(0, 4, 0, 5),
- Pos(0, 5), "selectScope", hasSel(0, 4, 0, 5),
- Pos(0, 6), "selectScope", hasSel(0, 0, 2, 1),
- Pos(0, 8), "selectScope", hasSel(0, 8, 2, 0),
- Pos(1, 2), "selectScope", hasSel(0, 8, 2, 0),
- Pos(1, 6), "selectScope", hasSel(1, 6, 1, 10),
- Pos(1, 9), "selectScope", hasSel(1, 6, 1, 10),
- "selectScope", hasSel(0, 8, 2, 0),
- "selectScope", hasSel(0, 0, 2, 1));
- stTest("goToBracket", "foo(a) {\n bar[1, 2];\n}",
- Pos(0, 0), "goToBracket", at(0, 0),
- Pos(0, 4), "goToBracket", at(0, 5), "goToBracket", at(0, 4),
- Pos(0, 8), "goToBracket", at(2, 0), "goToBracket", at(0, 8),
- Pos(1, 2), "goToBracket", at(2, 0),
- Pos(1, 7), "goToBracket", at(1, 10), "goToBracket", at(1, 6));
- stTest("swapLine", "1\n2\n3---\n4\n5",
- "swapLineDown", val("2\n1\n3---\n4\n5"),
- "swapLineUp", val("1\n2\n3---\n4\n5"),
- "swapLineUp", val("1\n2\n3---\n4\n5"),
- Pos(4, 1), "swapLineDown", val("1\n2\n3---\n4\n5"),
- setSel(0, 1, 0, 1,
- 1, 0, 2, 0,
- 2, 2, 2, 2),
- "swapLineDown", val("4\n1\n2\n3---\n5"),
- hasSel(1, 1, 1, 1,
- 2, 0, 3, 0,
- 3, 2, 3, 2),
- "swapLineUp", val("1\n2\n3---\n4\n5"),
- hasSel(0, 1, 0, 1,
- 1, 0, 2, 0,
- 2, 2, 2, 2));
- stTest("swapLineEmptyBottomSel", "1\n2\n3",
- setSel(0, 1, 1, 0),
- "swapLineDown", val("2\n1\n3"), hasSel(1, 1, 2, 0),
- "swapLineUp", val("1\n2\n3"), hasSel(0, 1, 1, 0),
- "swapLineUp", val("1\n2\n3"), hasSel(0, 0, 0, 0));
- stTest("swapLineUpFromEnd", "a\nb\nc",
- Pos(2, 1), "swapLineUp",
- hasSel(1, 1, 1, 1), val("a\nc\nb"));
- stTest("joinLines", "abc\ndef\nghi\njkl",
- "joinLines", val("abc def\nghi\njkl"), at(0, 4),
- "undo",
- setSel(0, 2, 1, 1), "joinLines",
- val("abc def ghi\njkl"), hasSel(0, 2, 0, 8),
- "undo",
- setSel(0, 1, 0, 1,
- 1, 1, 1, 1,
- 3, 1, 3, 1), "joinLines",
- val("abc def ghi\njkl"), hasSel(0, 4, 0, 4,
- 0, 8, 0, 8,
- 1, 3, 1, 3));
- stTest("duplicateLine", "abc\ndef\nghi",
- Pos(1, 0), "duplicateLine", val("abc\ndef\ndef\nghi"), at(2, 0),
- "undo",
- setSel(0, 1, 0, 1,
- 1, 1, 1, 1,
- 2, 1, 2, 1), "duplicateLine",
- val("abc\nabc\ndef\ndef\nghi\nghi"), hasSel(1, 1, 1, 1,
- 3, 1, 3, 1,
- 5, 1, 5, 1));
- stTest("duplicateLineSelection", "abcdef",
- setSel(0, 1, 0, 1,
- 0, 2, 0, 4,
- 0, 5, 0, 5),
- "duplicateLine",
- val("abcdef\nabcdcdef\nabcdcdef"), hasSel(2, 1, 2, 1,
- 2, 4, 2, 6,
- 2, 7, 2, 7));
- stTest("sortLines", "c\nb\na\nC\nB\nA",
- "sortLines", val("A\nB\nC\na\nb\nc"),
- "undo",
- setSel(0, 0, 2, 0,
- 3, 0, 5, 0),
- "sortLines", val("b\nc\na\nB\nC\nA"),
- hasSel(0, 0, 2, 0,
- 3, 0, 5, 0),
- "undo",
- setSel(1, 0, 5, 0), "sortLinesInsensitive", val("c\na\nB\nb\nC\nA"));
- stTest("bookmarks", "abc\ndef\nghi\njkl",
- Pos(0, 1), "toggleBookmark",
- setSel(1, 1, 1, 2), "toggleBookmark",
- setSel(2, 1, 2, 2), "toggleBookmark",
- "nextBookmark", hasSel(0, 1, 0, 1),
- "nextBookmark", hasSel(1, 1, 1, 2),
- "nextBookmark", hasSel(2, 1, 2, 2),
- "prevBookmark", hasSel(1, 1, 1, 2),
- "prevBookmark", hasSel(0, 1, 0, 1),
- "prevBookmark", hasSel(2, 1, 2, 2),
- "prevBookmark", hasSel(1, 1, 1, 2),
- "toggleBookmark",
- "prevBookmark", hasSel(2, 1, 2, 2),
- "prevBookmark", hasSel(0, 1, 0, 1),
- "selectBookmarks", hasSel(0, 1, 0, 1,
- 2, 1, 2, 2),
- "clearBookmarks",
- Pos(0, 0), "selectBookmarks", at(0, 0));
- stTest("smartBackspace", " foo\n bar",
- setSel(0, 2, 0, 2, 1, 4, 1, 4, 1, 6, 1, 6), "smartBackspace",
- val("foo\n br"))
- stTest("upAndDowncaseAtCursor", "abc\ndef x\nghI",
- setSel(0, 1, 0, 3,
- 1, 1, 1, 1,
- 1, 4, 1, 4), "upcaseAtCursor",
- val("aBC\nDEF x\nghI"), hasSel(0, 1, 0, 3,
- 1, 3, 1, 3,
- 1, 4, 1, 4),
- "downcaseAtCursor",
- val("abc\ndef x\nghI"), hasSel(0, 1, 0, 3,
- 1, 3, 1, 3,
- 1, 4, 1, 4));
- stTest("mark", "abc\ndef\nghi",
- Pos(1, 1), "setSublimeMark",
- Pos(2, 1), "selectToSublimeMark", hasSel(2, 1, 1, 1),
- Pos(0, 1), "swapWithSublimeMark", at(1, 1), "swapWithSublimeMark", at(0, 1),
- "deleteToSublimeMark", val("aef\nghi"),
- "sublimeYank", val("abc\ndef\nghi"), at(1, 1));
- stTest("findUnder", "foo foobar a",
- "findUnder", hasSel(0, 4, 0, 7),
- "findUnder", hasSel(0, 0, 0, 3),
- "findUnderPrevious", hasSel(0, 4, 0, 7),
- "findUnderPrevious", hasSel(0, 0, 0, 3),
- Pos(0, 4), "findUnder", hasSel(0, 4, 0, 10),
- Pos(0, 11), "findUnder", hasSel(0, 11, 0, 11));
- })();
|