comment_test.js (4626B)
1 namespace = "comment_"; 2 3 (function() { 4 function test(name, mode, run, before, after) { 5 return testCM(name, function(cm) { 6 run(cm); 7 eq(cm.getValue(), after); 8 }, {value: before, mode: mode}); 9 } 10 11 var simpleProg = "function foo() {\n return bar;\n}"; 12 var inlineBlock = "foo(/* bar */ true);"; 13 var inlineBlocks = "foo(/* bar */ true, /* baz */ false);"; 14 var multiLineInlineBlock = ["above();", "foo(/* bar */ true);", "below();"]; 15 16 test("block", "javascript", function(cm) { 17 cm.blockComment(Pos(0, 3), Pos(3, 0), {blockCommentLead: " *"}); 18 }, simpleProg + "\n", "/* function foo() {\n * return bar;\n * }\n */"); 19 20 test("blockToggle", "javascript", function(cm) { 21 cm.blockComment(Pos(0, 3), Pos(2, 0), {blockCommentLead: " *"}); 22 cm.uncomment(Pos(0, 3), Pos(2, 0), {blockCommentLead: " *"}); 23 }, simpleProg, simpleProg); 24 25 test("blockToggle2", "javascript", function(cm) { 26 cm.setCursor({line: 0, ch: 7 /* inside the block comment */}); 27 cm.execCommand("toggleComment"); 28 }, inlineBlock, "foo(bar true);"); 29 30 // This test should work but currently fails. 31 // test("blockToggle3", "javascript", function(cm) { 32 // cm.setCursor({line: 0, ch: 7 /* inside the first block comment */}); 33 // cm.execCommand("toggleComment"); 34 // }, inlineBlocks, "foo(bar true, /* baz */ false);"); 35 36 test("line", "javascript", function(cm) { 37 cm.lineComment(Pos(1, 1), Pos(1, 1)); 38 }, simpleProg, "function foo() {\n// return bar;\n}"); 39 40 test("lineToggle", "javascript", function(cm) { 41 cm.lineComment(Pos(0, 0), Pos(2, 1)); 42 cm.uncomment(Pos(0, 0), Pos(2, 1)); 43 }, simpleProg, simpleProg); 44 45 test("fallbackToBlock", "css", function(cm) { 46 cm.lineComment(Pos(0, 0), Pos(2, 1)); 47 }, "html {\n border: none;\n}", "/* html {\n border: none;\n} */"); 48 49 test("fallbackToLine", "ruby", function(cm) { 50 cm.blockComment(Pos(0, 0), Pos(1)); 51 }, "def blah()\n return hah\n", "# def blah()\n# return hah\n"); 52 53 test("ignoreExternalBlockComments", "javascript", function(cm) { 54 cm.execCommand("toggleComment"); 55 }, inlineBlocks, "// " + inlineBlocks); 56 57 test("ignoreExternalBlockComments2", "javascript", function(cm) { 58 cm.setCursor({line: 0, ch: null /* eol */}); 59 cm.execCommand("toggleComment"); 60 }, inlineBlocks, "// " + inlineBlocks); 61 62 test("ignoreExternalBlockCommentsMultiLineAbove", "javascript", function(cm) { 63 cm.setSelection({line: 0, ch: 0}, {line: 1, ch: 1}); 64 cm.execCommand("toggleComment"); 65 }, multiLineInlineBlock.join("\n"), ["// " + multiLineInlineBlock[0], 66 "// " + multiLineInlineBlock[1], 67 multiLineInlineBlock[2]].join("\n")); 68 69 test("ignoreExternalBlockCommentsMultiLineBelow", "javascript", function(cm) { 70 cm.setSelection({line: 1, ch: 13 /* after end of block comment */}, {line: 2, ch: 1}); 71 cm.execCommand("toggleComment"); 72 }, multiLineInlineBlock.join("\n"), [multiLineInlineBlock[0], 73 "// " + multiLineInlineBlock[1], 74 "// " + multiLineInlineBlock[2]].join("\n")); 75 76 test("commentRange", "javascript", function(cm) { 77 cm.blockComment(Pos(1, 2), Pos(1, 13), {fullLines: false}); 78 }, simpleProg, "function foo() {\n /*return bar;*/\n}"); 79 80 test("indented", "javascript", function(cm) { 81 cm.lineComment(Pos(1, 0), Pos(2), {indent: true}); 82 }, simpleProg, "function foo() {\n// return bar;\n// }"); 83 84 test("singleEmptyLine", "javascript", function(cm) { 85 cm.setCursor(1); 86 cm.execCommand("toggleComment"); 87 }, "a;\n\nb;", "a;\n// \nb;"); 88 89 test("dontMessWithStrings", "javascript", function(cm) { 90 cm.execCommand("toggleComment"); 91 }, "console.log(\"/*string*/\");", "// console.log(\"/*string*/\");"); 92 93 test("dontMessWithStrings2", "javascript", function(cm) { 94 cm.execCommand("toggleComment"); 95 }, "console.log(\"// string\");", "// console.log(\"// string\");"); 96 97 test("dontMessWithStrings3", "javascript", function(cm) { 98 cm.execCommand("toggleComment"); 99 }, "// console.log(\"// string\");", "console.log(\"// string\");"); 100 101 test("includeLastLine", "javascript", function(cm) { 102 cm.execCommand("selectAll") 103 cm.execCommand("toggleComment") 104 }, "// foo\n// bar\nbaz", "// // foo\n// // bar\n// baz") 105 106 test("uncommentWithTrailingBlockEnd", "xml", function(cm) { 107 cm.execCommand("toggleComment") 108 }, "<!-- foo --> -->", "foo -->") 109 110 test("dontCommentInComment", "xml", function(cm) { 111 cm.setCursor(1, 0) 112 cm.execCommand("toggleComment") 113 }, "<!-- foo\nbar -->", "<!-- foo\nbar -->") 114 })();