298 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			298 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
| (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);
 | |
|       eqPos(cm.getCursor("head"), Pos(line, ch), msg);
 | |
|       eqPos(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++) {
 | |
|         eqPos(sels[i].anchor, ranges[i].anchor, "anchor " + i);
 | |
|         eqPos(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));
 | |
| 
 | |
|   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("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("selectLinesUpward", "123\n345\n789\n012",
 | |
|          setSel(0, 1, 0, 1,
 | |
|                 1, 1, 1, 3,
 | |
|                 2, 0, 2, 0,
 | |
|                 3, 0, 3, 0),
 | |
|          "selectLinesUpward",
 | |
|          hasSel(0, 1, 0, 1,
 | |
|                 0, 3, 0, 3,
 | |
|                 1, 0, 1, 0,
 | |
|                 1, 1, 1, 3,
 | |
|                 2, 0, 2, 0,
 | |
|                 3, 0, 3, 0));
 | |
| 
 | |
|   stTest("selectLinesDownward", "123\n345\n789\n012",
 | |
|          setSel(0, 1, 0, 1,
 | |
|                 1, 1, 1, 3,
 | |
|                 2, 0, 2, 0,
 | |
|                 3, 0, 3, 0),
 | |
|          "selectLinesDownward",
 | |
|          hasSel(0, 1, 0, 1,
 | |
|                 1, 1, 1, 3,
 | |
|                 2, 0, 2, 0,
 | |
|                 2, 3, 2, 3,
 | |
|                 3, 0, 3, 0));
 | |
| 
 | |
|   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("a\nb\nc\nA\nB\nC"),
 | |
|          hasSel(0, 0, 2, 1,
 | |
|                 3, 0, 5, 1),
 | |
|          "undo",
 | |
|          setSel(1, 0, 4, 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("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));
 | |
| })();
 | 
