From 85ed66edfe2140016eb5e75c83934c0cd8941f8e Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Wed, 17 Aug 2011 12:35:27 +0200 Subject: [PATCH] fix more unit tests --- ace/editor.js | 14 ++- ace/editor_text_edit_test.js | 66 +++++------ ace/keyboard/textinput.js | 13 ++- ace/model/buffer_test.js | 6 +- ace/model/window.js | 8 ++ .../window_navigation_test.js} | 2 +- ace/test/all_browser.js | 17 ++- ace/test/tests.html | 2 +- ace/view/window_view_mock.js | 6 +- ace/view/window_view_test.js | 4 +- ...ontroller_highlight_selected_word_test.js} | 0 ...ment_test.js => window_controller_test.js} | 103 +++++++++--------- 12 files changed, 129 insertions(+), 112 deletions(-) rename ace/{editor_navigation_test.js => model/window_navigation_test.js} (99%) rename ace/{editor_highlight_selected_word_test.js => window_controller_highlight_selected_word_test.js} (100%) rename ace/{editor_change_document_test.js => window_controller_test.js} (54%) diff --git a/ace/editor.js b/ace/editor.js index eeba1a33..437a4da4 100644 --- a/ace/editor.js +++ b/ace/editor.js @@ -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); }; diff --git a/ace/editor_text_edit_test.js b/ace/editor_text_edit_test.js index 156f49ef..f74884eb 100644 --- a/ace/editor_text_edit_test.js +++ b/ace/editor_text_edit_test.js @@ -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); diff --git a/ace/keyboard/textinput.js b/ace/keyboard/textinput.js index 6bcafc14..302639fa 100644 --- a/ace/keyboard/textinput.js +++ b/ace/keyboard/textinput.js @@ -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 diff --git a/ace/model/buffer_test.js b/ace/model/buffer_test.js index c14f9346..9ed5993c 100644 --- a/ace/model/buffer_test.js +++ b/ace/model/buffer_test.js @@ -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); diff --git a/ace/model/window.js b/ace/model/window.js index 4728d507..2d89b9c2 100644 --- a/ace/model/window.js +++ b/ace/model/window.js @@ -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; diff --git a/ace/editor_navigation_test.js b/ace/model/window_navigation_test.js similarity index 99% rename from ace/editor_navigation_test.js rename to ace/model/window_navigation_test.js index 296ffaae..f77d9d19 100644 --- a/ace/editor_navigation_test.js +++ b/ace/model/window_navigation_test.js @@ -36,7 +36,7 @@ * ***** END LICENSE BLOCK ***** */ if (typeof process !== "undefined") { - require("../support/paths"); + require("../../support/paths"); } define(function(require, exports, module) { diff --git a/ace/test/all_browser.js b/ace/test/all_browser.js index 5d69b3d4..7f2eb435 100644 --- a/ace/test/all_browser.js +++ b/ace/test/all_browser.js @@ -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) diff --git a/ace/test/tests.html b/ace/test/tests.html index 3b9ad89d..9b5e5bec 100644 --- a/ace/test/tests.html +++ b/ace/test/tests.html @@ -26,7 +26,7 @@