fix more unit tests

This commit is contained in:
Fabian Jakobs 2011-08-17 12:35:27 +02:00
commit 85ed66edfe
12 changed files with 129 additions and 112 deletions

View file

@ -314,13 +314,10 @@ var Editor = function(windowView, buffer) {
}
};
this.onTextInput = function(text, notPasted) {
if (!notPasted)
this._emit("paste", text);
// In case the text was not pasted and we got only one character, then
this.onTextInput = function(text) {
// In case we got only one character, then
// handel it as a command key stroke.
if (notPasted && text.length == 1) {
if (text.length == 1) {
// Note: The `null` as `keyCode` is important here, as there are
// some checks in the code for `keyCode == 0` meaning the text comes
// from the keyBinding.onTextInput code path.
@ -340,6 +337,11 @@ var Editor = function(windowView, buffer) {
}
};
this.onPaste = function(text) {
this._emit("paste", text);
this.keyBinding.onTextInput(text);
};
this.onCommandKey = function(e, hashId, keyCode) {
this.keyBinding.onCommandKey(e, hashId, keyCode);
};

View file

@ -46,13 +46,13 @@ var Buffer = require("ace/model/buffer").Buffer;
var Editor = require("ace/editor").Editor;
var JavaScriptMode = require("ace/mode/javascript").Mode;
var UndoManager = require("ace/undomanager").UndoManager;
var MockRenderer = require("ace/view/window_view_mock").MockRenderer;
var WindowViewMock = require("ace/view/window_view_mock").WindowViewMock;
var assert = require("ace/test/assertions");
module.exports = {
"test: delete line from the middle" : function() {
var session = new Buffer(["a", "b", "c", "d"].join("\n"));
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 1);
editor.removeLines();
@ -78,7 +78,7 @@ module.exports = {
"test: delete multiple selected lines" : function() {
var session = new Buffer(["a", "b", "c", "d"].join("\n"));
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 1);
editor.getSelection().selectDown();
@ -90,7 +90,7 @@ module.exports = {
"test: delete first line" : function() {
var session = new Buffer(["a", "b", "c"].join("\n"));
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.removeLines();
@ -100,7 +100,7 @@ module.exports = {
"test: delete last should also delete the new line of the previous line" : function() {
var session = new Buffer(["a", "b", "c", ""].join("\n"));
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(3, 0);
@ -115,7 +115,7 @@ module.exports = {
"test: indent block" : function() {
var session = new Buffer(["a12345", "b12345", "c12345"].join("\n"));
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 3);
editor.getSelection().selectDown();
@ -133,7 +133,7 @@ module.exports = {
"test: indent selected lines" : function() {
var session = new Buffer(["a12345", "b12345", "c12345"].join("\n"));
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 0);
editor.getSelection().selectDown();
@ -144,7 +144,7 @@ module.exports = {
"test: no auto indent if cursor is before the {" : function() {
var session = new Buffer("{", new JavaScriptMode());
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(0, 0);
editor.onTextInput("\n");
@ -153,7 +153,7 @@ module.exports = {
"test: outdent block" : function() {
var session = new Buffer([" a12345", " b12345", " c12345"].join("\n"));
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(0, 5);
editor.getSelection().selectDown();
@ -178,7 +178,7 @@ module.exports = {
"test: outent without a selection should update cursor" : function() {
var session = new Buffer(" 12");
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(0, 3);
editor.blockOutdent(" ");
@ -189,7 +189,7 @@ module.exports = {
"test: comment lines should perserve selection" : function() {
var session = new Buffer([" abc", "cde"].join("\n"), new JavaScriptMode());
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(0, 2);
editor.getSelection().selectDown();
@ -204,7 +204,7 @@ module.exports = {
"test: uncomment lines should perserve selection" : function() {
var session = new Buffer(["// abc", "//cde"].join("\n"), new JavaScriptMode());
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(0, 1);
editor.getSelection().selectDown();
@ -219,7 +219,7 @@ module.exports = {
"test: toggle comment lines twice should return the original text" : function() {
var session = new Buffer([" abc", "cde", "fg"], new JavaScriptMode());
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(0, 0);
editor.getSelection().selectDown();
@ -235,7 +235,7 @@ module.exports = {
"test: comment lines - if the selection end is at the line start it should stay there": function() {
//select down
var session = new Buffer(["abc", "cde"].join("\n"), new JavaScriptMode());
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(0, 0);
editor.getSelection().selectDown();
@ -245,7 +245,7 @@ module.exports = {
// select up
var session = new Buffer(["abc", "cde"].join("\n"), new JavaScriptMode());
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 0);
editor.getSelection().selectUp();
@ -256,7 +256,7 @@ module.exports = {
"test: move lines down should select moved lines" : function() {
var session = new Buffer(["11", "22", "33", "44"].join("\n"));
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(0, 1);
editor.getSelection().selectDown();
@ -283,7 +283,7 @@ module.exports = {
"test: move lines up should select moved lines" : function() {
var session = new Buffer(["11", "22", "33", "44"].join("\n"));
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(2, 1);
editor.getSelection().selectDown();
@ -304,7 +304,7 @@ module.exports = {
"test: move line without active selection should move cursor to start of the moved line" : function()
{
var session = new Buffer(["11", "22", "33", "44"].join("\n"));
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 1);
editor.clearSelection();
@ -322,7 +322,7 @@ module.exports = {
"test: copy lines down should select lines and place cursor at the selection start" : function() {
var session = new Buffer(["11", "22", "33", "44"].join("\n"));
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 1);
editor.getSelection().selectDown();
@ -337,7 +337,7 @@ module.exports = {
"test: copy lines up should select lines and place cursor at the selection start" : function() {
var session = new Buffer(["11", "22", "33", "44"].join("\n"));
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 1);
editor.getSelection().selectDown();
@ -352,7 +352,7 @@ module.exports = {
"test: input a tab with soft tab should convert it to spaces" : function() {
var session = new Buffer("");
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
session.setTabSize(2);
session.setUseSoftTabs(true);
@ -367,7 +367,7 @@ module.exports = {
"test: input tab without soft tabs should keep the tab character" : function() {
var session = new Buffer("");
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
session.setUseSoftTabs(false);
@ -381,7 +381,7 @@ module.exports = {
session.setUndoManager(undoManager);
var initialText = session.toString();
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.removeLines();
var step1 = session.toString();
@ -418,7 +418,7 @@ module.exports = {
"test: remove left should remove character left of the cursor" : function() {
var session = new Buffer(["123", "456"]);
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 1);
editor.removeLeft();
assert.equal(session.toString(), "123\n56");
@ -427,7 +427,7 @@ module.exports = {
"test: remove left should remove line break if cursor is at line start" : function() {
var session = new Buffer(["123", "456"]);
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 0);
editor.removeLeft();
assert.equal(session.toString(), "123456");
@ -438,7 +438,7 @@ module.exports = {
session.setUseSoftTabs(true);
session.setTabSize(4);
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 8);
editor.removeLeft();
assert.equal(session.toString(), "123\n 456");
@ -447,7 +447,7 @@ module.exports = {
"test: transpose at line start should be a noop": function() {
var session = new Buffer(["123", "4567", "89"]);
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 0);
editor.transposeLetters();
@ -457,7 +457,7 @@ module.exports = {
"test: transpose in line should swap the charaters before and after the cursor": function() {
var session = new Buffer(["123", "4567", "89"]);
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 2);
editor.transposeLetters();
@ -467,7 +467,7 @@ module.exports = {
"test: transpose at line end should swap the last two characters": function() {
var session = new Buffer(["123", "4567", "89"]);
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 4);
editor.transposeLetters();
@ -477,7 +477,7 @@ module.exports = {
"test: transpose with non empty selection should be a noop": function() {
var session = new Buffer(["123", "4567", "89"]);
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 1);
editor.getSelection().selectRight();
editor.transposeLetters();
@ -488,7 +488,7 @@ module.exports = {
"test: transpose should move the cursor behind the last swapped character": function() {
var session = new Buffer(["123", "4567", "89"]);
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 2);
editor.transposeLetters();
assert.position(editor.getCursorPosition(), 1, 3);
@ -497,7 +497,7 @@ module.exports = {
"test: remove to line end": function() {
var session = new Buffer(["123", "4567", "89"]);
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 2);
editor.removeToLineEnd();
assert.equal(session.getValue(), ["123", "45", "89"].join("\n"));
@ -506,7 +506,7 @@ module.exports = {
"test: remove to line end at line end should remove the new line": function() {
var session = new Buffer(["123", "4567", "89"]);
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
editor.moveCursorTo(1, 4);
editor.removeToLineEnd();
assert.position(editor.getCursorPosition(), 1, 4);

View file

@ -67,13 +67,14 @@ var TextInput = function(parentNode, host) {
if (!copied) {
var value = valueToSend || text.value;
if (value) {
if (value.charCodeAt(value.length-1) == PLACEHOLDER.charCodeAt(0)) {
if (value.charCodeAt(value.length-1) == PLACEHOLDER.charCodeAt(0))
value = value.slice(0, -1);
if (value)
host.onTextInput(value, !pasted);
}
else {
host.onTextInput(value, !pasted);
if (value) {
if (pasted)
host.onPaste(value);
else
host.onTextInput(value);
}
// If editor is no longer focused we quit immediately, since

View file

@ -47,7 +47,7 @@ var lang = require("ace/lib/lang");
var Buffer = require("ace/model/buffer").Buffer;
var Editor = require("ace/editor").Editor;
var UndoManager = require("ace/undomanager").UndoManager;
var MockRenderer = require("ace/view/window_view_mock").MockRenderer;
var WindowViewMock = require("ace/view/window_view_mock").WindowViewMock;
var Range = require("ace/range").Range;
var assert = require("ace/test/assertions");
@ -381,7 +381,7 @@ module.exports = {
"test issue 83": function() {
var session = new Buffer("");
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
var document = session.getDocument();
session.setUseWrapMode(true);
@ -393,7 +393,7 @@ module.exports = {
"test wrapMode init has to create wrapData array": function() {
var session = new Buffer("foo bar\nfoo bar");
var editor = new Editor(new MockRenderer(), session);
var editor = new Editor(new WindowViewMock(), session);
var document = session.getDocument();
session.setUseWrapMode(true);

View file

@ -257,6 +257,10 @@ var Window = exports.Window = function(theme, search) {
// SELECTION HANDLING
this.getSelection = function() {
return this.selection;
};
this.centerSelection = function() {
var range = this.getSelectionRange();
var line = Math.floor(range.start.row + (range.end.row - range.start.row) / 2);
@ -571,6 +575,10 @@ var Window = exports.Window = function(theme, search) {
this._emit("changeBuffer", {oldValue: oldValue, value: buffer});
};
this.getBuffer = function() {
return this.buffer;
};
this.setTheme = function(theme) {
var _self = this;

View file

@ -36,7 +36,7 @@
* ***** END LICENSE BLOCK ***** */
if (typeof process !== "undefined") {
require("../support/paths");
require("../../support/paths");
}
define(function(require, exports, module) {

View file

@ -1,7 +1,7 @@
define(function(require, exports, module) {
require("ace/lib/fixoldbrowsers");
var AsyncTest = require("asyncjs").test;
var AsyncTest = require("asyncjs/test");
var async = require("asyncjs");
var dom = require("ace/lib/dom");
@ -11,15 +11,8 @@ var log = document.getElementById("log")
var tests = [
require("ace/anchor_test"),
require("ace/edit_session_test"),
require("ace/editor_change_document_test"),
require("ace/editor_highlight_selected_word_test"),
require("ace/editor_navigation_test"),
require("ace/editor_text_edit_test"),
require("ace/layer/text_test"),
require("ace/mode/coffee/parser_test"),
require("ace/model/document_test"),
require("ace/view/window_view_test"),
require("ace/mode/css_test"),
require("ace/mode/css_tokenizer_test"),
require("ace/mode/css_worker"),
@ -32,10 +25,16 @@ var tests = [
require("ace/mode/text_test"),
require("ace/mode/xml_test"),
require("ace/mode/xml_tokenizer_test"),
require("ace/model/buffer_test"),
require("ace/model/document_test"),
require("ace/model/editor_test"),
require("ace/model/window_navigation_test"),
require("ace/model/window_test"),
require("ace/range_test"),
require("ace/search_test"),
require("ace/selection_test"),
require("ace/test/event_emitter_test")
require("ace/test/event_emitter_test"),
require("ace/view/window_view_test")
]
async.list(tests)

View file

@ -26,7 +26,7 @@
<script type="text/javascript">
var require = {
paths: {
ace: "../"
ace: ".."
},
packages : [{
name: "asyncjs",

View file

@ -40,8 +40,10 @@ define(function(require, exports, module) {
var Window = require("ace/model/window").Window;
exports.MockRenderer = exports.WindowViewMock = WindowViewMock = function() {
this.container = {};
exports.WindowViewMock = WindowViewMock = function() {
this.container = {
appendChild: function() {}
};
this.isWindowViewMock = true;
this.model = new Window({});
};

View file

@ -66,8 +66,8 @@ module.exports = {
document.body.appendChild(el);
var renderer = new WindowView(new Window(), el);
renderer.setPadding(0);
renderer.setSession(new Buffer("1234"));
renderer.model.setPadding(0);
renderer.model.setBuffer(new Buffer("1234"));
assert.position(renderer.screenToTextCoordinates(0, 0), 0, 0);
assert.position(renderer.screenToTextCoordinates(4, 0), 0, 0);

View file

@ -37,123 +37,128 @@
if (typeof process !== "undefined") {
require("../support/paths");
require("ace/test/mockdom");
}
define(function(require, exports, module) {
var Buffer = require("ace/model/buffer").Buffer;
var Editor = require("ace/editor").Editor;
var Text = require("ace/mode/text").Mode;
var TextMode = require("ace/mode/text").Mode;
var JavaScriptMode = require("ace/mode/javascript").Mode;
var MockRenderer = require("ace/view/window_view_mock").MockRenderer;
var WindowViewMock = require("ace/view/window_view_mock").WindowViewMock;
var Window = require("ace/model/window").Window;
var WindowController = require("ace/window_controller").WindowController;
var assert = require("ace/test/assertions");
module.exports = {
name: "window controller",
setUp : function(next) {
this.session1 = new Buffer(["abc", "def"]);
this.session2 = new Buffer(["ghi", "jkl"]);
this.editor = new Editor(new MockRenderer());
this.buffer1 = new Buffer(["abc", "def"]);
this.buffer2 = new Buffer(["ghi", "jkl"]);
this.win = new Window({});
this.winController = new WindowController(this.win, new WindowViewMock());
next();
},
"test: change document" : function() {
this.editor.setSession(this.session1);
assert.equal(this.editor.getSession(), this.session1);
this.win.setBuffer(this.buffer1);
assert.equal(this.win.getBuffer(), this.buffer1);
this.editor.setSession(this.session2);
assert.equal(this.editor.getSession(), this.session2);
this.win.setBuffer(this.buffer2);
assert.equal(this.win.getBuffer(), this.buffer2);
},
"test: only changes to the new document should have effect" : function() {
var called = false;
this.editor.onDocumentChange = function() {
this.winController.onDocumentChange = function() {
called = true;
};
this.editor.setSession(this.session1);
this.editor.setSession(this.session2);
this.win.setBuffer(this.buffer1);
this.win.setBuffer(this.buffer2);
this.session1.duplicateLines(0, 0);
this.buffer1.duplicateLines(0, 0);
assert.notOk(called);
this.session2.duplicateLines(0, 0);
this.buffer2.duplicateLines(0, 0);
assert.ok(called);
},
"test: should use cursor of new document" : function() {
this.session1.getSelection().moveCursorTo(0, 1);
this.session2.getSelection().moveCursorTo(1, 0);
this.buffer1.getSelection().moveCursorTo(0, 1);
this.buffer2.getSelection().moveCursorTo(1, 0);
this.editor.setSession(this.session1);
assert.position(this.editor.getCursorPosition(), 0, 1);
this.win.setBuffer(this.buffer1);
assert.position(this.win.getCursorPosition(), 0, 1);
this.editor.setSession(this.session2);
assert.position(this.editor.getCursorPosition(), 1, 0);
this.win.setBuffer(this.buffer2);
assert.position(this.win.getCursorPosition(), 1, 0);
},
"test: only changing the cursor of the new doc should not have an effect" : function() {
this.editor.onCursorChange = function() {
this.winController.onChangeCursor = function() {
called = true;
};
this.editor.setSession(this.session1);
this.editor.setSession(this.session2);
assert.position(this.editor.getCursorPosition(), 0, 0);
this.win.setBuffer(this.buffer1);
this.win.setBuffer(this.buffer2);
assert.position(this.win.getCursorPosition(), 0, 0);
var called = false;
this.session1.getSelection().moveCursorTo(0, 1);
assert.position(this.editor.getCursorPosition(), 0, 0);
this.buffer1.getSelection().moveCursorTo(0, 1);
assert.position(this.win.getCursorPosition(), 0, 0);
assert.notOk(called);
this.session2.getSelection().moveCursorTo(1, 1);
assert.position(this.editor.getCursorPosition(), 1, 1);
this.buffer2.getSelection().moveCursorTo(1, 1);
assert.position(this.win.getCursorPosition(), 1, 1);
assert.ok(called);
},
"test: should use selection of new document" : function() {
this.session1.getSelection().selectTo(0, 1);
this.session2.getSelection().selectTo(1, 0);
this.buffer1.getSelection().selectTo(0, 1);
this.buffer2.getSelection().selectTo(1, 0);
this.editor.setSession(this.session1);
assert.position(this.editor.getSelection().getSelectionLead(), 0, 1);
this.win.setBuffer(this.buffer1);
assert.position(this.win.getSelection().getSelectionLead(), 0, 1);
this.editor.setSession(this.session2);
assert.position(this.editor.getSelection().getSelectionLead(), 1, 0);
this.win.setBuffer(this.buffer2);
assert.position(this.win.getSelection().getSelectionLead(), 1, 0);
},
"test: only changing the selection of the new doc should not have an effect" : function() {
this.editor.onSelectionChange = function() {
this.winController.onSelectionChange = function() {
called = true;
};
this.editor.setSession(this.session1);
this.editor.setSession(this.session2);
assert.position(this.editor.getSelection().getSelectionLead(), 0, 0);
this.win.setBuffer(this.buffer1);
this.win.setBuffer(this.buffer2);
assert.position(this.win.getSelection().getSelectionLead(), 0, 0);
var called = false;
this.session1.getSelection().selectTo(0, 1);
assert.position(this.editor.getSelection().getSelectionLead(), 0, 0);
this.buffer1.getSelection().selectTo(0, 1);
assert.position(this.win.getSelection().getSelectionLead(), 0, 0);
assert.notOk(called);
this.session2.getSelection().selectTo(1, 1);
assert.position(this.editor.getSelection().getSelectionLead(), 1, 1);
this.buffer2.getSelection().selectTo(1, 1);
assert.position(this.win.getSelection().getSelectionLead(), 1, 1);
assert.ok(called);
},
"test: should use mode of new document" : function() {
this.editor.onChangeMode = function() {
this.winController.view.updateText = function() {
called = true;
};
this.editor.setSession(this.session1);
this.editor.setSession(this.session2);
this.win.setBuffer(this.buffer1);
this.win.setBuffer(this.buffer2);
var called = false;
this.session1.setMode(new Text());
this.buffer1.setMode(new TextMode());
assert.notOk(called);
this.session2.setMode(new JavaScriptMode());
this.buffer2.setMode(new JavaScriptMode());
assert.ok(called);
}
};