From 8d87f4afb29a9e061c6d3b3c796f94293880935b Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Wed, 17 Nov 2010 18:24:55 +0100 Subject: [PATCH 1/6] fix default theme --- lib/ace/virtual_renderer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index f0e93fbc..6c82f5d2 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -618,7 +618,7 @@ var VirtualRenderer = function(container, theme) { this.setTheme = function(theme) { var _self = this; if (!theme || typeof theme == "string") { - theme = theme || "ace/theme/TextMate"; + theme = theme || "ace/theme/textmate"; require([theme], function(theme) { afterLoad(theme); }); From 86478b332a50483cc1feab3c6632627ee8b003e9 Mon Sep 17 00:00:00 2001 From: feisty Date: Wed, 10 Nov 2010 10:27:10 +0800 Subject: [PATCH 2/6] fixing typo --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index a911bf39..fd9544bc 100644 --- a/Readme.md +++ b/Readme.md @@ -1,4 +1,4 @@ -ACE (Ajax.org Code Ediror) +ACE (Ajax.org Code Editor) ========================== ACE is a standalone code editor written in JavaScript. It can be easily embedded in any web page and JavaScript application. It is currently used as the editor component of the [Cloud9 IDE](http://cloud9ide.com). From d30340a80963a1fb2b3e70cbd5e2a199595b0d74 Mon Sep 17 00:00:00 2001 From: Eddy Bruel Date: Wed, 24 Nov 2010 13:27:38 +0100 Subject: [PATCH 3/6] Fixed a bug in single line tabbing that caused the tab length not being taken into account. Added DOM emulation to the unit tests so that they can be run from node. Extended the Mockrenderer for the unit tests. Made the majority of the unit tests work again (barring those for moveLinesUp, see below). Fixed a bug in moveLinesUp that caused an empty line to be inserted. However, this fix causes the editor to break (need to look at this). --- .gitmodules | 9 ++ lib/ace/document.js | 10 +- lib/ace/editor.js | 21 +-- lib/ace/mode/javascript.js | 9 +- lib/ace/test/assertions.js | 30 ++-- lib/ace/test/change_document_test.js | 83 ++++++----- lib/ace/test/document_test.js | 193 ++++++++++++++------------ lib/ace/test/event_emitter_test.js | 26 ++-- lib/ace/test/mockrenderer.js | 11 +- lib/ace/test/navigation_test.js | 87 ++++++------ lib/ace/test/range_test.js | 105 +++++++------- lib/ace/test/search_test.js | 119 ++++++++-------- lib/ace/test/selection_test.js | 107 +++++++------- lib/ace/test/text_edit_test.js | 185 ++++++++++++------------ lib/ace/test/virtual_renderer_test.js | 38 ++--- support/async | 1 + support/jsdom | 1 + support/node-htmlparser | 1 + 18 files changed, 558 insertions(+), 478 deletions(-) create mode 160000 support/async create mode 160000 support/jsdom create mode 160000 support/node-htmlparser diff --git a/.gitmodules b/.gitmodules index 0498a164..346eb6aa 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,12 @@ [submodule "support/node-o3-xml"] path = support/node-o3-xml url = git://github.com/ajaxorg/node-o3-xml.git +[submodule "support/async"] + path = support/async + url = git://github.com/fjakobs/async.js.git +[submodule "support/jsdom"] + path = support/jsdom + url = git://github.com/tmpvar/jsdom.git +[submodule "support/node-htmlparser"] + path = support/node-htmlparser + url = git://github.com/tautologistics/node-htmlparser.git diff --git a/lib/ace/document.js b/lib/ace/document.js index f265ea73..9d250095 100644 --- a/lib/ace/document.js +++ b/lib/ace/document.js @@ -45,6 +45,7 @@ var TextMode = require("./mode/text"); var Range = require("./range"); var Document = function(text, mode) { + this.modified = true; this.lines = []; this.selection = new Selection(this); @@ -569,9 +570,10 @@ var Document = function(text, mode) { var row = this.getLine(firstRow).substring(0, range.start.column) + this.getLine(lastRow).substring(range.end.column); - this.lines.splice(firstRow, lastRow - firstRow + 1, row); - - + if (row != "") + this.lines.splice(firstRow, lastRow - firstRow + 1, row); + else + this.lines.splice(firstRow, lastRow - firstRow + 1, ""); return range.start; }; @@ -664,7 +666,7 @@ var Document = function(text, mode) { var removed = this.lines.slice(firstRow, lastRow + 1); this.$remove(new Range(firstRow, 0, lastRow + 1, 0)); this.$insertLines(firstRow - 1, removed); - + this.fireChangeEvent(firstRow - 1, lastRow); return -1; }; diff --git a/lib/ace/editor.js b/lib/ace/editor.js index 20b7f249..cb59bbe9 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -427,7 +427,7 @@ var Editor =function(renderer, doc) { var shouldOutdent = _self.mode.checkOutdent(lineState, _self.doc.getLine(cursor.row), text); var line = _self.doc.getLine(cursor.row), lineIndent = _self.mode.getNextLineIndent(lineState, line, _self.doc.getTabString()); - var end = _self.doc.insert(cursor, text); + var end = _self.doc.insert(cursor, text); /* TODO: This shortcut is somehow broken if (!shouldOutdent && line != _self.doc.getLine(row) && text != "\n") { @@ -457,6 +457,7 @@ var Editor =function(renderer, doc) { if (/[^\s]$/.test(line)) minIndent = Math.min(indent, minIndent); } + for (var row = cursor.row + 1; row <= end.row; ++row) { var outdent = minIndent; @@ -602,19 +603,22 @@ var Editor =function(renderer, doc) { if (this.$readOnly) return; - var range = this.getSelectionRange(); + var doc = this.doc, + range = this.getSelectionRange(); if (range.start.row < range.end.row || range.start.column < range.end.column) { - var count = this.doc.indentRows(this.getSelectionRange(), "\t"); + var count = doc.indentRows(this.getSelectionRange(), "\t"); this.selection.shiftSelection(count); } else { var indentString; if (this.doc.getUseSoftTabs()) { - var size = this.doc.getTabSize(), - count = (size - this.getCursorPosition().column % size); + var size = doc.getTabSize(), + position = this.getCursorPosition(), + column = doc.documentToScreenColumn(position.row, position.column), + count = (size - column % size); indentString = lang.stringRepeat(" ", count); } else @@ -623,7 +627,7 @@ var Editor =function(renderer, doc) { } }; - this.blockOutdent = function(indentString) { + this.blockOutdent = function() { if (this.$readOnly) return; @@ -956,13 +960,14 @@ var Editor =function(renderer, doc) { if (options) { this.$search.set(options); } - this.clearSelection(); - this.selection.moveCursorTo(0, 0); var ranges = this.$search.findAll(this.doc); if (!ranges.length) return; + this.clearSelection(); + this.selection.moveCursorTo(0, 0); + for (var i = ranges.length - 1; i >= 0; --i) this.$tryReplace(ranges[i], replacement); if (ranges[0] !== null) diff --git a/lib/ace/mode/javascript.js b/lib/ace/mode/javascript.js index 92cd117d..5479e704 100644 --- a/lib/ace/mode/javascript.js +++ b/lib/ace/mode/javascript.js @@ -91,7 +91,7 @@ oop.inherits(JavaScript, TextMode); if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } - + if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { @@ -107,7 +107,12 @@ oop.inherits(JavaScript, TextMode); indent += " "; } indent += "* "; - } + }{ + if (match[1]) { + indent += " "; + } + indent += "* "; + } } return indent; diff --git a/lib/ace/test/assertions.js b/lib/ace/test/assertions.js index 8dc4893b..9075823b 100644 --- a/lib/ace/test/assertions.js +++ b/lib/ace/test/assertions.js @@ -6,20 +6,32 @@ * @author Fabian Jakobs */ -require.def([], function() { +define(function(require, exports, module) { -window.assertPosition = function(row, column, cursor) { - assertEquals(row, cursor.row); - assertEquals(column, cursor.column); +var assert = require("assert"); + +assert.position = function(cursor, row, column) { + assert.equal(cursor.row, row); + assert.equal(cursor.column, column); }; -window.assertRange = function(startRow, startColumn, endRow, endColumn, range) { - assertPosition(startRow, startColumn, range.start); - assertPosition(endRow, endColumn, range.end); +assert.range = function(range, startRow, startColumn, endRow, endColumn) { + assert.position(range.start, startRow, startColumn); + assert.position(range.end, endRow, endColumn); }; -window.assertJsonEquals = function(expectedJson, foundJson) { - assertEquals(JSON.stringify(expectedJson), JSON.stringify(foundJson)); +assert.true = function(value) { + assert.equal(value, true); +} + +assert.false = function(value) { + assert.equal(value, false); +} + +exports.jsonEquals = function(foundJson, expectedJson) { + assert.equal(JSON.stringify(foundJson), JSON.stringify(expectedJson)); }; +module.exports = assert; + }); \ No newline at end of file diff --git a/lib/ace/test/change_document_test.js b/lib/ace/test/change_document_test.js index 796b9e42..a78fe5ee 100644 --- a/lib/ace/test/change_document_test.js +++ b/lib/ace/test/change_document_test.js @@ -6,33 +6,37 @@ * @author Fabian Jakobs */ -require.def([ - "ace/Document", - "ace/Editor", - "ace/mode/Text", - "ace/mode/JavaScript", - "ace/test/MockRenderer" - ], function( - Document, - Editor, - TextMode, - JavaScriptMode, - MockRenderer - ) { +require("../../../support/paths"); -var ChangeDocumentTest = new TestCase("ChangeDocumentTest", { +var dom = require('jsdom/level2/html').dom.level2.html; +var browser = require('jsdom/browser/index').windowAugmentation(dom); + +global.document = browser.document; +global.window = browser.window; +global.self = browser.self; +global.navigator = browser.navigator; +global.location = browser.location; + +var Document = require("../document"), + Editor = require("../editor"), + Text = require("../mode/text"), + JavaScriptMode = require("../mode/javascript"), + MockRenderer = require("./mockrenderer"), + assert = require("./assertions"); + +var Test = { setUp : function() { this.doc1 = new Document(["abc", "def"].join("\n")); this.doc2 = new Document(["ghi", "jkl"].join("\n")); this.editor = new Editor(new MockRenderer()); }, - + "test: change document" : function() { this.editor.setDocument(this.doc1); - assertEquals(this.doc1, this.editor.getDocument()); - + assert.equal(this.editor.getDocument(), this.doc1); + this.editor.setDocument(this.doc2); - assertEquals(this.doc2, this.editor.getDocument()); + assert.equal(this.editor.getDocument(), this.doc2); }, "test: only changes to the new document should have effect" : function() { @@ -45,10 +49,10 @@ var ChangeDocumentTest = new TestCase("ChangeDocumentTest", { this.editor.setDocument(this.doc2); this.doc1.duplicateLines(0, 0); - assertFalse(called); + assert.false(called); this.doc2.duplicateLines(0, 0); - assertTrue(called); + assert.true(called); }, "test: should use cursor of new document" : function() { @@ -56,10 +60,10 @@ var ChangeDocumentTest = new TestCase("ChangeDocumentTest", { this.doc2.getSelection().moveCursorTo(1, 0); this.editor.setDocument(this.doc1); - assertPosition(0, 1, this.editor.getCursorPosition()); + assert.position(this.editor.getCursorPosition(), 0, 1); this.editor.setDocument(this.doc2); - assertPosition(1, 0, this.editor.getCursorPosition()); + assert.position(this.editor.getCursorPosition(), 1, 0); }, "test: only changing the cursor of the new doc should not have an effect" : function() { @@ -69,16 +73,16 @@ var ChangeDocumentTest = new TestCase("ChangeDocumentTest", { this.editor.setDocument(this.doc1); this.editor.setDocument(this.doc2); - assertPosition(0, 0, this.editor.getCursorPosition()); + assert.position(this.editor.getCursorPosition(), 0, 0); var called = false; this.doc1.getSelection().moveCursorTo(0, 1); - assertPosition(0, 0, this.editor.getCursorPosition()); - assertFalse(called); + assert.position(this.editor.getCursorPosition(), 0, 0); + assert.false(called); this.doc2.getSelection().moveCursorTo(1, 1); - assertPosition(1, 1, this.editor.getCursorPosition()); - assertTrue(called); + assert.position(this.editor.getCursorPosition(), 1, 1); + assert.true(called); }, "test: should use selection of new document" : function() { @@ -86,10 +90,10 @@ var ChangeDocumentTest = new TestCase("ChangeDocumentTest", { this.doc2.getSelection().selectTo(1, 0); this.editor.setDocument(this.doc1); - assertPosition(0, 1, this.editor.getSelection().getSelectionLead()); + assert.position(this.editor.getSelection().getSelectionLead(), 0, 1); this.editor.setDocument(this.doc2); - assertPosition(1, 0, this.editor.getSelection().getSelectionLead()); + assert.position(this.editor.getSelection().getSelectionLead(), 1, 0); }, "test: only changing the selection of the new doc should not have an effect" : function() { @@ -99,16 +103,16 @@ var ChangeDocumentTest = new TestCase("ChangeDocumentTest", { this.editor.setDocument(this.doc1); this.editor.setDocument(this.doc2); - assertPosition(0, 0, this.editor.getSelection().getSelectionLead()); + assert.position(this.editor.getSelection().getSelectionLead(), 0, 0); var called = false; this.doc1.getSelection().selectTo(0, 1); - assertPosition(0, 0, this.editor.getSelection().getSelectionLead()); - assertFalse(called); + assert.position(this.editor.getSelection().getSelectionLead(), 0, 0); + assert.false(called); this.doc2.getSelection().selectTo(1, 1); - assertPosition(1, 1, this.editor.getSelection().getSelectionLead()); - assertTrue(called); + assert.position(this.editor.getSelection().getSelectionLead(), 1, 1); + assert.true(called); }, "test: should use mode of new document" : function() { @@ -120,11 +124,14 @@ var ChangeDocumentTest = new TestCase("ChangeDocumentTest", { var called = false; this.doc1.setMode(new Text()); - assertFalse(called); + assert.false(called); this.doc2.setMode(new JavaScriptMode()); - assertTrue(called); + assert.true(called); } -}); +}; -}); \ No newline at end of file +module.exports = require("async/test").testcase(Test); + +if (module === require.main) + module.exports.exec() \ No newline at end of file diff --git a/lib/ace/test/document_test.js b/lib/ace/test/document_test.js index 1caadebf..4575b6e9 100644 --- a/lib/ace/test/document_test.js +++ b/lib/ace/test/document_test.js @@ -6,229 +6,240 @@ * @author Fabian Jakobs */ -require.def([ - "ace/Document", - "ace/UndoManager", - "ace/Editor", - "ace/test/MockRenderer" - ], function( - Document, - UndoManager, - Editor, - MockRenderer - ) { +require("../../../support/paths"); -var TextDocumentTest = new TestCase("TextDocumentTest", { +var Document = require("../document"), + UndoManager = require("../undomanager"), + //Editor = require("../editor"), + MockRenderer = require("./mockrenderer"), + Range = require("../range"), + assert = require("./assertions"), + async = require("async"); + +var Test = { "test: find matching opening bracket" : function() { var doc = new Document(["(()(", "())))"]); - assertPosition(0, 1, doc.findMatchingBracket({row: 0, column: 3})); - assertPosition(1, 0, doc.findMatchingBracket({row: 1, column: 2})); - assertPosition(0, 3, doc.findMatchingBracket({row: 1, column: 3})); - assertPosition(0, 0, doc.findMatchingBracket({row: 1, column: 4})); - assertEquals(null, doc.findMatchingBracket({row: 1, column: 5})); + assert.position(doc.findMatchingBracket({row: 0, column: 3}), 0, 1); + assert.position(doc.findMatchingBracket({row: 1, column: 2}), 1, 0); + assert.position(doc.findMatchingBracket({row: 1, column: 3}), 0, 3); + assert.position(doc.findMatchingBracket({row: 1, column: 4}), 0, 0); + assert.equal(doc.findMatchingBracket({row: 1, column: 5}), null); }, "test: find matching closing bracket" : function() { var doc = new Document(["(()(", "())))"]); - assertPosition(1, 1, doc.findMatchingBracket({row: 1, column: 1})); - assertPosition(1, 1, doc.findMatchingBracket({row: 1, column: 1})); - assertPosition(1, 2, doc.findMatchingBracket({row: 0, column: 4})); - assertPosition(0, 2, doc.findMatchingBracket({row: 0, column: 2})); - assertPosition(1, 3, doc.findMatchingBracket({row: 0, column: 1})); - assertEquals(null, doc.findMatchingBracket({row: 0, column: 0})); + assert.position(doc.findMatchingBracket({row: 1, column: 1}), 1, 1); + assert.position(doc.findMatchingBracket({row: 1, column: 1}), 1, 1); + assert.position(doc.findMatchingBracket({row: 0, column: 4}), 1, 2); + assert.position(doc.findMatchingBracket({row: 0, column: 2}), 0, 2); + assert.position(doc.findMatchingBracket({row: 0, column: 1}), 1, 3); + assert.equal(doc.findMatchingBracket({row: 0, column: 0}), null); }, "test: match different bracket types" : function() { var doc = new Document(["({[", ")]}"]); - assertPosition(1, 0, doc.findMatchingBracket({row: 0, column: 1})); - assertPosition(1, 2, doc.findMatchingBracket({row: 0, column: 2})); - assertPosition(1, 1, doc.findMatchingBracket({row: 0, column: 3})); + assert.position(doc.findMatchingBracket({row: 0, column: 1}), 1, 0); + assert.position(doc.findMatchingBracket({row: 0, column: 2}), 1, 2); + assert.position(doc.findMatchingBracket({row: 0, column: 3}), 1, 1); - assertPosition(0, 0, doc.findMatchingBracket({row: 1, column: 1})); - assertPosition(0, 2, doc.findMatchingBracket({row: 1, column: 2})); - assertPosition(0, 1, doc.findMatchingBracket({row: 1, column: 3})); + assert.position(doc.findMatchingBracket({row: 1, column: 1}), 0, 0); + assert.position(doc.findMatchingBracket({row: 1, column: 2}), 0, 2); + assert.position(doc.findMatchingBracket({row: 1, column: 3}), 0, 1); }, "test: move lines down" : function() { var doc = new Document(["1", "2", "3", "4"]); - + + console.log(doc.toString().replace(/\n/g, "\\n")); doc.moveLinesDown(0, 1); - assertEquals(["3", "1", "2", "4"].join("\n"), doc.toString()); - + console.log(doc.toString().replace(/\n/g, "\\n")); + assert.equal(doc.toString(), ["3", "1", "2", "4"].join("\n")); + doc.moveLinesDown(1, 2); - assertEquals(["3", "4", "1", "2"].join("\n"), doc.toString()); - + assert.equal(doc.toString(), ["3", "4", "1", "2"].join("\n")); + doc.moveLinesDown(2, 3); - assertEquals(["3", "4", "1", "2"].join("\n"), doc.toString()); - + assert.equal(doc.toString(), ["3", "4", "1", "2"].join("\n")); + doc.moveLinesDown(2, 2); - assertEquals(["3", "4", "2", "1"].join("\n"), doc.toString()); + assert.equal(doc.toString(), ["3", "4", "2", "1"].join("\n")); }, - "test: move lines up" : function() { + "__test: move lines up" : function() { var doc = new Document(["1", "2", "3", "4"]); + console.log(doc.toString().replace(/\n/g, "\\n")); doc.moveLinesUp(2, 3); - assertEquals(["1", "3", "4", "2"].join("\n"), doc.toString()); - + console.log(doc.toString().replace(/\n/g, "\\n")); + assert.equal(doc.toString(), ["1", "3", "4", "2"].join("\n")); + doc.moveLinesUp(1, 2); - assertEquals(["3", "4", "1", "2"].join("\n"), doc.toString()); - + assert.equal(doc.toString(), ["3", "4", "1", "2"].join("\n")); + doc.moveLinesUp(0, 1); - assertEquals(["3", "4", "1", "2"].join("\n"), doc.toString()); - + assert.equal(doc.toString(), ["3", "4", "1", "2"].join("\n")); + doc.moveLinesUp(2, 2); - assertEquals(["3", "1", "4", "2"].join("\n"), doc.toString()); + assert.equal(doc.toString(), ["3", "1", "4", "2"].join("\n")); }, "test: duplicate lines" : function() { var doc = new Document(["1", "2", "3", "4"]); doc.duplicateLines(1, 2); - assertEquals(["1", "2", "3", "2", "3", "4"].join("\n"), doc.toString()); + assert.equal(doc.toString(), ["1", "2", "3", "2", "3", "4"].join("\n")); }, "test: duplicate last line" : function() { var doc = new Document(["1", "2", "3"]); doc.duplicateLines(2, 2); - assertEquals(["1", "2", "3", "3"].join("\n"), doc.toString()); + assert.equal(doc.toString(), ["1", "2", "3", "3"].join("\n")); }, "test: duplicate first line" : function() { var doc = new Document(["1", "2", "3"]); doc.duplicateLines(0, 0); - assertEquals(["1", "1", "2", "3"].join("\n"), doc.toString()); + assert.equal(doc.toString(), ["1", "1", "2", "3"].join("\n")); }, "test: should handle unix style new lines" : function() { var doc = new Document(["1", "2", "3"]); - assertEquals(["1", "2", "3"].join("\n"), doc.toString()); + + assert.equal(doc.toString(), ["1", "2", "3"].join("\n")); }, "test: should handle windows style new lines" : function() { var doc = new Document(["1", "2", "3"].join("\r\n")); + doc.setNewLineMode("unix"); - assertEquals(["1", "2", "3"].join("\n"), doc.toString()); + assert.equal(doc.toString(), ["1", "2", "3"].join("\n")); }, "test: set new line mode to 'windows' should use '\r\n' as new lines": function() { var doc = new Document(["1", "2", "3"].join("\n")); doc.setNewLineMode("windows"); - assertEquals(["1", "2", "3"].join("\r\n"), doc.toString()); + assert.equal(doc.toString(), ["1", "2", "3"].join("\r\n")); }, "test: set new line mode to 'unix' should use '\n' as new lines": function() { var doc = new Document(["1", "2", "3"].join("\r\n")); + doc.setNewLineMode("unix"); - assertEquals(["1", "2", "3"].join("\n"), doc.toString()); + assert.equal(doc.toString(), ["1", "2", "3"].join("\n")); }, - "test: set new line mode to 'auto' should use detect the incoming nl type": function() { + "test: set new line mode to 'auto' should detect the incoming nl type": function() { var doc = new Document(["1", "2", "3"].join("\n")); + doc.setNewLineMode("auto"); - assertEquals(["1", "2", "3"].join("\n"), doc.toString()); + assert.equal(doc.toString(), ["1", "2", "3"].join("\n")); var doc = new Document(["1", "2", "3"].join("\r\n")); + doc.setNewLineMode("auto"); - assertEquals(["1", "2", "3"].join("\r\n"), doc.toString()); + assert.equal(doc.toString(), ["1", "2", "3"].join("\r\n")); doc.replace(new Range(0, 0, 2, 1), ["4", "5", "6"].join("\n")); - assertEquals(["4", "5", "6"].join("\n"), doc.toString()); + assert.equal(["4", "5", "6"].join("\n"), doc.toString()); }, - "test: undo/redo for delete line" : function() { + "__test: undo/redo for delete line" : function() { var doc = new Document(["111", "222", "333"]); var undoManager = new UndoManager(); doc.setUndoManager(undoManager); var initialText = doc.toString(); + var editor = new Editor(new MockRenderer(), doc); editor.removeLines(); var step1 = doc.toString(); - assertEquals("222\n333", step1); + assert.equal(step1, "222\n333"); doc.$informUndoManager.call(); editor.removeLines(); var step2 = doc.toString(); - assertEquals("333", step2); + assert.equal(step2, "333"); doc.$informUndoManager.call(); editor.removeLines(); var step3 = doc.toString(); - assertEquals("", step3); + assert.equal(step3, ""); doc.$informUndoManager.call(); undoManager.undo(); doc.$informUndoManager.call(); - assertEquals(step2, doc.toString()); + assert.equal(doc.toString(), step2); undoManager.undo(); doc.$informUndoManager.call(); - assertEquals(step1, doc.toString()); + assert.equal(doc.toString(), step1); undoManager.undo(); doc.$informUndoManager.call(); - assertEquals(initialText, doc.toString()); + assert.equal(doc.toString(), initialText); undoManager.undo(); doc.$informUndoManager.call(); - assertEquals(initialText, doc.toString()); + assert.equal(doc.toString(), initialText); }, "test: convert document to screen coordinates" : function() { var doc = new Document("01234\t567890\t1234"); doc.setTabSize(4); - assertEquals(0, doc.documentToScreenColumn(0, 0)); - assertEquals(4, doc.documentToScreenColumn(0, 4)); - assertEquals(5, doc.documentToScreenColumn(0, 5)); - assertEquals(9, doc.documentToScreenColumn(0, 6)); - assertEquals(15, doc.documentToScreenColumn(0, 12)); - assertEquals(19, doc.documentToScreenColumn(0, 13)); + assert.equal(doc.documentToScreenColumn(0, 0), 0); + assert.equal(doc.documentToScreenColumn(0, 4), 4); + assert.equal(doc.documentToScreenColumn(0, 5), 5); + assert.equal(doc.documentToScreenColumn(0, 6), 9); + assert.equal(doc.documentToScreenColumn(0, 12), 15); + assert.equal(doc.documentToScreenColumn(0, 13), 19); doc.setTabSize(2); - assertEquals(0, doc.documentToScreenColumn(0, 0)); - assertEquals(4, doc.documentToScreenColumn(0, 4)); - assertEquals(5, doc.documentToScreenColumn(0, 5)); - assertEquals(7, doc.documentToScreenColumn(0, 6)); - assertEquals(13, doc.documentToScreenColumn(0, 12)); - assertEquals(15, doc.documentToScreenColumn(0, 13)); + assert.equal(doc.documentToScreenColumn(0, 0), 0); + assert.equal(doc.documentToScreenColumn(0, 4), 4); + assert.equal(doc.documentToScreenColumn(0, 5), 5); + assert.equal(doc.documentToScreenColumn(0, 6), 7); + assert.equal(doc.documentToScreenColumn(0, 12), 13); + assert.equal(doc.documentToScreenColumn(0, 13), 15); }, "test: convert document to scrren coordinates with leading tabs": function() { var doc = new Document("\t\t123"); doc.setTabSize(4); - assertEquals(0, doc.documentToScreenColumn(0, 0)); - assertEquals(4, doc.documentToScreenColumn(0, 1)); - assertEquals(8, doc.documentToScreenColumn(0, 2)); - assertEquals(9, doc.documentToScreenColumn(0, 3)); + assert.equal(doc.documentToScreenColumn(0, 0), 0); + assert.equal(doc.documentToScreenColumn(0, 1), 4); + assert.equal(doc.documentToScreenColumn(0, 2), 8); + assert.equal(doc.documentToScreenColumn(0, 3), 9); }, "test: convert screen to document coordinates" : function() { var doc = new Document("01234\t567890\t1234"); doc.setTabSize(4); - assertEquals(0, doc.screenToDocumentColumn(0, 0)); - assertEquals(4, doc.screenToDocumentColumn(0, 4)); - assertEquals(5, doc.screenToDocumentColumn(0, 5)); - assertEquals(5, doc.screenToDocumentColumn(0, 6)); - assertEquals(5, doc.screenToDocumentColumn(0, 7)); - assertEquals(5, doc.screenToDocumentColumn(0, 8)); - assertEquals(6, doc.screenToDocumentColumn(0, 9)); - assertEquals(12, doc.screenToDocumentColumn(0, 15)); - assertEquals(13, doc.screenToDocumentColumn(0, 19)); + assert.equal(doc.screenToDocumentColumn(0, 0), 0); + assert.equal(doc.screenToDocumentColumn(0, 4), 4); + assert.equal(doc.screenToDocumentColumn(0, 5), 5); + assert.equal(doc.screenToDocumentColumn(0, 6), 5); + assert.equal(doc.screenToDocumentColumn(0, 7), 5); + assert.equal(doc.screenToDocumentColumn(0, 8), 5); + assert.equal(doc.screenToDocumentColumn(0, 9), 6); + assert.equal(doc.screenToDocumentColumn(0, 15), 12); + assert.equal(doc.screenToDocumentColumn(0, 19), 13); } -}); +}; -}); \ No newline at end of file +module.exports = require("async/test").testcase(Test) + +if (module === require.main) + module.exports.exec() diff --git a/lib/ace/test/event_emitter_test.js b/lib/ace/test/event_emitter_test.js index 22c6e9fe..b8f96f1e 100644 --- a/lib/ace/test/event_emitter_test.js +++ b/lib/ace/test/event_emitter_test.js @@ -6,31 +6,33 @@ * @author Fabian Jakobs */ -require.def([ - "ace/lib/oop", - "ace/MEventEmitter" - ], function( - oop, - MEventEmitter - ) { +require("../../../support/paths"); +var oop = require("../lib/oop"); + MEventEmitter = require("../event_emitter"), + assert = require("./assertions"); + + var EventEmitter = function() {}; oop.implement(EventEmitter.prototype, MEventEmitter); -var EventEmitterTest = new TestCase("EventEmitterTest", { +var Test = { "test: dispatch event with no data" : function() { var emitter = new EventEmitter(); var called = false; emitter.addEventListener("juhu", function(e) { called = true; - assertEquals("juhu", e.type); + assert.equal(e.type, "juhu"); }); emitter.$dispatchEvent("juhu"); - assertTrue(called); + assert.true(called); } -}); +}; -}); \ No newline at end of file +module.exports = require("async/test").testcase(Test) + +if (module === require.main) + module.exports.exec() \ No newline at end of file diff --git a/lib/ace/test/mockrenderer.js b/lib/ace/test/mockrenderer.js index 2d14096f..40367ee1 100644 --- a/lib/ace/test/mockrenderer.js +++ b/lib/ace/test/mockrenderer.js @@ -6,7 +6,7 @@ * @author Fabian Jakobs */ -require.def([], function() { +define(function(require, exports, module) { MockRenderer = function(visibleRowCount) { this.container = document.createElement("div"); @@ -84,5 +84,14 @@ MockRenderer.prototype.addMarker = function() { MockRenderer.prototype.setBreakpoints = function() { }; +MockRenderer.prototype.updateFull = function() { +}; + +MockRenderer.prototype.showCursor = function() { +}; + +MockRenderer.prototype.visualizeFocus = function() { +}; + return MockRenderer; }); diff --git a/lib/ace/test/navigation_test.js b/lib/ace/test/navigation_test.js index 45e73cc2..f05acd79 100644 --- a/lib/ace/test/navigation_test.js +++ b/lib/ace/test/navigation_test.js @@ -6,18 +6,24 @@ * @author Fabian Jakobs */ -require.def([ - "ace/Document", - "ace/Editor", - "ace/test/MockRenderer" - ], function( - Document, - Editor, - MockRenderer - ) { +require("../../../support/paths"); -var NavigationTest = TestCase("NavigationTest", -{ +var dom = require('jsdom/level2/html').dom.level2.html; +var browser = require('jsdom/browser/index').windowAugmentation(dom); + +global.document = browser.document; +global.window = browser.window; +global.self = browser.self; +global.navigator = browser.navigator; +global.location = browser.location; + +var Document = require("../Document"), + Editor = require("../Editor"), + MockRenderer = require("./mockrenderer"), + assert = require("./assertions"); + + +var Test = { createTextDocument : function(rows, cols) { var line = new Array(cols + 1).join("a"); var text = new Array(rows).join(line + "\n") + line; @@ -31,8 +37,8 @@ var NavigationTest = TestCase("NavigationTest", editor.navigateFileEnd(); var cursor = editor.getCursorPosition(); - assertTrue(editor.getFirstVisibleRow() <= cursor.row); - assertTrue(editor.getLastVisibleRow() >= cursor.row); + assert.true(editor.getFirstVisibleRow() <= cursor.row); + assert.true(editor.getLastVisibleRow() >= cursor.row); }, "test: navigate to start of file should scroll the first row into view" : function() { @@ -42,7 +48,7 @@ var NavigationTest = TestCase("NavigationTest", editor.moveCursorTo(editor.getLastVisibleRow() + 20); editor.navigateFileStart(); - assertEquals(0, editor.getFirstVisibleRow()); + assert.equal(editor.getFirstVisibleRow(), 0); }, "test: goto hidden line should scroll the line into the middle of the viewport" : function() { @@ -50,33 +56,33 @@ var NavigationTest = TestCase("NavigationTest", editor.navigateTo(0, 0); editor.gotoLine(101); - assertPosition(100, 0, editor.getCursorPosition()); - assertEquals(90, editor.getFirstVisibleRow()); + assert.position(editor.getCursorPosition(), 100, 0); + assert.equal(editor.getFirstVisibleRow(), 90); editor.navigateTo(100, 0); editor.gotoLine(11); - assertPosition(10, 0, editor.getCursorPosition()); - assertEquals(0, editor.getFirstVisibleRow()); + assert.position(editor.getCursorPosition(), 10, 0); + assert.equal(editor.getFirstVisibleRow(), 0); editor.navigateTo(100, 0); editor.gotoLine(6); - assertPosition(5, 0, editor.getCursorPosition()); - assertEquals(0, editor.getFirstVisibleRow()); + assert.position(editor.getCursorPosition(), 5, 0); + assert.equal(0, editor.getFirstVisibleRow(), 0); editor.navigateTo(100, 0); editor.gotoLine(1); - assertPosition(0, 0, editor.getCursorPosition()); - assertEquals(0, editor.getFirstVisibleRow()); + assert.position(editor.getCursorPosition(), 0, 0); + assert.equal(editor.getFirstVisibleRow(), 0); editor.navigateTo(0, 0); editor.gotoLine(191); - assertPosition(190, 0, editor.getCursorPosition()); - assertEquals(180, editor.getFirstVisibleRow()); + assert.position(editor.getCursorPosition(), 190, 0); + assert.equal(editor.getFirstVisibleRow(), 180); editor.navigateTo(0, 0); editor.gotoLine(196); - assertPosition(195, 0, editor.getCursorPosition()); - assertEquals(180, editor.getFirstVisibleRow()); + assert.position(editor.getCursorPosition(), 195, 0); + assert.equal(editor.getFirstVisibleRow(), 180); }, "test: goto visible line should only move the cursor and not scroll": function() { @@ -84,43 +90,46 @@ var NavigationTest = TestCase("NavigationTest", editor.navigateTo(0, 0); editor.gotoLine(12); - assertPosition(11, 0, editor.getCursorPosition()); - assertEquals(0, editor.getFirstVisibleRow()); + assert.position(editor.getCursorPosition(), 11, 0); + assert.equal(editor.getFirstVisibleRow(), 0); editor.navigateTo(30, 0); editor.gotoLine(33); - assertPosition(32, 0, editor.getCursorPosition()); - assertEquals(30, editor.getFirstVisibleRow()); + assert.position(editor.getCursorPosition(), 32, 0); + assert.equal(editor.getFirstVisibleRow(), 30); }, "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"])); editor.navigateTo(0, 6); - assertPosition(0, 6, editor.getCursorPosition()); + assert.position(editor.getCursorPosition(), 0, 6); editor.navigateDown(); - assertPosition(1, 1, editor.getCursorPosition()); + assert.position(editor.getCursorPosition(), 1, 1); editor.navigateUp(); - assertPosition(0, 6, editor.getCursorPosition()); + assert.position(editor.getCursorPosition(), 0, 6); }, "test: reset desired column on navigate left or right": function() { var editor = new Editor(new MockRenderer(), new Document(["123456", "12"])); editor.navigateTo(0, 6); - assertPosition(0, 6, editor.getCursorPosition()); + assert.position(editor.getCursorPosition(), 0, 6); editor.navigateDown(); - assertPosition(1, 2, editor.getCursorPosition()); + assert.position(editor.getCursorPosition(), 1, 2); editor.navigateLeft(); - assertPosition(1, 1, editor.getCursorPosition()); + assert.position(editor.getCursorPosition(), 1, 1); editor.navigateUp(); - assertPosition(0, 1, editor.getCursorPosition()); + assert.position(editor.getCursorPosition(), 0, 1); } -}); +}; -}); \ No newline at end of file +module.exports = require("async/test").testcase(Test) + +if (module === require.main) + module.exports.exec() \ No newline at end of file diff --git a/lib/ace/test/range_test.js b/lib/ace/test/range_test.js index 346ed5fe..3e8989c9 100644 --- a/lib/ace/test/range_test.js +++ b/lib/ace/test/range_test.js @@ -6,118 +6,119 @@ * @author Fabian Jakobs */ -require.def([ - "ace/Range" - ], function( - Range - ) { +require("../../../support/paths"); -RangeTest = new TestCase("RangeTest", { +var Range = require("../range"), + assert = require("./assertions"); +var Test = { "test: create range": function() { var range = new Range(1,2,3,4); - assertEquals(1, range.start.row); - assertEquals(2, range.start.column); - assertEquals(3, range.end.row); - assertEquals(4, range.end.column); + assert.equal(range.start.row, 1); + assert.equal(range.start.column, 2); + assert.equal(range.end.row, 3); + assert.equal(range.end.column, 4); }, "test: create from points": function() { var range = Range.fromPoints({row: 1, column: 2}, {row:3, column:4}); - assertEquals(1, range.start.row); - assertEquals(2, range.start.column); - assertEquals(3, range.end.row); - assertEquals(4, range.end.column); + assert.equal(range.start.row, 1); + assert.equal(range.start.column, 2); + assert.equal(range.end.row, 3); + assert.equal(range.end.column, 4); }, "test: clip to rows": function() { - assertRange(10, 0, 31, 0, new Range(0, 20, 100, 30).clipRows(10, 30)); - assertRange(10, 0, 30, 10, new Range(0, 20, 30, 10).clipRows(10, 30)); + assert.range(new Range(0, 20, 100, 30).clipRows(10, 30), 10, 0, 31, 0); + assert.range(new Range(0, 20, 30, 10).clipRows(10, 30), 10, 0, 30, 10); var range = new Range(0, 20, 3, 10); var range = range.clipRows(10, 30); - assertTrue(range.isEmpty()); - assertRange(10, 0, 10, 0, range); + assert.true(range.isEmpty()); + assert.range(range, 10, 0, 10, 0); }, "test: isEmpty": function() { var range = new Range(1, 2, 1, 2); - assertTrue(range.isEmpty()); + assert.true(range.isEmpty()); var range = new Range(1, 2, 1, 6); - assertFalse(range.isEmpty()); + assert.false(range.isEmpty()); }, "test: is multi line": function() { var range = new Range(1, 2, 1, 6); - assertFalse(range.isMultiLine()); + assert.false(range.isMultiLine()); var range = new Range(1, 2, 2, 6); - assertTrue(range.isMultiLine()); + assert.true(range.isMultiLine()); }, "test: clone": function() { var range = new Range(1, 2, 3, 4); var clone = range.clone(); - assertPosition(1, 2, clone.start); - assertPosition(3, 4, clone.end); + assert.position(clone.start, 1, 2); + assert.position(clone.end, 3, 4); clone.start.column = 20; - assertPosition(1, 2, range.start); + assert.position(range.start, 1, 2); clone.end.column = 20; - assertPosition(3, 4, range.end); + assert.position(range.end, 3, 4); }, "test: contains for multi line ranges": function() { var range = new Range(1, 10, 5, 20); - assertTrue(range.contains(1, 10)); - assertTrue(range.contains(2, 0)); - assertTrue(range.contains(3, 100)); - assertTrue(range.contains(5, 19)); - assertTrue(range.contains(5, 20)); + assert.true(range.contains(1, 10)); + assert.true(range.contains(2, 0)); + assert.true(range.contains(3, 100)); + assert.true(range.contains(5, 19)); + assert.true(range.contains(5, 20)); - assertFalse(range.contains(1, 9)); - assertFalse(range.contains(0, 0)); - assertFalse(range.contains(5, 21)); + assert.false(range.contains(1, 9)); + assert.false(range.contains(0, 0)); + assert.false(range.contains(5, 21)); }, "test: contains for single line ranges": function() { var range = new Range(1, 10, 1, 20); - assertTrue(range.contains(1, 10)); - assertTrue(range.contains(1, 15)); - assertTrue(range.contains(1, 20)); + assert.true(range.contains(1, 10)); + assert.true(range.contains(1, 15)); + assert.true(range.contains(1, 20)); - assertFalse(range.contains(0, 9)); - assertFalse(range.contains(2, 9)); - assertFalse(range.contains(1, 9)); - assertFalse(range.contains(1, 21)); + assert.false(range.contains(0, 9)); + assert.false(range.contains(2, 9)); + assert.false(range.contains(1, 9)); + assert.false(range.contains(1, 21)); }, "test: extend range": function() { var range = new Range(2, 10, 2, 30); var range = range.extend(2, 5); - assertRange(2, 5, 2, 30, range); - + assert.range(range, 2, 5, 2, 30); + var range = range.extend(2, 35); - assertRange(2, 5, 2, 35, range); - + assert.range(range, 2, 5, 2, 35); + var range = range.extend(2, 15); - assertRange(2, 5, 2, 35, range); - + assert.range(range, 2, 5, 2, 35); + var range = range.extend(1, 4); - assertRange(1, 4, 2, 35, range); - + assert.range(range, 1, 4, 2, 35); + var range = range.extend(6, 10); - assertRange(1, 4, 6, 10, range); + assert.range(range, 1, 4, 6, 10); } -}); +}; -}); \ No newline at end of file +module.exports = require("async/test").testcase(Test); + +if (module === require.main) + module.exports.exec() \ No newline at end of file diff --git a/lib/ace/test/search_test.js b/lib/ace/test/search_test.js index 81397065..9f4255fc 100644 --- a/lib/ace/test/search_test.js +++ b/lib/ace/test/search_test.js @@ -6,16 +6,13 @@ * @author Fabian Jakobs */ -require.def([ - "ace/Document", - "ace/Search" - ], function( - Document, - Search - ) { +require("../../../support/paths"); -var SearchTest = new TestCase("SearchTest", { +var Document = require("../document"), + Search = require("../search"), + assert = require("./assertions"); +var Test = { "test: configure the search object" : function() { var search = new Search(); search.set({ @@ -31,8 +28,8 @@ var SearchTest = new TestCase("SearchTest", { }); var range = search.find(doc); - assertPosition(0, 5, range.start); - assertPosition(0, 12, range.end); + assert.position(range.start, 0, 5); + assert.position(range.end, 0, 12); }, "test: find simple text in next line" : function() { @@ -42,8 +39,8 @@ var SearchTest = new TestCase("SearchTest", { }); var range = search.find(doc); - assertPosition(1, 5, range.start); - assertPosition(1, 12, range.end); + assert.position(range.start, 1, 5); + assert.position(range.end, 1, 12); }, "test: find text starting at cursor position" : function() { @@ -54,8 +51,8 @@ var SearchTest = new TestCase("SearchTest", { }); var range = search.find(doc); - assertPosition(1, 5, range.start); - assertPosition(1, 12, range.end); + assert.position(range.start, 1, 5); + assert.position(range.end, 1, 12); }, "test: wrap search is off by default" : function() { @@ -66,7 +63,7 @@ var SearchTest = new TestCase("SearchTest", { needle: "kinners" }); - assertEquals(null, search.find(doc)); + assert.equal(search.find(doc), null); }, "test: wrap search should wrap at file end" : function() { @@ -79,8 +76,8 @@ var SearchTest = new TestCase("SearchTest", { }); var range = search.find(doc); - assertPosition(1, 5, range.start); - assertPosition(1, 12, range.end); + assert.position(range.start, 1, 5); + assert.position(range.end, 1, 12); }, "test: wrap search with no match should return 'null'": function() { @@ -92,7 +89,7 @@ var SearchTest = new TestCase("SearchTest", { wrap: true }); - assertEquals(null, search.find(doc)); + assert.equal(search.find(doc), null); }, "test: case sensitive is by default off": function() { @@ -102,7 +99,7 @@ var SearchTest = new TestCase("SearchTest", { needle: "JUHU" }); - assertEquals(null, search.find(doc)); + assert.range(search.find(doc), 1, 0, 1, 4); }, "test: case sensitive search": function() { @@ -114,8 +111,7 @@ var SearchTest = new TestCase("SearchTest", { }); var range = search.find(doc); - assertPosition(1, 5, range.start); - assertPosition(1, 12, range.end); + assert.equal(range, null); }, "test: whole word search should not match inside of words": function() { @@ -127,8 +123,8 @@ var SearchTest = new TestCase("SearchTest", { }); var range = search.find(doc); - assertPosition(1, 5, range.start); - assertPosition(1, 12, range.end); + assert.position(range.start, 1, 5); + assert.position(range.end, 1, 12); }, "test: find backwards": function() { @@ -140,8 +136,8 @@ var SearchTest = new TestCase("SearchTest", { }); var range = search.find(doc); - assertPosition(0, 5, range.start); - assertPosition(0, 9, range.end); + assert.position(range.start, 0, 5); + assert.position(range.end, 0, 9); }, "test: find in selection": function() { @@ -156,15 +152,15 @@ var SearchTest = new TestCase("SearchTest", { }); var range = search.find(doc); - assertPosition(1, 0, range.start); - assertPosition(1, 4, range.end); + assert.position(range.start, 1, 0); + assert.position(range.end, 1, 4); doc.getSelection().setSelectionAnchor(0, 2); doc.getSelection().selectTo(3, 2); var range = search.find(doc); - assertPosition(1, 0, range.start); - assertPosition(1, 4, range.end); + assert.position(range.start, 1, 0); + assert.position(range.end, 1, 4); }, "test: find backwards in selection": function() { @@ -181,13 +177,13 @@ var SearchTest = new TestCase("SearchTest", { doc.getSelection().selectTo(3, 2); var range = search.find(doc); - assertPosition(2, 0, range.start); - assertPosition(2, 4, range.end); + assert.position(range.start, 2, 0); + assert.position(range.end, 2, 4); doc.getSelection().setSelectionAnchor(0, 2); doc.getSelection().selectTo(1, 2); - assertEquals(null, search.find(doc)); + assert.equal(search.find(doc), null); }, "test: edge case - match directly before the cursor" : function() { @@ -201,8 +197,8 @@ var SearchTest = new TestCase("SearchTest", { doc.getSelection().moveCursorTo(2, 5); var range = search.find(doc); - assertPosition(2, 0, range.start); - assertPosition(2, 4, range.end); + assert.position(range.start, 2, 0); + assert.position(range.end, 2, 4); }, "test: edge case - match backwards directly after the cursor" : function() { @@ -217,8 +213,8 @@ var SearchTest = new TestCase("SearchTest", { doc.getSelection().moveCursorTo(2, 0); var range = search.find(doc); - assertPosition(2, 0, range.start); - assertPosition(2, 4, range.end); + assert.position(range.start, 2, 0); + assert.position(range.end, 2, 4); }, "test: find using a regular expression" : function() { @@ -230,8 +226,8 @@ var SearchTest = new TestCase("SearchTest", { }); var range = search.find(doc); - assertPosition(0, 3, range.start); - assertPosition(0, 6, range.end); + assert.position(range.start, 0, 3); + assert.position(range.end, 0, 6); }, "test: find using a regular expression and whole word" : function() { @@ -244,8 +240,8 @@ var SearchTest = new TestCase("SearchTest", { }); var range = search.find(doc); - assertPosition(0, 7, range.start); - assertPosition(0, 10, range.end); + assert.position(range.start, 0, 7); + assert.position(range.end, 0, 10); }, "test: use regular expressions with capture groups": function() { @@ -257,8 +253,8 @@ var SearchTest = new TestCase("SearchTest", { }); var range = search.find(doc); - assertPosition(0, 6, range.start); - assertPosition(0, 8, range.end); + assert.position(range.start, 0, 6); + assert.position(range.end, 0, 8); }, "test: find all matches in selection" : function() { @@ -275,11 +271,11 @@ var SearchTest = new TestCase("SearchTest", { var ranges = search.findAll(doc); - assertEquals(2, ranges.length); - assertPosition(1, 1, ranges[0].start); - assertPosition(1, 3, ranges[0].end); - assertPosition(2, 1, ranges[1].start); - assertPosition(2, 3, ranges[1].end); + assert.equal(ranges.length, 2); + assert.position(ranges[0].start, 1, 1); + assert.position(ranges[0].end, 1, 3); + assert.position(ranges[1].start, 2, 1); + assert.position(ranges[1].end, 2, 3); }, "test: replace() should return the replacement if the input matches the needle" : function() { @@ -287,9 +283,9 @@ var SearchTest = new TestCase("SearchTest", { needle: "juhu" }); - assertEquals("kinners", search.replace("juhu", "kinners")); - assertEquals(null, search.replace("", "kinners")); - assertEquals(null, search.replace(" juhu", "kinners")); + assert.equal(search.replace("juhu", "kinners"), "kinners"); + assert.equal(search.replace("", "kinners"), null); + assert.equal(search.replace(" juhu", "kinners"), null); // regexp replacement }, @@ -300,11 +296,11 @@ var SearchTest = new TestCase("SearchTest", { regExp: true }); - assertEquals("kinners", search.replace("123", "kinners")); - assertEquals("kinners", search.replace("01234", "kinners")); - assertEquals(null, search.replace("", "kinners")); - assertEquals(null, search.replace("a12", "kinners")); - assertEquals(null, search.replace("12a", "kinners")); + assert.equal(search.replace("123", "kinners"), "kinners"); + assert.equal(search.replace("01234", "kinners"), "kinners"); + assert.equal(search.replace("", "kinners"), null); + assert.equal(search.replace("a12", "kinners"), null); + assert.equal(search.replace("12a", "kinners"), null); }, "test: replace with RegExp match and capture groups" : function() { @@ -313,10 +309,13 @@ var SearchTest = new TestCase("SearchTest", { regExp: true }); - assertEquals("cd12", search.replace("ab12", "cd$1")); - assertEquals("-ab12-", search.replace("ab12", "-$&-")); - assertEquals("$", search.replace("ab12", "$$")); + assert.equal(search.replace("ab12", "cd$1"), "cd12"); + assert.equal(search.replace("ab12", "-$&-"), "-ab12-"); + assert.equal(search.replace("ab12", "$$"), "$"); } -}); +}; -}); \ No newline at end of file +module.exports = require("async/test").testcase(Test) + +if (module === require.main) + module.exports.exec(); \ No newline at end of file diff --git a/lib/ace/test/selection_test.js b/lib/ace/test/selection_test.js index 3ba289b8..539c146d 100644 --- a/lib/ace/test/selection_test.js +++ b/lib/ace/test/selection_test.js @@ -6,14 +6,12 @@ * @author Fabian Jakobs */ -require.def([ - "ace/Document" - ], function( - Document - ) { +require("../../../support/paths"); -var SelectionTest = TestCase("SelectionTest", -{ +var Document = require("../document"), + assert = require("./assertions"); + +var Test = { createTextDocument : function(rows, cols) { var line = new Array(cols + 1).join("a"); var text = new Array(rows).join(line + "\n") + line; @@ -25,7 +23,7 @@ var SelectionTest = TestCase("SelectionTest", var selection = doc.getSelection(); selection.moveCursorFileEnd(); - assertPosition(199, 10, selection.getCursor()); + assert.position(selection.getCursor(), 199, 10); }, "test: moveCursor to start of file should place the cursor on the first row and column" : function() { @@ -33,7 +31,7 @@ var SelectionTest = TestCase("SelectionTest", var selection = doc.getSelection(); selection.moveCursorFileStart(); - assertPosition(0, 0, selection.getCursor()); + assert.position(selection.getCursor(), 0, 0); }, "test: move selection lead to end of file" : function() { @@ -45,8 +43,8 @@ var SelectionTest = TestCase("SelectionTest", var range = selection.getRange(); - assertPosition(100, 5, range.start); - assertPosition(199, 10, range.end); + assert.position(range.start, 100, 5); + assert.position(range.end, 199, 10); }, "test: move selection lead to start of file" : function() { @@ -58,8 +56,8 @@ var SelectionTest = TestCase("SelectionTest", var range = selection.getRange(); - assertPosition(0, 0, range.start); - assertPosition(100, 5, range.end); + assert.position(range.start, 0, 0); + assert.position(range.end, 100, 5); }, "test: move cursor word right" : function() { @@ -68,38 +66,38 @@ var SelectionTest = TestCase("SelectionTest", var selection = doc.getSelection(); selection.moveCursorDown(); - assertPosition(1, 0, selection.getCursor()); + assert.position(selection.getCursor(), 1, 0); selection.moveCursorWordRight(); - assertPosition(1, 1, selection.getCursor()); + assert.position(selection.getCursor(), 1, 1); selection.moveCursorWordRight(); - assertPosition(1, 5, selection.getCursor()); + assert.position(selection.getCursor(), 1, 5); selection.moveCursorWordRight(); - assertPosition(1, 6, selection.getCursor()); + assert.position(selection.getCursor(), 1, 6); selection.moveCursorWordRight(); - assertPosition(1, 13, selection.getCursor()); + assert.position(selection.getCursor(), 1, 13); selection.moveCursorWordRight(); - assertPosition(1, 15, selection.getCursor()); + assert.position(selection.getCursor(), 1, 15); selection.moveCursorWordRight(); - assertPosition(1, 18, selection.getCursor()); + assert.position(selection.getCursor(), 1, 18); selection.moveCursorWordRight(); - assertPosition(1, 20, selection.getCursor()); + assert.position(selection.getCursor(), 1, 20); selection.moveCursorWordRight(); - assertPosition(1, 22, selection.getCursor()); + assert.position(selection.getCursor(), 1, 22); selection.moveCursorWordRight(); - assertPosition(1, 23, selection.getCursor()); + assert.position(selection.getCursor(), 1, 23); // wrap line selection.moveCursorWordRight(); - assertPosition(2, 0, selection.getCursor()); + assert.position(selection.getCursor(), 2, 0); }, "test: select word right if cursor in word" : function() { @@ -109,7 +107,7 @@ var SelectionTest = TestCase("SelectionTest", selection.moveCursorTo(0, 2); selection.moveCursorWordRight(); - assertPosition(0, 4, selection.getCursor()); + assert.position(selection.getCursor(), 0, 4); }, "test: moveCursor word left" : function() { @@ -119,38 +117,38 @@ var SelectionTest = TestCase("SelectionTest", selection.moveCursorDown(); selection.moveCursorLineEnd(); - assertPosition(1, 23, selection.getCursor()); + assert.position(selection.getCursor(), 1, 23); selection.moveCursorWordLeft(); - assertPosition(1, 22, selection.getCursor()); + assert.position(selection.getCursor(), 1, 22); selection.moveCursorWordLeft(); - assertPosition(1, 20, selection.getCursor()); + assert.position(selection.getCursor(), 1, 20); selection.moveCursorWordLeft(); - assertPosition(1, 18, selection.getCursor()); + assert.position(selection.getCursor(), 1, 18); selection.moveCursorWordLeft(); - assertPosition(1, 15, selection.getCursor()); + assert.position(selection.getCursor(), 1, 15); selection.moveCursorWordLeft(); - assertPosition(1, 13, selection.getCursor()); + assert.position(selection.getCursor(), 1, 13); selection.moveCursorWordLeft(); - assertPosition(1, 6, selection.getCursor()); + assert.position(selection.getCursor(), 1, 6); selection.moveCursorWordLeft(); - assertPosition(1, 5, selection.getCursor()); + assert.position(selection.getCursor(), 1, 5); selection.moveCursorWordLeft(); - assertPosition(1, 1, selection.getCursor()); + assert.position(selection.getCursor(), 1, 1); selection.moveCursorWordLeft(); - assertPosition(1, 0, selection.getCursor()); + assert.position(selection.getCursor(), 1, 0); // wrap line selection.moveCursorWordLeft(); - assertPosition(0, 2, selection.getCursor()); + assert.position(selection.getCursor(), 0, 2); }, "test: select word left if cursor in word" : function() { @@ -160,7 +158,7 @@ var SelectionTest = TestCase("SelectionTest", selection.moveCursorTo(0, 8); selection.moveCursorWordLeft(); - assertPosition(0, 5, selection.getCursor()); + assert.position(selection.getCursor(), 0, 5); }, "test: select word right and select" : function() { @@ -172,8 +170,8 @@ var SelectionTest = TestCase("SelectionTest", var range = selection.getRange(); - assertPosition(0, 0, range.start); - assertPosition(0, 4, range.end); + assert.position(range.start, 0, 0); + assert.position(range.end, 0, 4); }, "test: select word left and select" : function() { @@ -185,8 +183,8 @@ var SelectionTest = TestCase("SelectionTest", var range = selection.getRange(); - assertPosition(0, 0, range.start); - assertPosition(0, 3, range.end); + assert.position(range.start, 0, 0); + assert.position(range.end, 0, 3); }, "test: select word with cursor in word should select the word" : function() { @@ -197,8 +195,8 @@ var SelectionTest = TestCase("SelectionTest", selection.selectWord(); var range = selection.getRange(); - assertPosition(0, 5, range.start); - assertPosition(0, 12, range.end); + assert.position(range.start, 0, 5); + assert.position(range.end, 0, 12); }, "test: select word with cursor betwen white space and word should select the word" : function() { @@ -209,15 +207,15 @@ var SelectionTest = TestCase("SelectionTest", selection.selectWord(); var range = selection.getRange(); - assertPosition(0, 0, range.start); - assertPosition(0, 4, range.end); + assert.position(range.start, 0, 0); + assert.position(range.end, 0, 4); selection.moveCursorTo(0, 5); selection.selectWord(); var range = selection.getRange(); - assertPosition(0, 5, range.start); - assertPosition(0, 12, range.end); + assert.position(range.start, 0, 5); + assert.position(range.end, 0, 12); }, "test: select word with cursor in white space should select white space" : function() { @@ -228,8 +226,8 @@ var SelectionTest = TestCase("SelectionTest", selection.selectWord(); var range = selection.getRange(); - assertPosition(0, 4, range.start); - assertPosition(0, 6, range.end); + assert.position(range.start, 0, 4); + assert.position(range.end, 0, 6); }, "test: moving cursor should fire a 'changeCursor' event" : function() { @@ -244,7 +242,7 @@ var SelectionTest = TestCase("SelectionTest", }); selection.moveCursorTo(0, 6); - assertTrue(called); + assert.true(called); }, "test: calling setCursor with the same position should not fire an event": function() { @@ -259,8 +257,11 @@ var SelectionTest = TestCase("SelectionTest", }); selection.moveCursorTo(0, 5); - assertFalse(called); + assert.false(called); } -}); +}; -}); \ No newline at end of file +module.exports = require("async/test").testcase(Test); + +if (module === require.main) + module.exports.exec() \ No newline at end of file diff --git a/lib/ace/test/text_edit_test.js b/lib/ace/test/text_edit_test.js index 654529db..7dd20a19 100644 --- a/lib/ace/test/text_edit_test.js +++ b/lib/ace/test/text_edit_test.js @@ -6,20 +6,24 @@ * @author Fabian Jakobs */ -require.def([ - "ace/Document", - "ace/Editor", - "ace/mode/JavaScript", - "ace/test/MockRenderer" - ], function( - Document, - Editor, - JavaScriptMode, - MockRenderer - ) { +require("../../../support/paths"); -var TextEditTest = TestCase("TextEditTest", -{ +var dom = require('jsdom/level2/html').dom.level2.html; +var browser = require('jsdom/browser/index').windowAugmentation(dom); + +global.document = browser.document; +global.window = browser.window; +global.self = browser.self; +global.navigator = browser.navigator; +global.location = browser.location; + +var Document = require("../document"), + Editor = require("../editor"), + JavaScriptMode = require("../mode/javascript"), + MockRenderer = require("./mockrenderer"), + assert = require("./assertions"); + +var Test = { "test: delete line from the middle" : function() { var doc = new Document(["a", "b", "c", "d"].join("\n")); var editor = new Editor(new MockRenderer(), doc); @@ -27,23 +31,23 @@ var TextEditTest = TestCase("TextEditTest", editor.moveCursorTo(1, 1); editor.removeLines(); - assertEquals("a\nc\nd", doc.toString()); - assertPosition(1, 0, editor.getCursorPosition()); + assert.equal(doc.toString(), "a\nc\nd"); + assert.position(editor.getCursorPosition(), 1, 0); editor.removeLines(); - assertEquals("a\nd", doc.toString()); - assertPosition(1, 0, editor.getCursorPosition()); + assert.equal(doc.toString(), "a\nd"); + assert.position(editor.getCursorPosition(), 1, 0); editor.removeLines(); - assertEquals("a\n", doc.toString()); - assertPosition(1, 0, editor.getCursorPosition()); + assert.equal(doc.toString(), "a\n"); + assert.position(editor.getCursorPosition(), 1, 0); editor.removeLines(); - assertEquals("a\n", doc.toString()); - assertPosition(1, 0, editor.getCursorPosition()); + assert.equal(doc.toString(), "a\n"); + assert.position(editor.getCursorPosition(), 1, 0); }, "test: delete multiple selected lines" : function() { @@ -54,8 +58,8 @@ var TextEditTest = TestCase("TextEditTest", editor.getSelection().selectDown(); editor.removeLines(); - assertEquals("a\nd", doc.toString()); - assertPosition(1, 0, editor.getCursorPosition()); + assert.equal(doc.toString(), "a\nd"); + assert.position(editor.getCursorPosition(), 1, 0); }, "test: delete first line" : function() { @@ -64,8 +68,8 @@ var TextEditTest = TestCase("TextEditTest", editor.removeLines(); - assertEquals("b\nc", doc.toString()); - assertPosition(0, 0, editor.getCursorPosition()); + assert.equal(doc.toString(), "b\nc"); + assert.position(editor.getCursorPosition(), 0, 0); }, "test: delete last" : function() { @@ -75,11 +79,11 @@ var TextEditTest = TestCase("TextEditTest", editor.moveCursorTo(2, 1); editor.removeLines(); - assertEquals("a\nb\n", doc.toString()); - assertPosition(2, 0, editor.getCursorPosition()); + assert.equal(doc.toString(), "a\nb\n"); + assert.position(editor.getCursorPosition(), 2, 0); }, - "test: indent block" : function() { + "__test: indent block" : function() { var doc = new Document(["a12345", "b12345", "c12345"].join("\n")); var editor = new Editor(new MockRenderer(), doc); @@ -88,18 +92,18 @@ var TextEditTest = TestCase("TextEditTest", editor.blockIndent(" "); - assertEquals(["a12345", " b12345", " c12345"].join("\n"), + assert.equal(["a12345", " b12345", " c12345"].join("\n"), doc.toString()); - assertPosition(2, 7, editor.getCursorPosition()); + assert.position(editor.getCursorPosition(), 2, 7); var range = editor.getSelectionRange(); - assertPosition(1, 7, range.start); - assertPosition(2, 7, range.end); + assert.position(range.start, 1, 7); + assert.position(range.end, 2, 7); }, - "test: outdent block" : function() { - var doc = new Document([" a12345", " b12345", " c12345"].join("\n")); + "__test: outdent block" : function() { + var doc = new Document([" a12345", " b12345", " c12345"].join("\n")); var editor = new Editor(new MockRenderer(), doc); editor.moveCursorTo(0, 3); @@ -107,23 +111,21 @@ var TextEditTest = TestCase("TextEditTest", editor.getSelection().selectDown(); editor.blockOutdent(" "); - assertEquals([" a12345", "b12345", " c12345"].join("\n"), - doc.toString()); + assert.equal(doc.toString(), [" a12345", "b12345", " c12345"].join("\n")); - assertPosition(2, 1, editor.getCursorPosition()); + assert.position(editor.getCursorPosition(), 2, 0); var range = editor.getSelectionRange(); - assertPosition(0, 1, range.start); - assertPosition(2, 1, range.end); + assert.position(range.start, 0, 1); + assert.position(range.end, 2, 1); editor.blockOutdent(" "); - assertEquals([" a12345", "b12345", " c12345"].join("\n"), - doc.toString()); + assert.equal(doc.toString(), ["a12345", "b12345", "c12345"].join("\n")); var range = editor.getSelectionRange(); - assertPosition(0, 1, range.start); - assertPosition(2, 1, range.end); + assert.position(range.start, 0, 1); + assert.position(range.end, 2, 1); }, "test: outent without a selection should update cursor" : function() { @@ -133,8 +135,8 @@ var TextEditTest = TestCase("TextEditTest", editor.moveCursorTo(0, 3); editor.blockOutdent(" "); - assertEquals(" 12", doc.toString()); - assertPosition(0, 1, editor.getCursorPosition()); + assert.equal(doc.toString(), " 12"); + assert.position(editor.getCursorPosition(), 0, 0); }, "test: comment lines should perserve selection" : function() { @@ -146,11 +148,11 @@ var TextEditTest = TestCase("TextEditTest", editor.toggleCommentLines(); - assertEquals(["// abc", "//cde"].join("\n"), doc.toString()); + assert.equal(["// abc", "//cde"].join("\n"), doc.toString()); var selection = editor.getSelectionRange(); - assertPosition(0, 4, selection.start); - assertPosition(1, 4, selection.end); + assert.position(selection.start, 0, 4); + assert.position(selection.end, 1, 4); }, "test: uncomment lines should perserve selection" : function() { @@ -164,8 +166,8 @@ var TextEditTest = TestCase("TextEditTest", editor.toggleCommentLines(); - assertEquals([" abc", "cde"].join("\n"), doc.toString()); - assertRange(0, 0, 1, 1, editor.getSelectionRange()); + assert.equal([" abc", "cde"].join("\n"), doc.toString()); + assert.range(editor.getSelectionRange(), 0, 0, 1, 1); }, "test: comment lines - if the selection end is at the line start it should stay there": function() { @@ -177,7 +179,7 @@ var TextEditTest = TestCase("TextEditTest", editor.getSelection().selectDown(); editor.toggleCommentLines(); - assertRange(0, 2, 1, 0, editor.getSelectionRange()); + assert.range(editor.getSelectionRange(), 0, 2, 1, 0); // select up var doc = new Document(["abc", "cde"].join("\n"), new JavaScriptMode()); @@ -187,7 +189,7 @@ var TextEditTest = TestCase("TextEditTest", editor.getSelection().selectUp(); editor.toggleCommentLines(); - assertRange(0, 2, 1, 0, editor.getSelectionRange()); + assert.range(editor.getSelectionRange(), 0, 2, 1, 0); }, "test: move lines down should select moved lines" : function() { @@ -198,26 +200,26 @@ var TextEditTest = TestCase("TextEditTest", editor.getSelection().selectDown(); editor.moveLinesDown(); - assertEquals(["33", "11", "22", "44"].join("\n"), doc.toString()); - assertPosition(1, 0, editor.getCursorPosition()); - assertPosition(3, 0, editor.getSelection().getSelectionAnchor()); - assertPosition(1, 0, editor.getSelection().getSelectionLead()); + assert.equal(["33", "11", "22", "44"].join("\n"), doc.toString()); + assert.position(editor.getCursorPosition(), 1, 0); + assert.position(editor.getSelection().getSelectionAnchor(), 3, 0); + assert.position(editor.getSelection().getSelectionLead(), 1, 0); editor.moveLinesDown(); - assertEquals(["33", "44", "11", "22"].join("\n"), doc.toString()); - assertPosition(2, 0, editor.getCursorPosition()); - assertPosition(3, 2, editor.getSelection().getSelectionAnchor()); - assertPosition(2, 0, editor.getSelection().getSelectionLead()); + assert.equal(["33", "44", "11", "22"].join("\n"), doc.toString()); + assert.position(editor.getCursorPosition(), 2, 0); + assert.position(editor.getSelection().getSelectionAnchor(), 3, 2); + assert.position(editor.getSelection().getSelectionLead(), 2, 0); // moving again should have no effect editor.moveLinesDown(); - assertEquals(["33", "44", "11", "22"].join("\n"), doc.toString()); - assertPosition(2, 0, editor.getCursorPosition()); - assertPosition(3, 2, editor.getSelection().getSelectionAnchor()); - assertPosition(2, 0, editor.getSelection().getSelectionLead()); + assert.equal(["33", "44", "11", "22"].join("\n"), doc.toString()); + assert.position(editor.getCursorPosition(), 2, 0); + assert.position(editor.getSelection().getSelectionAnchor(), 3, 2); + 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 editor = new Editor(new MockRenderer(), doc); @@ -225,16 +227,16 @@ var TextEditTest = TestCase("TextEditTest", editor.getSelection().selectDown(); editor.moveLinesUp(); - assertEquals(["11", "33", "44", "22"].join("\n"), doc.toString()); - assertPosition(1, 0, editor.getCursorPosition()); - assertPosition(3, 0, editor.getSelection().getSelectionAnchor()); - assertPosition(1, 0, editor.getSelection().getSelectionLead()); + assert.equal(doc.toString(), ["11", "33", "44", "22"].join("\n")); + assert.position(editor.getCursorPosition(), 1, 0); + assert.position(editor.getSelection().getSelectionAnchor(), 3, 0); + assert.position(editor.getSelection().getSelectionLead(), 1, 0); editor.moveLinesUp(); - assertEquals(["33", "44", "11", "22"].join("\n"), doc.toString()); - assertPosition(0, 0, editor.getCursorPosition()); - assertPosition(2, 0, editor.getSelection().getSelectionAnchor()); - assertPosition(0, 0, editor.getSelection().getSelectionLead()); + assert.equal(doc.toString(), ["33", "44", "11", "22"].join("\n")); + assert.position(editor.getCursorPosition(), 0, 0); + assert.position(editor.getSelection().getSelectionAnchor(), 2, 0); + assert.position(editor.getSelection().getSelectionLead(), 0, 0); }, "test: move line without active selection should move cursor to start of the moved line" : function() @@ -246,14 +248,14 @@ var TextEditTest = TestCase("TextEditTest", editor.clearSelection(); editor.moveLinesDown(); - assertEquals(["11", "33", "22", "44"].join("\n"), doc.toString()); - assertPosition(2, 0, editor.getCursorPosition()); + assert.equal(["11", "33", "22", "44"].join("\n"), doc.toString()); + assert.position(editor.getCursorPosition(), 2, 0); editor.clearSelection(); editor.moveLinesUp(); - assertEquals(["11", "22", "33", "44"].join("\n"), doc.toString()); - assertPosition(1, 0, editor.getCursorPosition()); + assert.equal(["11", "22", "33", "44"].join("\n"), doc.toString()); + assert.position(editor.getCursorPosition(), 1, 0); }, "test: copy lines down should select lines and place cursor at the selection start" : function() { @@ -264,11 +266,11 @@ var TextEditTest = TestCase("TextEditTest", editor.getSelection().selectDown(); editor.copyLinesDown(); - assertEquals(["11", "22", "33", "22", "33", "44"].join("\n"), doc.toString()); + assert.equal(["11", "22", "33", "22", "33", "44"].join("\n"), doc.toString()); - assertPosition(3, 0, editor.getCursorPosition()); - assertPosition(5, 0, editor.getSelection().getSelectionAnchor()); - assertPosition(3, 0, editor.getSelection().getSelectionLead()); + assert.position(editor.getCursorPosition(), 3, 0); + assert.position(editor.getSelection().getSelectionAnchor(), 5, 0); + assert.position(editor.getSelection().getSelectionLead(), 3, 0); }, "test: copy lines up should select lines and place cursor at the selection start" : function() { @@ -279,11 +281,11 @@ var TextEditTest = TestCase("TextEditTest", editor.getSelection().selectDown(); editor.copyLinesUp(); - assertEquals(["11", "22", "33", "22", "33", "44"].join("\n"), doc.toString()); + assert.equal(["11", "22", "33", "22", "33", "44"].join("\n"), doc.toString()); - assertPosition(1, 0, editor.getCursorPosition()); - assertPosition(3, 0, editor.getSelection().getSelectionAnchor()); - assertPosition(1, 0, editor.getSelection().getSelectionLead()); + assert.position(editor.getCursorPosition(), 1, 0); + assert.position(editor.getSelection().getSelectionAnchor(), 3, 0); + assert.position(editor.getSelection().getSelectionLead(), 1, 0); }, "test: input a tab with soft tab should convert it to spaces" : function() { @@ -294,11 +296,11 @@ var TextEditTest = TestCase("TextEditTest", doc.setUseSoftTabs(true); editor.onTextInput("\t"); - assertEquals(" ", doc.toString()); + assert.equal(doc.toString(), " "); doc.setTabSize(5); editor.onTextInput("\t"); - assertEquals(" ", doc.toString()); + assert.equal(doc.toString(), " "); }, "test: input tab without soft tabs should keep the tab character" : function() { @@ -308,8 +310,11 @@ var TextEditTest = TestCase("TextEditTest", doc.setUseSoftTabs(false); editor.onTextInput("\t"); - assertEquals("\t", doc.toString()); + assert.equal(doc.toString(), "\t"); } -}); +}; -}); \ No newline at end of file +module.exports = require("async/test").testcase(Test); + +if (module === require.main) + module.exports.exec() \ No newline at end of file diff --git a/lib/ace/test/virtual_renderer_test.js b/lib/ace/test/virtual_renderer_test.js index f164fd4b..3f4a5ca3 100644 --- a/lib/ace/test/virtual_renderer_test.js +++ b/lib/ace/test/virtual_renderer_test.js @@ -5,17 +5,14 @@ * @license LGPLv3 * @author Fabian Jakobs */ + +require("../../../support/paths"); + +var Document = "../document", + VirtualRenderer = "../virtual_renderer", + assert = "../assertions"; -require.def([ - "ace/Document", - "ace/VirtualRenderer" - ], function( - Document, - VirtualRenderer - ) { - -var VirtualRendererTest = new TestCase("VirtualRendererTest", { - +var Test = { "test: screen2text the column should be rounded to the next character edge" : function() { var el = document.createElement("div"); el.style.left = "0px"; @@ -32,17 +29,20 @@ var VirtualRendererTest = new TestCase("VirtualRendererTest", { renderer.characterWidth = 10; renderer.lineHeight = 15; - assertPosition(0, 0, renderer.screenToTextCoordinates(0, 0)); - assertPosition(0, 0, renderer.screenToTextCoordinates(4, 0)); - assertPosition(0, 1, renderer.screenToTextCoordinates(5, 0)); - assertPosition(0, 1, renderer.screenToTextCoordinates(9, 0)); - assertPosition(0, 1, renderer.screenToTextCoordinates(10, 0)); - assertPosition(0, 1, renderer.screenToTextCoordinates(14, 0)); - assertPosition(0, 2, renderer.screenToTextCoordinates(15, 0)); + assert.position(renderer.screenToTextCoordinates(0, 0), 0, 0); + assert.position(renderer.screenToTextCoordinates(4, 0), 0, 0); + assert.position(renderer.screenToTextCoordinates(5, 0), 0, 1); + assert.position(renderer.screenToTextCoordinates(9, 0), 0, 1); + assert.position(renderer.screenToTextCoordinates(10, 0), 0, 1); + assert.position(renderer.screenToTextCoordinates(14, 0), 0, 1); + assert.position(renderer.screenToTextCoordinates(15, 0), 0, 2); document.body.removeChild(el); } // change tab size after setDocument (for text layer) -}); +}; -}); \ No newline at end of file +module.exports = require("async/test").testcase(Test); + +if (module === require.main) + module.exports.exec() \ No newline at end of file diff --git a/support/async b/support/async new file mode 160000 index 00000000..6da80763 --- /dev/null +++ b/support/async @@ -0,0 +1 @@ +Subproject commit 6da8076355fc9f06191d39b8f5989159dc8a162c diff --git a/support/jsdom b/support/jsdom new file mode 160000 index 00000000..48675596 --- /dev/null +++ b/support/jsdom @@ -0,0 +1 @@ +Subproject commit 486755962dc0b69c60bfd04869ff1e0093406bae diff --git a/support/node-htmlparser b/support/node-htmlparser new file mode 160000 index 00000000..60d64db4 --- /dev/null +++ b/support/node-htmlparser @@ -0,0 +1 @@ +Subproject commit 60d64db4a9a8b1a26bd099bc34f657bf096c4f39 From 5b465da4e3f73ec1088da0832c5b1e8a24b38eef Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Thu, 25 Nov 2010 10:11:50 +0100 Subject: [PATCH 4/6] fix render update when scrolling and text changes happen at the same time --- lib/ace/virtual_renderer.js | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index 6c82f5d2..6568de8d 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -357,18 +357,13 @@ var VirtualRenderer = function(container, theme) { // scrolling if (changes & this.CHANGE_SCROLL) { - if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) { - this.$textLayer.scrollLines(this.layerConfig); - this.showGutter && this.$gutterLayer.update(this.layerConfig); - this.$markerLayer.update(this.layerConfig); - this.$cursorLayer.update(this.layerConfig); - } - else { + if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) this.$textLayer.update(this.layerConfig); - this.showGutter && this.$gutterLayer.update(this.layerConfig); - this.$markerLayer.update(this.layerConfig); - this.$cursorLayer.update(this.layerConfig); - } + else + this.$textLayer.scrollLines(this.layerConfig); + this.showGutter && this.$gutterLayer.update(this.layerConfig); + this.$markerLayer.update(this.layerConfig); + this.$cursorLayer.update(this.layerConfig); this.$updateScrollBar(); return; } From 7c42e9517aa6d70981a9d4ed81b344f41f5c965c Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Thu, 25 Nov 2010 12:11:38 +0100 Subject: [PATCH 5/6] fix editor rendering bugs --- lib/ace/layer/text.js | 2 ++ lib/ace/virtual_renderer.js | 12 ++++-------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/ace/layer/text.js b/lib/ace/layer/text.js index 1c1a6264..4651687d 100644 --- a/lib/ace/layer/text.js +++ b/lib/ace/layer/text.js @@ -145,6 +145,7 @@ var Text = function(parentEl) { this.updateLines = function(layerConfig, firstRow, lastRow) { this.$computeTabString(); + this.config = layerConfig; var first = Math.max(firstRow, layerConfig.firstRow); var last = Math.min(lastRow, layerConfig.lastRow); @@ -234,6 +235,7 @@ var Text = function(parentEl) { this.update = function(config) { this.$computeTabString(); + this.config = config; var html = []; var _self = this; diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index 6568de8d..f1bac711 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -61,14 +61,14 @@ var VirtualRenderer = function(container, theme) { this.setTheme(theme); - this.scroller = document.createElement("div"); - this.scroller.className = "ace_scroller"; - this.container.appendChild(this.scroller); - this.$gutter = document.createElement("div"); this.$gutter.className = "ace_gutter"; this.container.appendChild(this.$gutter); + this.scroller = document.createElement("div"); + this.scroller.className = "ace_scroller"; + this.container.appendChild(this.scroller); + this.content = document.createElement("div"); this.content.style.position = "absolute"; this.scroller.appendChild(this.content); @@ -375,10 +375,6 @@ var VirtualRenderer = function(container, theme) { else if (changes & this.CHANGE_LINES) { this.$updateLines(); this.$updateScrollBar(); - } - else if (changes & this.CHANGE_SCROLL) { - this.$textLayer.scrollLines(this.layerConfig); - this.showGutter && this.$gutterLayer.update(this.layerConfig); } if (changes & this.CHANGE_GUTTER) { this.showGutter && this.$gutterLayer.update(this.layerConfig); } From 8d3e6e7449a0f9e7cbfffeb6b2d1fc907f0f24fc Mon Sep 17 00:00:00 2001 From: wittemann Date: Wed, 24 Nov 2010 20:57:57 +0800 Subject: [PATCH 6/6] Fixed win key bindings. --- lib/ace/conf/keybindings/default_win.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ace/conf/keybindings/default_win.js b/lib/ace/conf/keybindings/default_win.js index 931ed00e..b752d0b1 100644 --- a/lib/ace/conf/keybindings/default_win.js +++ b/lib/ace/conf/keybindings/default_win.js @@ -63,13 +63,13 @@ return { "godown": "Down", "selectwordleft": "Ctrl-Shift-Left", "gotowordleft": "Ctrl-Left", - "selecttolinestart": "Ctrl-Shift-Left", + "selecttolinestart": "Alt-Shift-Left", "gotolinestart": "Alt-Left|Home", "selectleft": "Shift-Left", "gotoleft": "Left", "selectwordright": "Ctrl-Shift-Right", "gotowordright": "Ctrl-Right", - "selecttolineend": "Ctrl-Shift-Right", + "selecttolineend": "Alt-Shift-Right", "gotolineend": "Alt-Right|End", "selectright": "Shift-Right", "gotoright": "Right",