all tests are green again

This commit is contained in:
Fabian Jakobs 2011-01-19 08:41:04 +01:00
commit 0fe4de2b62
15 changed files with 281 additions and 279 deletions

View file

@ -257,7 +257,7 @@ var Document = function(text) {
range.end = this.$clipPosition(range.end); range.end = this.$clipPosition(range.end);
if (range.isEmpty()) if (range.isEmpty())
return; return range.start;
var firstRow = range.start.row; var firstRow = range.start.row;
var lastRow = range.end.row; var lastRow = range.end.row;
@ -274,6 +274,7 @@ var Document = function(text) {
else { else {
this.removeInLine(firstRow, range.start.column, range.end.column); this.removeInLine(firstRow, range.start.column, range.end.column);
} }
return range.start;
}; };
this.removeInLine = function(row, startColumn, endColumn) { this.removeInLine = function(row, startColumn, endColumn) {

View file

@ -42,7 +42,7 @@ var event = require("pilot/event");
var lang = require("pilot/lang"); var lang = require("pilot/lang");
var TextInput = require("ace/keyboard/textinput").TextInput; var TextInput = require("ace/keyboard/textinput").TextInput;
var KeyBinding = require("ace/keyboard/keybinding").KeyBinding; var KeyBinding = require("ace/keyboard/keybinding").KeyBinding;
var Document = require("ace/document").Document; var EditSession = require("ace/edit_session").EditSession;
var Search = require("ace/search").Search; var Search = require("ace/search").Search;
var BackgroundTokenizer = require("ace/background_tokenizer").BackgroundTokenizer; var BackgroundTokenizer = require("ace/background_tokenizer").BackgroundTokenizer;
var Range = require("ace/range").Range; var Range = require("ace/range").Range;
@ -78,7 +78,7 @@ var Editor =function(renderer, doc) {
wrap: true wrap: true
}); });
this.setDocument(doc || new Document("")); this.setDocument(doc || new EditSession(""));
this.focus(); this.focus();
}; };

View file

@ -67,14 +67,14 @@ Search.SELECTION = 2;
return lang.copyObject(this.$options); return lang.copyObject(this.$options);
}; };
this.find = function(doc) { this.find = function(session) {
if (!this.$options.needle) if (!this.$options.needle)
return null; return null;
if (this.$options.backwards) { if (this.$options.backwards) {
var iterator = this.$backwardMatchIterator(doc); var iterator = this.$backwardMatchIterator(session);
} else { } else {
iterator = this.$forwardMatchIterator(doc); iterator = this.$forwardMatchIterator(session);
} }
var firstRange = null; var firstRange = null;
@ -86,14 +86,14 @@ Search.SELECTION = 2;
return firstRange; return firstRange;
}; };
this.findAll = function(doc) { this.findAll = function(session) {
if (!this.$options.needle) if (!this.$options.needle)
return []; return [];
if (this.$options.backwards) { if (this.$options.backwards) {
var iterator = this.$backwardMatchIterator(doc); var iterator = this.$backwardMatchIterator(session);
} else { } else {
iterator = this.$forwardMatchIterator(doc); iterator = this.$forwardMatchIterator(session);
} }
var ranges = []; var ranges = [];
@ -118,13 +118,13 @@ Search.SELECTION = 2;
} }
}; };
this.$forwardMatchIterator = function(doc) { this.$forwardMatchIterator = function(session) {
var re = this.$assembleRegExp(); var re = this.$assembleRegExp();
var self = this; var self = this;
return { return {
forEach: function(callback) { forEach: function(callback) {
self.$forwardLineIterator(doc).forEach(function(line, startIndex, row) { self.$forwardLineIterator(session).forEach(function(line, startIndex, row) {
if (startIndex) { if (startIndex) {
line = line.substring(startIndex); line = line.substring(startIndex);
} }
@ -152,13 +152,13 @@ Search.SELECTION = 2;
}; };
}; };
this.$backwardMatchIterator = function(doc) { this.$backwardMatchIterator = function(session) {
var re = this.$assembleRegExp(); var re = this.$assembleRegExp();
var self = this; var self = this;
return { return {
forEach: function(callback) { forEach: function(callback) {
self.$backwardLineIterator(doc).forEach(function(line, startIndex, row) { self.$backwardLineIterator(session).forEach(function(line, startIndex, row) {
if (startIndex) { if (startIndex) {
line = line.substring(startIndex); line = line.substring(startIndex);
} }
@ -208,20 +208,20 @@ Search.SELECTION = 2;
return re; return re;
}; };
this.$forwardLineIterator = function(doc) { this.$forwardLineIterator = function(session) {
var searchSelection = this.$options.scope == Search.SELECTION; var searchSelection = this.$options.scope == Search.SELECTION;
var range = doc.getSelection().getRange(); var range = session.getSelection().getRange();
var start = doc.getSelection().getCursor(); var start = session.getSelection().getCursor();
var firstRow = searchSelection ? range.start.row : 0; var firstRow = searchSelection ? range.start.row : 0;
var firstColumn = searchSelection ? range.start.column : 0; var firstColumn = searchSelection ? range.start.column : 0;
var lastRow = searchSelection ? range.end.row : doc.getLength() - 1; var lastRow = searchSelection ? range.end.row : session.getLength() - 1;
var wrap = this.$options.wrap; var wrap = this.$options.wrap;
function getLine(row) { function getLine(row) {
var line = doc.getLine(row); var line = session.getLine(row);
if (searchSelection && row == range.end.row) { if (searchSelection && row == range.end.row) {
line = line.substring(0, range.end.column); line = line.substring(0, range.end.column);
} }
@ -264,15 +264,15 @@ Search.SELECTION = 2;
}; };
}; };
this.$backwardLineIterator = function(doc) { this.$backwardLineIterator = function(session) {
var searchSelection = this.$options.scope == Search.SELECTION; var searchSelection = this.$options.scope == Search.SELECTION;
var range = doc.getSelection().getRange(); var range = session.getSelection().getRange();
var start = searchSelection ? range.end : range.start; var start = searchSelection ? range.end : range.start;
var firstRow = searchSelection ? range.start.row : 0; var firstRow = searchSelection ? range.start.row : 0;
var firstColumn = searchSelection ? range.start.column : 0; var firstColumn = searchSelection ? range.start.column : 0;
var lastRow = searchSelection ? range.end.row : doc.getLength() - 1; var lastRow = searchSelection ? range.end.row : session.getLength() - 1;
var wrap = this.$options.wrap; var wrap = this.$options.wrap;
@ -280,7 +280,7 @@ Search.SELECTION = 2;
forEach : function(callback) { forEach : function(callback) {
var row = start.row; var row = start.row;
var line = doc.getLine(row).substring(0, start.column); var line = session.getLine(row).substring(0, start.column);
var startIndex = 0; var startIndex = 0;
var stop = false; var stop = false;
@ -303,7 +303,7 @@ Search.SELECTION = 2;
if (row == start.row) if (row == start.row)
stop = true; stop = true;
line = doc.getLine(row); line = session.getLine(row);
if (searchSelection) { if (searchSelection) {
if (row == firstRow) if (row == firstRow)
startIndex = firstColumn; startIndex = firstColumn;

View file

@ -42,6 +42,7 @@ var async = require("async");
async.concat( async.concat(
require("./change_document_test"), require("./change_document_test"),
require("./document_test"), require("./document_test"),
require("./edit_session_test"),
require("./event_emitter_test"), require("./event_emitter_test"),
require("./navigation_test"), require("./navigation_test"),
require("./range_test"), require("./range_test"),

View file

@ -39,7 +39,7 @@ define(function(require, exports, module) {
require("./mockdom"); require("./mockdom");
var Document = require("../document").Document, var EditSession = require("../edit_session").EditSession,
Editor = require("../editor").Editor, Editor = require("../editor").Editor,
Text = require("../mode/text").Mode, Text = require("../mode/text").Mode,
JavaScriptMode = require("../mode/javascript").Mode, JavaScriptMode = require("../mode/javascript").Mode,
@ -47,10 +47,12 @@ var Document = require("../document").Document,
assert = require("./assertions"); assert = require("./assertions");
var Test = { var Test = {
setUp : function() {
this.doc1 = new Document(["abc", "def"].join("\n")); setUp : function(next) {
this.doc2 = new Document(["ghi", "jkl"].join("\n")); this.doc1 = new EditSession(["abc", "def"]);
this.doc2 = new EditSession(["ghi", "jkl"]);
this.editor = new Editor(new MockRenderer()); this.editor = new Editor(new MockRenderer());
next();
}, },
"test: change document" : function() { "test: change document" : function() {

View file

@ -37,10 +37,10 @@
define(function(require, exports, module) { define(function(require, exports, module) {
var EditSession = require("../edit_session").EditSession, var EditSession = require("ace/edit_session").EditSession,
UndoManager = require("../undomanager").UndoManager, UndoManager = require("ace/undomanager").UndoManager,
MockRenderer = require("./mockrenderer"), MockRenderer = require("./mockrenderer"),
Range = require("../range").Range, Range = require("ace/range").Range,
assert = require("./assertions"), assert = require("./assertions"),
async = require("async"); async = require("async");

View file

@ -37,7 +37,7 @@
define(function(require, exports, module) { define(function(require, exports, module) {
var Document = require("ace/document").Document; var EditSession = require("ace/edit_session").EditSession;
var CssMode = require("ace/mode/css").Mode; var CssMode = require("ace/mode/css").Mode;
var assert = require("../assertions"); var assert = require("../assertions");
@ -47,10 +47,10 @@ var Test = {
}, },
"test: toggle comment lines should not do anything" : function() { "test: toggle comment lines should not do anything" : function() {
var doc = new Document([" abc", "cde", "fg"].join("\n")); var session = new EditSession([" abc", "cde", "fg"].join("\n"));
var comment = this.mode.toggleCommentLines("start", doc, 0, 1); var comment = this.mode.toggleCommentLines("start", session, 0, 1);
assert.equal([" abc", "cde", "fg"].join("\n"), doc.toString()); assert.equal([" abc", "cde", "fg"].join("\n"), session.toString());
}, },

View file

@ -37,7 +37,7 @@
define(function(require, exports, module) { define(function(require, exports, module) {
var Document = require("ace/document").Document; var EditSession = require("ace/edit_session").EditSession;
var Range = require("ace/range").Range; var Range = require("ace/range").Range;
var HtmlMode = require("ace/mode/html").Mode; var HtmlMode = require("ace/mode/html").Mode;
var assert = require("../assertions"); var assert = require("../assertions");
@ -48,11 +48,11 @@ var Test = {
}, },
"test: toggle comment lines should not do anything" : function() { "test: toggle comment lines should not do anything" : function() {
var doc = new Document([" abc", "cde", "fg"]); var session = new EditSession([" abc", "cde", "fg"]);
var range = new Range(0, 3, 1, 1); var range = new Range(0, 3, 1, 1);
var comment = this.mode.toggleCommentLines("start", doc, 0, 1); var comment = this.mode.toggleCommentLines("start", session, 0, 1);
assert.equal([" abc", "cde", "fg"].join("\n"), doc.toString()); assert.equal([" abc", "cde", "fg"].join("\n"), session.toString());
}, },
"test: next line indent should be the same as the current line indent" : function() { "test: next line indent should be the same as the current line indent" : function() {

View file

@ -37,7 +37,7 @@
define(function(require, exports, module) { define(function(require, exports, module) {
var Document = require("ace/document").Document; var EditSession = require("ace/edit_session").EditSession;
var Tokenizer = require("ace/tokenizer").Tokenizer; var Tokenizer = require("ace/tokenizer").Tokenizer;
var JavaScriptMode = require("ace/mode/javascript").Mode; var JavaScriptMode = require("ace/mode/javascript").Mode;
var assert = require("../assertions"); var assert = require("../assertions");
@ -57,39 +57,39 @@ var Test = {
}, },
"test: toggle comment lines should prepend '//' to each line" : function() { "test: toggle comment lines should prepend '//' to each line" : function() {
var doc = new Document([" abc", "cde", "fg"]); var session = new EditSession([" abc", "cde", "fg"]);
var comment = this.mode.toggleCommentLines("start", doc, 0, 1); var comment = this.mode.toggleCommentLines("start", session, 0, 1);
assert.equal(["// abc", "//cde", "fg"].join("\n"), doc.toString()); assert.equal(["// abc", "//cde", "fg"].join("\n"), session.toString());
}, },
"test: toggle comment on commented lines should remove leading '//' chars" : function() { "test: toggle comment on commented lines should remove leading '//' chars" : function() {
var doc = new Document(["// abc", "//cde", "fg"]); var session = new EditSession(["// abc", "//cde", "fg"]);
var comment = this.mode.toggleCommentLines("start", doc, 0, 1); var comment = this.mode.toggleCommentLines("start", session, 0, 1);
assert.equal([" abc", "cde", "fg"].join("\n"), doc.toString()); assert.equal([" abc", "cde", "fg"].join("\n"), session.toString());
}, },
"test: toggle comment lines twice should return the original text" : function() { "test: toggle comment lines twice should return the original text" : function() {
var doc = new Document([" abc", "cde", "fg"]); var session = new EditSession([" abc", "cde", "fg"]);
this.mode.toggleCommentLines("start", doc, 0, 2); this.mode.toggleCommentLines("start", session, 0, 2);
this.mode.toggleCommentLines("start", doc, 0, 2); this.mode.toggleCommentLines("start", session, 0, 2);
assert.equal([" abc", "cde", "fg"].join("\n"), doc.toString()); assert.equal([" abc", "cde", "fg"].join("\n"), session.toString());
}, },
"test: toggle comment on multiple lines with one commented line prepend '//' to each line" : function() { "test: toggle comment on multiple lines with one commented line prepend '//' to each line" : function() {
var doc = new Document(["// abc", "//cde", "fg"]); var session = new EditSession(["// abc", "//cde", "fg"]);
var comment = this.mode.toggleCommentLines("start", doc, 0, 2); var comment = this.mode.toggleCommentLines("start", session, 0, 2);
assert.equal(["//// abc", "////cde", "//fg"].join("\n"), doc.toString()); assert.equal(["//// abc", "////cde", "//fg"].join("\n"), session.toString());
}, },
"test: toggle comment on a comment line with leading white space": function() { "test: toggle comment on a comment line with leading white space": function() {
var doc = new Document(["//cde", " //fg"]); var session = new EditSession(["//cde", " //fg"]);
var comment = this.mode.toggleCommentLines("start", doc, 0, 1); var comment = this.mode.toggleCommentLines("start", session, 0, 1);
assert.equal(["cde", " fg"].join("\n"), doc.toString()); assert.equal(["cde", " fg"].join("\n"), session.toString());
}, },
"test: auto indent after opening brace" : function() { "test: auto indent after opening brace" : function() {
@ -132,15 +132,15 @@ var Test = {
}, },
"test: auto outdent should indent the line with the same indent as the line with the matching opening brace" : function() { "test: auto outdent should indent the line with the same indent as the line with the matching opening brace" : function() {
var doc = new Document([" function foo() {", " bla", " }"]); var session = new EditSession([" function foo() {", " bla", " }"]);
this.mode.autoOutdent("start", doc, 2); this.mode.autoOutdent("start", session, 2);
assert.equal(" }", doc.getLine(2)); assert.equal(" }", session.getLine(2));
}, },
"test: no auto outdent if no matching brace is found" : function() { "test: no auto outdent if no matching brace is found" : function() {
var doc = new Document([" function foo()", " bla", " }"]); var session = new EditSession([" function foo()", " bla", " }"]);
this.mode.autoOutdent("start", doc, 2); this.mode.autoOutdent("start", session, 2);
assert.equal(" }", doc.getLine(2)); assert.equal(" }", session.getLine(2));
} }
}; };

View file

@ -37,7 +37,7 @@
define(function(require, exports, module) { define(function(require, exports, module) {
var Document = require("ace/document").Document; var EditSession = require("ace/edit_session").EditSession;
var TextMode = require("ace/mode/text").Mode; var TextMode = require("ace/mode/text").Mode;
var assert = require("../assertions"); var assert = require("../assertions");
@ -47,10 +47,10 @@ var Test = {
}, },
"test: toggle comment lines should not do anything" : function() { "test: toggle comment lines should not do anything" : function() {
var doc = new Document([" abc", "cde", "fg"]); var session = new EditSession([" abc", "cde", "fg"]);
var comment = this.mode.toggleCommentLines("start", doc, 0, 1); var comment = this.mode.toggleCommentLines("start", session, 0, 1);
assert.equal([" abc", "cde", "fg"].join("\n"), doc.toString()); assert.equal([" abc", "cde", "fg"].join("\n"), session.toString());
}, },

View file

@ -37,7 +37,7 @@
define(function(require, exports, module) { define(function(require, exports, module) {
var Document = require("ace/document").Document; var EditSession = require("ace/edit_session").EditSession;
var Tokenizer = require("ace/tokenizer").Tokenizer; var Tokenizer = require("ace/tokenizer").Tokenizer;
var XmlMode = require("ace/mode/xml").Mode; var XmlMode = require("ace/mode/xml").Mode;
var assert = require("../assertions"); var assert = require("../assertions");
@ -57,10 +57,10 @@ var Test = {
}, },
"test: toggle comment lines should not do anything" : function() { "test: toggle comment lines should not do anything" : function() {
var doc = new Document([" abc", "cde", "fg"]); var session = new EditSession([" abc", "cde", "fg"]);
var comment = this.mode.toggleCommentLines("start", doc, 0, 1); var comment = this.mode.toggleCommentLines("start", session, 0, 1);
assert.equal([" abc", "cde", "fg"].join("\n"), doc.toString()); assert.equal([" abc", "cde", "fg"].join("\n"), session.toString());
}, },
"test: next line indent should be the same as the current line indent" : function() { "test: next line indent should be the same as the current line indent" : function() {

View file

@ -39,20 +39,20 @@ define(function(require, exports, module) {
require("./mockdom"); require("./mockdom");
var Document = require("../Document").Document, var EditSession = require("ace/edit_session").EditSession,
Editor = require("../Editor").Editor, Editor = require("../Editor").Editor,
MockRenderer = require("./mockrenderer"), MockRenderer = require("./mockrenderer"),
assert = require("./assertions"); assert = require("./assertions");
var Test = { var Test = {
createTextDocument : function(rows, cols) { createEditSession : function(rows, cols) {
var line = new Array(cols + 1).join("a"); var line = new Array(cols + 1).join("a");
var text = new Array(rows).join(line + "\n") + line; var text = new Array(rows).join(line + "\n") + line;
return new Document(text); return new EditSession(text);
}, },
"test: navigate to end of file should scroll the last line into view" : function() { "test: navigate to end of file should scroll the last line into view" : function() {
var doc = this.createTextDocument(200, 10); var doc = this.createEditSession(200, 10);
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), doc);
editor.navigateFileEnd(); editor.navigateFileEnd();
@ -63,7 +63,7 @@ var Test = {
}, },
"test: navigate to start of file should scroll the first row into view" : function() { "test: navigate to start of file should scroll the first row into view" : function() {
var doc = this.createTextDocument(200, 10); var doc = this.createEditSession(200, 10);
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), doc);
editor.moveCursorTo(editor.getLastVisibleRow() + 20); editor.moveCursorTo(editor.getLastVisibleRow() + 20);
@ -73,7 +73,7 @@ var Test = {
}, },
"test: goto hidden line should scroll the line into the middle of the viewport" : function() { "test: goto hidden line should scroll the line into the middle of the viewport" : function() {
var editor = new Editor(new MockRenderer(), this.createTextDocument(200, 5)); var editor = new Editor(new MockRenderer(), this.createEditSession(200, 5));
editor.navigateTo(0, 0); editor.navigateTo(0, 0);
editor.gotoLine(101); editor.gotoLine(101);
@ -107,7 +107,7 @@ var Test = {
}, },
"test: goto visible line should only move the cursor and not scroll": function() { "test: goto visible line should only move the cursor and not scroll": function() {
var editor = new Editor(new MockRenderer(), this.createTextDocument(200, 5)); var editor = new Editor(new MockRenderer(), this.createEditSession(200, 5));
editor.navigateTo(0, 0); editor.navigateTo(0, 0);
editor.gotoLine(12); editor.gotoLine(12);
@ -121,7 +121,7 @@ var Test = {
}, },
"test: navigate from the end of a long line down to a short line and back should maintain the curser column": function() { "test: navigate from the end of a long line down to a short line and back should maintain the curser column": function() {
var editor = new Editor(new MockRenderer(), new Document(["123456", "1"])); var editor = new Editor(new MockRenderer(), new EditSession(["123456", "1"]));
editor.navigateTo(0, 6); editor.navigateTo(0, 6);
assert.position(editor.getCursorPosition(), 0, 6); assert.position(editor.getCursorPosition(), 0, 6);
@ -134,7 +134,7 @@ var Test = {
}, },
"test: reset desired column on navigate left or right": function() { "test: reset desired column on navigate left or right": function() {
var editor = new Editor(new MockRenderer(), new Document(["123456", "12"])); var editor = new Editor(new MockRenderer(), new EditSession(["123456", "12"]));
editor.navigateTo(0, 6); editor.navigateTo(0, 6);
assert.position(editor.getCursorPosition(), 0, 6); assert.position(editor.getCursorPosition(), 0, 6);

View file

@ -37,7 +37,7 @@
define(function(require, exports, module) { define(function(require, exports, module) {
var Document = require("../document").Document, var EditSession = require("ace/edit_session").EditSession,
Search = require("../search").Search, Search = require("../search").Search,
assert = require("./assertions"); assert = require("./assertions");
@ -51,128 +51,128 @@ var Test = {
}, },
"test: find simple text in document" : function() { "test: find simple text in document" : function() {
var doc = new Document(["juhu kinners 123", "456"]); var session = new EditSession(["juhu kinners 123", "456"]);
var search = new Search().set({ var search = new Search().set({
needle: "kinners" needle: "kinners"
}); });
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 0, 5); assert.position(range.start, 0, 5);
assert.position(range.end, 0, 12); assert.position(range.end, 0, 12);
}, },
"test: find simple text in next line" : function() { "test: find simple text in next line" : function() {
var doc = new Document(["abc", "juhu kinners 123", "456"]); var session = new EditSession(["abc", "juhu kinners 123", "456"]);
var search = new Search().set({ var search = new Search().set({
needle: "kinners" needle: "kinners"
}); });
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 1, 5); assert.position(range.start, 1, 5);
assert.position(range.end, 1, 12); assert.position(range.end, 1, 12);
}, },
"test: find text starting at cursor position" : function() { "test: find text starting at cursor position" : function() {
var doc = new Document(["juhu kinners", "juhu kinners 123"]); var session = new EditSession(["juhu kinners", "juhu kinners 123"]);
doc.getSelection().moveCursorTo(0, 6); session.getSelection().moveCursorTo(0, 6);
var search = new Search().set({ var search = new Search().set({
needle: "kinners" needle: "kinners"
}); });
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 1, 5); assert.position(range.start, 1, 5);
assert.position(range.end, 1, 12); assert.position(range.end, 1, 12);
}, },
"test: wrap search is off by default" : function() { "test: wrap search is off by default" : function() {
var doc = new Document(["abc", "juhu kinners 123", "456"]); var session = new EditSession(["abc", "juhu kinners 123", "456"]);
doc.getSelection().moveCursorTo(2, 1); session.getSelection().moveCursorTo(2, 1);
var search = new Search().set({ var search = new Search().set({
needle: "kinners" needle: "kinners"
}); });
assert.equal(search.find(doc), null); assert.equal(search.find(session), null);
}, },
"test: wrap search should wrap at file end" : function() { "test: wrap search should wrap at file end" : function() {
var doc = new Document(["abc", "juhu kinners 123", "456"]); var session = new EditSession(["abc", "juhu kinners 123", "456"]);
doc.getSelection().moveCursorTo(2, 1); session.getSelection().moveCursorTo(2, 1);
var search = new Search().set({ var search = new Search().set({
needle: "kinners", needle: "kinners",
wrap: true wrap: true
}); });
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 1, 5); assert.position(range.start, 1, 5);
assert.position(range.end, 1, 12); assert.position(range.end, 1, 12);
}, },
"test: wrap search with no match should return 'null'": function() { "test: wrap search with no match should return 'null'": function() {
var doc = new Document(["abc", "juhu kinners 123", "456"]); var session = new EditSession(["abc", "juhu kinners 123", "456"]);
doc.getSelection().moveCursorTo(2, 1); session.getSelection().moveCursorTo(2, 1);
var search = new Search().set({ var search = new Search().set({
needle: "xyz", needle: "xyz",
wrap: true wrap: true
}); });
assert.equal(search.find(doc), null); assert.equal(search.find(session), null);
}, },
"test: case sensitive is by default off": function() { "test: case sensitive is by default off": function() {
var doc = new Document(["abc", "juhu kinners 123", "456"]); var session = new EditSession(["abc", "juhu kinners 123", "456"]);
var search = new Search().set({ var search = new Search().set({
needle: "JUHU" needle: "JUHU"
}); });
assert.range(search.find(doc), 1, 0, 1, 4); assert.range(search.find(session), 1, 0, 1, 4);
}, },
"test: case sensitive search": function() { "test: case sensitive search": function() {
var doc = new Document(["abc", "juhu kinners 123", "456"]); var session = new EditSession(["abc", "juhu kinners 123", "456"]);
var search = new Search().set({ var search = new Search().set({
needle: "KINNERS", needle: "KINNERS",
caseSensitive: true caseSensitive: true
}); });
var range = search.find(doc); var range = search.find(session);
assert.equal(range, null); assert.equal(range, null);
}, },
"test: whole word search should not match inside of words": function() { "test: whole word search should not match inside of words": function() {
var doc = new Document(["juhukinners", "juhu kinners 123", "456"]); var session = new EditSession(["juhukinners", "juhu kinners 123", "456"]);
var search = new Search().set({ var search = new Search().set({
needle: "kinners", needle: "kinners",
wholeWord: true wholeWord: true
}); });
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 1, 5); assert.position(range.start, 1, 5);
assert.position(range.end, 1, 12); assert.position(range.end, 1, 12);
}, },
"test: find backwards": function() { "test: find backwards": function() {
var doc = new Document(["juhu juhu juhu juhu"]); var session = new EditSession(["juhu juhu juhu juhu"]);
doc.getSelection().moveCursorTo(0, 10); session.getSelection().moveCursorTo(0, 10);
var search = new Search().set({ var search = new Search().set({
needle: "juhu", needle: "juhu",
backwards: true backwards: true
}); });
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 0, 5); assert.position(range.start, 0, 5);
assert.position(range.end, 0, 9); assert.position(range.end, 0, 9);
}, },
"test: find in selection": function() { "test: find in selection": function() {
var doc = new Document(["juhu", "juhu", "juhu", "juhu"]); var session = new EditSession(["juhu", "juhu", "juhu", "juhu"]);
doc.getSelection().setSelectionAnchor(1, 0); session.getSelection().setSelectionAnchor(1, 0);
doc.getSelection().selectTo(3, 5); session.getSelection().selectTo(3, 5);
var search = new Search().set({ var search = new Search().set({
needle: "juhu", needle: "juhu",
@ -180,20 +180,20 @@ var Test = {
scope: Search.SELECTION scope: Search.SELECTION
}); });
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 1, 0); assert.position(range.start, 1, 0);
assert.position(range.end, 1, 4); assert.position(range.end, 1, 4);
doc.getSelection().setSelectionAnchor(0, 2); session.getSelection().setSelectionAnchor(0, 2);
doc.getSelection().selectTo(3, 2); session.getSelection().selectTo(3, 2);
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 1, 0); assert.position(range.start, 1, 0);
assert.position(range.end, 1, 4); assert.position(range.end, 1, 4);
}, },
"test: find backwards in selection": function() { "test: find backwards in selection": function() {
var doc = new Document(["juhu", "juhu", "juhu", "juhu"]); var session = new EditSession(["juhu", "juhu", "juhu", "juhu"]);
var search = new Search().set({ var search = new Search().set({
needle: "juhu", needle: "juhu",
@ -202,36 +202,36 @@ var Test = {
scope: Search.SELECTION scope: Search.SELECTION
}); });
doc.getSelection().setSelectionAnchor(0, 2); session.getSelection().setSelectionAnchor(0, 2);
doc.getSelection().selectTo(3, 2); session.getSelection().selectTo(3, 2);
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 2, 0); assert.position(range.start, 2, 0);
assert.position(range.end, 2, 4); assert.position(range.end, 2, 4);
doc.getSelection().setSelectionAnchor(0, 2); session.getSelection().setSelectionAnchor(0, 2);
doc.getSelection().selectTo(1, 2); session.getSelection().selectTo(1, 2);
assert.equal(search.find(doc), null); assert.equal(search.find(session), null);
}, },
"test: edge case - match directly before the cursor" : function() { "test: edge case - match directly before the cursor" : function() {
var doc = new Document(["123", "123", "juhu"]); var session = new EditSession(["123", "123", "juhu"]);
var search = new Search().set({ var search = new Search().set({
needle: "juhu", needle: "juhu",
wrap: true wrap: true
}); });
doc.getSelection().moveCursorTo(2, 5); session.getSelection().moveCursorTo(2, 5);
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 2, 0); assert.position(range.start, 2, 0);
assert.position(range.end, 2, 4); assert.position(range.end, 2, 4);
}, },
"test: edge case - match backwards directly after the cursor" : function() { "test: edge case - match backwards directly after the cursor" : function() {
var doc = new Document(["123", "123", "juhu"]); var session = new EditSession(["123", "123", "juhu"]);
var search = new Search().set({ var search = new Search().set({
needle: "juhu", needle: "juhu",
@ -239,28 +239,28 @@ var Test = {
backwards: true backwards: true
}); });
doc.getSelection().moveCursorTo(2, 0); session.getSelection().moveCursorTo(2, 0);
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 2, 0); assert.position(range.start, 2, 0);
assert.position(range.end, 2, 4); assert.position(range.end, 2, 4);
}, },
"test: find using a regular expression" : function() { "test: find using a regular expression" : function() {
var doc = new Document(["abc123 123 cd", "abc"]); var session = new EditSession(["abc123 123 cd", "abc"]);
var search = new Search().set({ var search = new Search().set({
needle: "\\d+", needle: "\\d+",
regExp: true regExp: true
}); });
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 0, 3); assert.position(range.start, 0, 3);
assert.position(range.end, 0, 6); assert.position(range.end, 0, 6);
}, },
"test: find using a regular expression and whole word" : function() { "test: find using a regular expression and whole word" : function() {
var doc = new Document(["abc123 123 cd", "abc"]); var session = new EditSession(["abc123 123 cd", "abc"]);
var search = new Search().set({ var search = new Search().set({
needle: "\\d+\\b", needle: "\\d+\\b",
@ -268,26 +268,26 @@ var Test = {
wholeWord: true wholeWord: true
}); });
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 0, 7); assert.position(range.start, 0, 7);
assert.position(range.end, 0, 10); assert.position(range.end, 0, 10);
}, },
"test: use regular expressions with capture groups": function() { "test: use regular expressions with capture groups": function() {
var doc = new Document([" ab: 12px", " <h1 abc"]); var session = new EditSession([" ab: 12px", " <h1 abc"]);
var search = new Search().set({ var search = new Search().set({
needle: "(\\d+)", needle: "(\\d+)",
regExp: true regExp: true
}); });
var range = search.find(doc); var range = search.find(session);
assert.position(range.start, 0, 6); assert.position(range.start, 0, 6);
assert.position(range.end, 0, 8); assert.position(range.end, 0, 8);
}, },
"test: find all matches in selection" : function() { "test: find all matches in selection" : function() {
var doc = new Document(["juhu", "juhu", "juhu", "juhu"]); var session = new EditSession(["juhu", "juhu", "juhu", "juhu"]);
var search = new Search().set({ var search = new Search().set({
needle: "uh", needle: "uh",
@ -295,10 +295,10 @@ var Test = {
scope: Search.SELECTION scope: Search.SELECTION
}); });
doc.getSelection().setSelectionAnchor(0, 2); session.getSelection().setSelectionAnchor(0, 2);
doc.getSelection().selectTo(3, 2); session.getSelection().selectTo(3, 2);
var ranges = search.findAll(doc); var ranges = search.findAll(session);
assert.equal(ranges.length, 2); assert.equal(ranges.length, 2);
assert.position(ranges[0].start, 1, 1); assert.position(ranges[0].start, 1, 1);

View file

@ -37,35 +37,35 @@
define(function(require, exports, module) { define(function(require, exports, module) {
var Document = require("../document").Document, var EditSession = require("ace/edit_session").EditSession,
assert = require("./assertions"); assert = require("./assertions");
var Test = { var Test = {
createTextDocument : function(rows, cols) { createSession : function(rows, cols) {
var line = new Array(cols + 1).join("a"); var line = new Array(cols + 1).join("a");
var text = new Array(rows).join(line + "\n") + line; var text = new Array(rows).join(line + "\n") + line;
return new Document(text); return new EditSession(text);
}, },
"test: move cursor to end of file should place the cursor on last row and column" : function() { "test: move cursor to end of file should place the cursor on last row and column" : function() {
var doc = this.createTextDocument(200, 10); var session = this.createSession(200, 10);
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorFileEnd(); selection.moveCursorFileEnd();
assert.position(selection.getCursor(), 199, 10); assert.position(selection.getCursor(), 199, 10);
}, },
"test: moveCursor to start of file should place the cursor on the first row and column" : function() { "test: moveCursor to start of file should place the cursor on the first row and column" : function() {
var doc = this.createTextDocument(200, 10); var session = this.createSession(200, 10);
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorFileStart(); selection.moveCursorFileStart();
assert.position(selection.getCursor(), 0, 0); assert.position(selection.getCursor(), 0, 0);
}, },
"test: move selection lead to end of file" : function() { "test: move selection lead to end of file" : function() {
var doc = this.createTextDocument(200, 10); var session = this.createSession(200, 10);
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorTo(100, 5); selection.moveCursorTo(100, 5);
selection.selectFileEnd(); selection.selectFileEnd();
@ -77,8 +77,8 @@ var Test = {
}, },
"test: move selection lead to start of file" : function() { "test: move selection lead to start of file" : function() {
var doc = this.createTextDocument(200, 10); var session = this.createSession(200, 10);
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorTo(100, 5); selection.moveCursorTo(100, 5);
selection.selectFileStart(); selection.selectFileStart();
@ -90,9 +90,9 @@ var Test = {
}, },
"test: move cursor word right" : function() { "test: move cursor word right" : function() {
var doc = new Document( ["ab", var session = new EditSession( ["ab",
" Juhu Kinners (abc, 12)", " cde"].join("\n")); " Juhu Kinners (abc, 12)", " cde"].join("\n"));
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorDown(); selection.moveCursorDown();
assert.position(selection.getCursor(), 1, 0); assert.position(selection.getCursor(), 1, 0);
@ -130,8 +130,8 @@ var Test = {
}, },
"test: select word right if cursor in word" : function() { "test: select word right if cursor in word" : function() {
var doc = new Document("Juhu Kinners"); var session = new EditSession("Juhu Kinners");
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorTo(0, 2); selection.moveCursorTo(0, 2);
selection.moveCursorWordRight(); selection.moveCursorWordRight();
@ -140,9 +140,9 @@ var Test = {
}, },
"test: moveCursor word left" : function() { "test: moveCursor word left" : function() {
var doc = new Document( ["ab", var session = new EditSession( ["ab",
" Juhu Kinners (abc, 12)", " cde"].join("\n")); " Juhu Kinners (abc, 12)", " cde"].join("\n"));
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorDown(); selection.moveCursorDown();
selection.moveCursorLineEnd(); selection.moveCursorLineEnd();
@ -181,8 +181,8 @@ var Test = {
}, },
"test: select word left if cursor in word" : function() { "test: select word left if cursor in word" : function() {
var doc = new Document("Juhu Kinners"); var session = new EditSession("Juhu Kinners");
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorTo(0, 8); selection.moveCursorTo(0, 8);
@ -191,8 +191,8 @@ var Test = {
}, },
"test: select word right and select" : function() { "test: select word right and select" : function() {
var doc = new Document("Juhu Kinners"); var session = new EditSession("Juhu Kinners");
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorTo(0, 0); selection.moveCursorTo(0, 0);
selection.selectWordRight(); selection.selectWordRight();
@ -204,8 +204,8 @@ var Test = {
}, },
"test: select word left and select" : function() { "test: select word left and select" : function() {
var doc = new Document("Juhu Kinners"); var session = new EditSession("Juhu Kinners");
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorTo(0, 3); selection.moveCursorTo(0, 3);
selection.selectWordLeft(); selection.selectWordLeft();
@ -217,8 +217,8 @@ var Test = {
}, },
"test: select word with cursor in word should select the word" : function() { "test: select word with cursor in word should select the word" : function() {
var doc = new Document("Juhu Kinners 123"); var session = new EditSession("Juhu Kinners 123");
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorTo(0, 8); selection.moveCursorTo(0, 8);
selection.selectWord(); selection.selectWord();
@ -229,8 +229,8 @@ var Test = {
}, },
"test: select word with cursor betwen white space and word should select the word" : function() { "test: select word with cursor betwen white space and word should select the word" : function() {
var doc = new Document("Juhu Kinners"); var session = new EditSession("Juhu Kinners");
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorTo(0, 4); selection.moveCursorTo(0, 4);
selection.selectWord(); selection.selectWord();
@ -248,8 +248,8 @@ var Test = {
}, },
"test: select word with cursor in white space should select white space" : function() { "test: select word with cursor in white space should select white space" : function() {
var doc = new Document("Juhu Kinners"); var session = new EditSession("Juhu Kinners");
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorTo(0, 5); selection.moveCursorTo(0, 5);
selection.selectWord(); selection.selectWord();
@ -260,8 +260,8 @@ var Test = {
}, },
"test: moving cursor should fire a 'changeCursor' event" : function() { "test: moving cursor should fire a 'changeCursor' event" : function() {
var doc = new Document("Juhu Kinners"); var session = new EditSession("Juhu Kinners");
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorTo(0, 5); selection.moveCursorTo(0, 5);
@ -275,8 +275,8 @@ var Test = {
}, },
"test: calling setCursor with the same position should not fire an event": function() { "test: calling setCursor with the same position should not fire an event": function() {
var doc = new Document("Juhu Kinners"); var session = new EditSession("Juhu Kinners");
var selection = doc.getSelection(); var selection = session.getSelection();
selection.moveCursorTo(0, 5); selection.moveCursorTo(0, 5);

View file

@ -38,7 +38,7 @@
define(function(require, exports, module) { define(function(require, exports, module) {
require("./mockdom"); require("./mockdom");
var Document = require("../document").Document, var EditSession = require("ace/edit_session").EditSession,
Editor = require("../editor").Editor, Editor = require("../editor").Editor,
JavaScriptMode = require("../mode/javascript").Mode, JavaScriptMode = require("../mode/javascript").Mode,
UndoManager = require("../undomanager").UndoManager, UndoManager = require("../undomanager").UndoManager,
@ -47,74 +47,74 @@ var Document = require("../document").Document,
var Test = { var Test = {
"test: delete line from the middle" : function() { "test: delete line from the middle" : function() {
var doc = new Document(["a", "b", "c", "d"].join("\n")); var session = new EditSession(["a", "b", "c", "d"].join("\n"));
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(1, 1); editor.moveCursorTo(1, 1);
editor.removeLines(); editor.removeLines();
assert.equal(doc.toString(), "a\nc\nd"); assert.equal(session.toString(), "a\nc\nd");
assert.position(editor.getCursorPosition(), 1, 0); assert.position(editor.getCursorPosition(), 1, 0);
editor.removeLines(); editor.removeLines();
assert.equal(doc.toString(), "a\nd"); assert.equal(session.toString(), "a\nd");
assert.position(editor.getCursorPosition(), 1, 0); assert.position(editor.getCursorPosition(), 1, 0);
editor.removeLines(); editor.removeLines();
assert.equal(doc.toString(), "a\n"); assert.equal(session.toString(), "a\n");
assert.position(editor.getCursorPosition(), 1, 0); assert.position(editor.getCursorPosition(), 1, 0);
editor.removeLines(); editor.removeLines();
assert.equal(doc.toString(), "a\n"); assert.equal(session.toString(), "a\n");
assert.position(editor.getCursorPosition(), 1, 0); assert.position(editor.getCursorPosition(), 1, 0);
}, },
"test: delete multiple selected lines" : function() { "test: delete multiple selected lines" : function() {
var doc = new Document(["a", "b", "c", "d"].join("\n")); var session = new EditSession(["a", "b", "c", "d"].join("\n"));
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(1, 1); editor.moveCursorTo(1, 1);
editor.getSelection().selectDown(); editor.getSelection().selectDown();
editor.removeLines(); editor.removeLines();
assert.equal(doc.toString(), "a\nd"); assert.equal(session.toString(), "a\nd");
assert.position(editor.getCursorPosition(), 1, 0); assert.position(editor.getCursorPosition(), 1, 0);
}, },
"test: delete first line" : function() { "test: delete first line" : function() {
var doc = new Document(["a", "b", "c"].join("\n")); var session = new EditSession(["a", "b", "c"].join("\n"));
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.removeLines(); editor.removeLines();
assert.equal(doc.toString(), "b\nc"); assert.equal(session.toString(), "b\nc");
assert.position(editor.getCursorPosition(), 0, 0); assert.position(editor.getCursorPosition(), 0, 0);
}, },
"test: delete last" : function() { "test: delete last" : function() {
var doc = new Document(["a", "b", "c"].join("\n")); var session = new EditSession(["a", "b", "c"].join("\n"));
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(2, 1); editor.moveCursorTo(2, 1);
editor.removeLines(); editor.removeLines();
assert.equal(doc.toString(), "a\nb\n"); assert.equal(session.toString(), "a\nb\n");
assert.position(editor.getCursorPosition(), 2, 0); assert.position(editor.getCursorPosition(), 2, 0);
}, },
"test: indent block" : function() { "test: indent block" : function() {
var doc = new Document(["a12345", "b12345", "c12345"].join("\n")); var session = new EditSession(["a12345", "b12345", "c12345"].join("\n"));
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(1, 3); editor.moveCursorTo(1, 3);
editor.getSelection().selectDown(); editor.getSelection().selectDown();
editor.indent(); editor.indent();
assert.equal(["a12345", " b12345", " c12345"].join("\n"), doc.toString()); assert.equal(["a12345", " b12345", " c12345"].join("\n"), session.toString());
assert.position(editor.getCursorPosition(), 2, 7); assert.position(editor.getCursorPosition(), 2, 7);
@ -124,35 +124,35 @@ var Test = {
}, },
"test: indent selected lines" : function() { "test: indent selected lines" : function() {
var doc = new Document(["a12345", "b12345", "c12345"].join("\n")); var session = new EditSession(["a12345", "b12345", "c12345"].join("\n"));
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(1, 0); editor.moveCursorTo(1, 0);
editor.getSelection().selectDown(); editor.getSelection().selectDown();
editor.indent(); editor.indent();
assert.equal(["a12345", " b12345", "c12345"].join("\n"), doc.toString()); assert.equal(["a12345", " b12345", "c12345"].join("\n"), session.toString());
}, },
"test: no auto indent if cursor is before the {" : function() { "test: no auto indent if cursor is before the {" : function() {
var doc = new Document("{", new JavaScriptMode()); var session = new EditSession("{", new JavaScriptMode());
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(0, 0); editor.moveCursorTo(0, 0);
editor.onTextInput("\n"); editor.onTextInput("\n");
assert.equal(["", "{"].join("\n"), doc.toString()); assert.equal(["", "{"].join("\n"), session.toString());
}, },
"test: outdent block" : function() { "test: outdent block" : function() {
var doc = new Document([" a12345", " b12345", " c12345"].join("\n")); var session = new EditSession([" a12345", " b12345", " c12345"].join("\n"));
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(0, 5); editor.moveCursorTo(0, 5);
editor.getSelection().selectDown(); editor.getSelection().selectDown();
editor.getSelection().selectDown(); editor.getSelection().selectDown();
editor.blockOutdent(); editor.blockOutdent();
assert.equal(doc.toString(), [" a12345", "b12345", " c12345"].join("\n")); assert.equal(session.toString(), [" a12345", "b12345", " c12345"].join("\n"));
assert.position(editor.getCursorPosition(), 2, 1); assert.position(editor.getCursorPosition(), 2, 1);
@ -161,7 +161,7 @@ var Test = {
assert.position(range.end, 2, 1); assert.position(range.end, 2, 1);
editor.blockOutdent(); editor.blockOutdent();
assert.equal(doc.toString(), ["a12345", "b12345", "c12345"].join("\n")); assert.equal(session.toString(), ["a12345", "b12345", "c12345"].join("\n"));
var range = editor.getSelectionRange(); var range = editor.getSelectionRange();
assert.position(range.start, 0, 0); assert.position(range.start, 0, 0);
@ -169,25 +169,25 @@ var Test = {
}, },
"test: outent without a selection should update cursor" : function() { "test: outent without a selection should update cursor" : function() {
var doc = new Document(" 12"); var session = new EditSession(" 12");
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(0, 3); editor.moveCursorTo(0, 3);
editor.blockOutdent(" "); editor.blockOutdent(" ");
assert.equal(doc.toString(), " 12"); assert.equal(session.toString(), " 12");
assert.position(editor.getCursorPosition(), 0, 0); assert.position(editor.getCursorPosition(), 0, 0);
}, },
"test: comment lines should perserve selection" : function() { "test: comment lines should perserve selection" : function() {
var doc = new Document([" abc", "cde"].join("\n"), new JavaScriptMode()); var session = new EditSession([" abc", "cde"].join("\n"), new JavaScriptMode());
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(0, 2); editor.moveCursorTo(0, 2);
editor.getSelection().selectDown(); editor.getSelection().selectDown();
editor.toggleCommentLines(); editor.toggleCommentLines();
assert.equal(["// abc", "//cde"].join("\n"), doc.toString()); assert.equal(["// abc", "//cde"].join("\n"), session.toString());
var selection = editor.getSelectionRange(); var selection = editor.getSelectionRange();
assert.position(selection.start, 0, 4); assert.position(selection.start, 0, 4);
@ -195,8 +195,8 @@ var Test = {
}, },
"test: uncomment lines should perserve selection" : function() { "test: uncomment lines should perserve selection" : function() {
var doc = new Document(["// abc", "//cde"].join("\n"), new JavaScriptMode()); var session = new EditSession(["// abc", "//cde"].join("\n"), new JavaScriptMode());
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(0, 1); editor.moveCursorTo(0, 1);
editor.getSelection().selectDown(); editor.getSelection().selectDown();
@ -205,13 +205,13 @@ var Test = {
editor.toggleCommentLines(); editor.toggleCommentLines();
assert.equal([" abc", "cde"].join("\n"), doc.toString()); assert.equal([" abc", "cde"].join("\n"), session.toString());
assert.range(editor.getSelectionRange(), 0, 0, 1, 1); assert.range(editor.getSelectionRange(), 0, 0, 1, 1);
}, },
"test: toggle comment lines twice should return the original text" : function() { "test: toggle comment lines twice should return the original text" : function() {
var doc = new Document([" abc", "cde", "fg"], new JavaScriptMode()); var session = new EditSession([" abc", "cde", "fg"], new JavaScriptMode());
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(0, 0); editor.moveCursorTo(0, 0);
editor.getSelection().selectDown(); editor.getSelection().selectDown();
@ -220,14 +220,14 @@ var Test = {
editor.toggleCommentLines(); editor.toggleCommentLines();
editor.toggleCommentLines(); editor.toggleCommentLines();
assert.equal([" abc", "cde", "fg"].join("\n"), doc.toString()); assert.equal([" abc", "cde", "fg"].join("\n"), session.toString());
}, },
"test: comment lines - if the selection end is at the line start it should stay there": function() { "test: comment lines - if the selection end is at the line start it should stay there": function() {
//select down //select down
var doc = new Document(["abc", "cde"].join("\n"), new JavaScriptMode()); var session = new EditSession(["abc", "cde"].join("\n"), new JavaScriptMode());
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(0, 0); editor.moveCursorTo(0, 0);
editor.getSelection().selectDown(); editor.getSelection().selectDown();
@ -236,8 +236,8 @@ var Test = {
assert.range(editor.getSelectionRange(), 0, 2, 1, 0); assert.range(editor.getSelectionRange(), 0, 2, 1, 0);
// select up // select up
var doc = new Document(["abc", "cde"].join("\n"), new JavaScriptMode()); var session = new EditSession(["abc", "cde"].join("\n"), new JavaScriptMode());
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(1, 0); editor.moveCursorTo(1, 0);
editor.getSelection().selectUp(); editor.getSelection().selectUp();
@ -247,47 +247,47 @@ var Test = {
}, },
"test: move lines down should select moved lines" : function() { "test: move lines down should select moved lines" : function() {
var doc = new Document(["11", "22", "33", "44"].join("\n")); var session = new EditSession(["11", "22", "33", "44"].join("\n"));
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(0, 1); editor.moveCursorTo(0, 1);
editor.getSelection().selectDown(); editor.getSelection().selectDown();
editor.moveLinesDown(); editor.moveLinesDown();
assert.equal(["33", "11", "22", "44"].join("\n"), doc.toString()); assert.equal(["33", "11", "22", "44"].join("\n"), session.toString());
assert.position(editor.getCursorPosition(), 1, 0); assert.position(editor.getCursorPosition(), 1, 0);
assert.position(editor.getSelection().getSelectionAnchor(), 3, 0); assert.position(editor.getSelection().getSelectionAnchor(), 3, 0);
assert.position(editor.getSelection().getSelectionLead(), 1, 0); assert.position(editor.getSelection().getSelectionLead(), 1, 0);
editor.moveLinesDown(); editor.moveLinesDown();
assert.equal(["33", "44", "11", "22"].join("\n"), doc.toString()); assert.equal(["33", "44", "11", "22"].join("\n"), session.toString());
assert.position(editor.getCursorPosition(), 2, 0); assert.position(editor.getCursorPosition(), 2, 0);
assert.position(editor.getSelection().getSelectionAnchor(), 3, 2); assert.position(editor.getSelection().getSelectionAnchor(), 3, 2);
assert.position(editor.getSelection().getSelectionLead(), 2, 0); assert.position(editor.getSelection().getSelectionLead(), 2, 0);
// moving again should have no effect // moving again should have no effect
editor.moveLinesDown(); editor.moveLinesDown();
assert.equal(["33", "44", "11", "22"].join("\n"), doc.toString()); assert.equal(["33", "44", "11", "22"].join("\n"), session.toString());
assert.position(editor.getCursorPosition(), 2, 0); assert.position(editor.getCursorPosition(), 2, 0);
assert.position(editor.getSelection().getSelectionAnchor(), 3, 2); assert.position(editor.getSelection().getSelectionAnchor(), 3, 2);
assert.position(editor.getSelection().getSelectionLead(), 2, 0); assert.position(editor.getSelection().getSelectionLead(), 2, 0);
}, },
"test: move lines up should select moved lines" : function() { "test: move lines up should select moved lines" : function() {
var doc = new Document(["11", "22", "33", "44"].join("\n")); var session = new EditSession(["11", "22", "33", "44"].join("\n"));
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(2, 1); editor.moveCursorTo(2, 1);
editor.getSelection().selectDown(); editor.getSelection().selectDown();
editor.moveLinesUp(); editor.moveLinesUp();
assert.equal(doc.toString(), ["11", "33", "44", "22"].join("\n")); assert.equal(session.toString(), ["11", "33", "44", "22"].join("\n"));
assert.position(editor.getCursorPosition(), 1, 0); assert.position(editor.getCursorPosition(), 1, 0);
assert.position(editor.getSelection().getSelectionAnchor(), 3, 0); assert.position(editor.getSelection().getSelectionAnchor(), 3, 0);
assert.position(editor.getSelection().getSelectionLead(), 1, 0); assert.position(editor.getSelection().getSelectionLead(), 1, 0);
editor.moveLinesUp(); editor.moveLinesUp();
assert.equal(doc.toString(), ["33", "44", "11", "22"].join("\n")); assert.equal(session.toString(), ["33", "44", "11", "22"].join("\n"));
assert.position(editor.getCursorPosition(), 0, 0); assert.position(editor.getCursorPosition(), 0, 0);
assert.position(editor.getSelection().getSelectionAnchor(), 2, 0); assert.position(editor.getSelection().getSelectionAnchor(), 2, 0);
assert.position(editor.getSelection().getSelectionLead(), 0, 0); assert.position(editor.getSelection().getSelectionLead(), 0, 0);
@ -295,32 +295,32 @@ var Test = {
"test: move line without active selection should move cursor to start of the moved line" : function() "test: move line without active selection should move cursor to start of the moved line" : function()
{ {
var doc = new Document(["11", "22", "33", "44"].join("\n")); var session = new EditSession(["11", "22", "33", "44"].join("\n"));
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(1, 1); editor.moveCursorTo(1, 1);
editor.clearSelection(); editor.clearSelection();
editor.moveLinesDown(); editor.moveLinesDown();
assert.equal(["11", "33", "22", "44"].join("\n"), doc.toString()); assert.equal(["11", "33", "22", "44"].join("\n"), session.toString());
assert.position(editor.getCursorPosition(), 2, 0); assert.position(editor.getCursorPosition(), 2, 0);
editor.clearSelection(); editor.clearSelection();
editor.moveLinesUp(); editor.moveLinesUp();
assert.equal(["11", "22", "33", "44"].join("\n"), doc.toString()); assert.equal(["11", "22", "33", "44"].join("\n"), session.toString());
assert.position(editor.getCursorPosition(), 1, 0); assert.position(editor.getCursorPosition(), 1, 0);
}, },
"test: copy lines down should select lines and place cursor at the selection start" : function() { "test: copy lines down should select lines and place cursor at the selection start" : function() {
var doc = new Document(["11", "22", "33", "44"].join("\n")); var session = new EditSession(["11", "22", "33", "44"].join("\n"));
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(1, 1); editor.moveCursorTo(1, 1);
editor.getSelection().selectDown(); editor.getSelection().selectDown();
editor.copyLinesDown(); editor.copyLinesDown();
assert.equal(["11", "22", "33", "22", "33", "44"].join("\n"), doc.toString()); assert.equal(["11", "22", "33", "22", "33", "44"].join("\n"), session.toString());
assert.position(editor.getCursorPosition(), 3, 0); assert.position(editor.getCursorPosition(), 3, 0);
assert.position(editor.getSelection().getSelectionAnchor(), 5, 0); assert.position(editor.getSelection().getSelectionAnchor(), 5, 0);
@ -328,14 +328,14 @@ var Test = {
}, },
"test: copy lines up should select lines and place cursor at the selection start" : function() { "test: copy lines up should select lines and place cursor at the selection start" : function() {
var doc = new Document(["11", "22", "33", "44"].join("\n")); var session = new EditSession(["11", "22", "33", "44"].join("\n"));
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(1, 1); editor.moveCursorTo(1, 1);
editor.getSelection().selectDown(); editor.getSelection().selectDown();
editor.copyLinesUp(); editor.copyLinesUp();
assert.equal(["11", "22", "33", "22", "33", "44"].join("\n"), doc.toString()); assert.equal(["11", "22", "33", "22", "33", "44"].join("\n"), session.toString());
assert.position(editor.getCursorPosition(), 1, 0); assert.position(editor.getCursorPosition(), 1, 0);
assert.position(editor.getSelection().getSelectionAnchor(), 3, 0); assert.position(editor.getSelection().getSelectionAnchor(), 3, 0);
@ -343,100 +343,98 @@ var Test = {
}, },
"test: input a tab with soft tab should convert it to spaces" : function() { "test: input a tab with soft tab should convert it to spaces" : function() {
var doc = new Document(""); var session = new EditSession("");
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
doc.setTabSize(2); session.setTabSize(2);
doc.setUseSoftTabs(true); session.setUseSoftTabs(true);
editor.onTextInput("\t"); editor.onTextInput("\t");
assert.equal(doc.toString(), " "); assert.equal(session.toString(), " ");
doc.setTabSize(5); session.setTabSize(5);
editor.onTextInput("\t"); editor.onTextInput("\t");
assert.equal(doc.toString(), " "); assert.equal(session.toString(), " ");
}, },
"test: input tab without soft tabs should keep the tab character" : function() { "test: input tab without soft tabs should keep the tab character" : function() {
var doc = new Document(""); var session = new EditSession("");
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
doc.setUseSoftTabs(false); session.setUseSoftTabs(false);
editor.onTextInput("\t"); editor.onTextInput("\t");
assert.equal(doc.toString(), "\t"); assert.equal(session.toString(), "\t");
}, },
"test: undo/redo for delete line" : function() { "test: undo/redo for delete line" : function() {
var doc = new Document(["111", "222", "333"]); var session = new EditSession(["111", "222", "333"]);
var undoManager = new UndoManager(); var undoManager = new UndoManager();
doc.setUndoManager(undoManager); session.setUndoManager(undoManager);
var initialText = doc.toString(); var initialText = session.toString();
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new MockRenderer(), doc);
editor.removeLines(); editor.removeLines();
var step1 = doc.toString(); var step1 = session.toString();
assert.equal(step1, "222\n333"); assert.equal(step1, "222\n333");
doc.$informUndoManager.call(); session.$informUndoManager.call();
editor.removeLines(); editor.removeLines();
var step2 = doc.toString(); var step2 = session.toString();
assert.equal(step2, "333"); assert.equal(step2, "333");
doc.$informUndoManager.call(); session.$informUndoManager.call();
editor.removeLines(); editor.removeLines();
var step3 = doc.toString(); var step3 = session.toString();
assert.equal(step3, ""); assert.equal(step3, "");
doc.$informUndoManager.call(); session.$informUndoManager.call();
undoManager.undo(); undoManager.undo();
doc.$informUndoManager.call(); session.$informUndoManager.call();
assert.equal(doc.toString(), step2); assert.equal(session.toString(), step2);
undoManager.undo(); undoManager.undo();
doc.$informUndoManager.call(); session.$informUndoManager.call();
assert.equal(doc.toString(), step1); assert.equal(session.toString(), step1);
undoManager.undo(); undoManager.undo();
doc.$informUndoManager.call(); session.$informUndoManager.call();
assert.equal(doc.toString(), initialText); assert.equal(session.toString(), initialText);
undoManager.undo(); undoManager.undo();
doc.$informUndoManager.call(); session.$informUndoManager.call();
assert.equal(doc.toString(), initialText); assert.equal(session.toString(), initialText);
}, },
"test: remove left should remove character left of the cursor" : function() { "test: remove left should remove character left of the cursor" : function() {
var doc = new Document(["123", "456"]); var session = new EditSession(["123", "456"]);
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(1, 1); editor.moveCursorTo(1, 1);
editor.removeLeft(); editor.removeLeft();
assert.equal(doc.toString(), "123\n56"); assert.equal(session.toString(), "123\n56");
}, },
"test: remove left should remove line break if cursor is at line start" : function() { "test: remove left should remove line break if cursor is at line start" : function() {
var doc = new Document(["123", "456"]); var session = new EditSession(["123", "456"]);
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(1, 0); editor.moveCursorTo(1, 0);
editor.removeLeft(); editor.removeLeft();
assert.equal(doc.toString(), "123456"); assert.equal(session.toString(), "123456");
}, },
"test: remove left should remove tabsize spaces if cursor is on a tab stop and preceeded by spaces" : function() { "test: remove left should remove tabsize spaces if cursor is on a tab stop and preceeded by spaces" : function() {
var doc = new Document(["123", " 456"]); var session = new EditSession(["123", " 456"]);
doc.setUseSoftTabs(true); session.setUseSoftTabs(true);
doc.setTabSize(4); session.setTabSize(4);
var editor = new Editor(new MockRenderer(), doc); var editor = new Editor(new MockRenderer(), session);
editor.moveCursorTo(1, 8); editor.moveCursorTo(1, 8);
editor.removeLeft(); editor.removeLeft();
assert.equal(doc.toString(), "123\n 456"); assert.equal(session.toString(), "123\n 456");
} }
}; };