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/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). diff --git a/lib/ace/conf/keybindings/default_win.js b/lib/ace/conf/keybindings/default_win.js index 7f546f2d..3ae134b9 100644 --- a/lib/ace/conf/keybindings/default_win.js +++ b/lib/ace/conf/keybindings/default_win.js @@ -63,13 +63,13 @@ exports.bindings = { "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", diff --git a/lib/ace/document.js b/lib/ace/document.js index 20623309..201431cc 100644 --- a/lib/ace/document.js +++ b/lib/ace/document.js @@ -45,6 +45,7 @@ var TextMode = require("ace/mode/text").Text; var Range = require("ace/range").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 487857ef..df06aacd 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/layer/text.js b/lib/ace/layer/text.js index 61c35d0c..d1dfe4bc 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/mode/javascript.js b/lib/ace/mode/javascript.js index d39bb846..2153f710 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 9e9d18cc..1bccf3da 100644 --- a/lib/ace/test/assertions.js +++ b/lib/ace/test/assertions.js @@ -35,20 +35,32 @@ * * ***** END LICENSE BLOCK ***** */ -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 6b5c7f63..f1dfb9d3 100644 --- a/lib/ace/test/change_document_test.js +++ b/lib/ace/test/change_document_test.js @@ -35,35 +35,37 @@ * * ***** END LICENSE BLOCK ***** */ -require.def([ - "ace/Document", - "ace/Editor", - "ace/mode/Text", - "ace/mode/JavaScript", - "ace/test/MockRenderer" - ], function( - Document, - Editor, - textMod, - jsMod, - MockRenderer - ) { +require("../../../support/paths"); -var TextMode = textMod.Text; -var JavaScriptMode = jsMod.JavaScript; -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() { @@ -76,10 +78,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() { @@ -87,10 +89,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() { @@ -100,16 +102,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() { @@ -117,10 +119,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() { @@ -130,16 +132,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() { @@ -151,11 +153,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() diff --git a/lib/ace/test/document_test.js b/lib/ace/test/document_test.js index 394c1929..6ae725da 100644 --- a/lib/ace/test/document_test.js +++ b/lib/ace/test/document_test.js @@ -35,229 +35,240 @@ * * ***** END LICENSE BLOCK ***** */ -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 460b23f7..deeacf3a 100644 --- a/lib/ace/test/event_emitter_test.js +++ b/lib/ace/test/event_emitter_test.js @@ -37,26 +37,31 @@ define(function(require, exports, module) { + var EventEmitter = require("pilot/event_emitter").EventEmitter; var oop = require("pilot/oop").oop; +var assert = require("./assertions"); var EventEmitter = function() {}; oop.implement(EventEmitter.prototype, EventEmitter); -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() diff --git a/lib/ace/test/mockrenderer.js b/lib/ace/test/mockrenderer.js index 69b1f79e..6a3f51a1 100644 --- a/lib/ace/test/mockrenderer.js +++ b/lib/ace/test/mockrenderer.js @@ -35,7 +35,7 @@ * * ***** END LICENSE BLOCK ***** */ -require.def([], function() { +define(function(require, exports, module) { MockRenderer = function(visibleRowCount) { this.container = document.createElement("div"); @@ -113,5 +113,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 f4c2a2b2..63e519e8 100644 --- a/lib/ace/test/navigation_test.js +++ b/lib/ace/test/navigation_test.js @@ -35,18 +35,24 @@ * * ***** END LICENSE BLOCK ***** */ -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; @@ -60,8 +66,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() { @@ -71,7 +77,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() { @@ -79,33 +85,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() { @@ -113,43 +119,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() diff --git a/lib/ace/test/range_test.js b/lib/ace/test/range_test.js index 639f6f10..3aa1cc72 100644 --- a/lib/ace/test/range_test.js +++ b/lib/ace/test/range_test.js @@ -35,118 +35,119 @@ * * ***** END LICENSE BLOCK ***** */ -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() diff --git a/lib/ace/test/search_test.js b/lib/ace/test/search_test.js index 7d95da79..ba9b6e10 100644 --- a/lib/ace/test/search_test.js +++ b/lib/ace/test/search_test.js @@ -35,16 +35,13 @@ * * ***** END LICENSE BLOCK ***** */ -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({ @@ -60,8 +57,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() { @@ -71,8 +68,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() { @@ -83,8 +80,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() { @@ -95,7 +92,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() { @@ -108,8 +105,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() { @@ -121,7 +118,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() { @@ -131,7 +128,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() { @@ -143,8 +140,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() { @@ -156,8 +152,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() { @@ -169,8 +165,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() { @@ -185,15 +181,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() { @@ -210,13 +206,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() { @@ -230,8 +226,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() { @@ -246,8 +242,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() { @@ -259,8 +255,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() { @@ -273,8 +269,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() { @@ -286,8 +282,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() { @@ -304,11 +300,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() { @@ -316,9 +312,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 }, @@ -329,11 +325,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() { @@ -342,10 +338,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(); diff --git a/lib/ace/test/selection_test.js b/lib/ace/test/selection_test.js index aa38336a..407fd3bf 100644 --- a/lib/ace/test/selection_test.js +++ b/lib/ace/test/selection_test.js @@ -35,14 +35,12 @@ * * ***** END LICENSE BLOCK ***** */ -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; @@ -54,7 +52,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() { @@ -62,7 +60,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() { @@ -74,8 +72,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() { @@ -87,8 +85,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() { @@ -97,38 +95,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() { @@ -138,7 +136,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() { @@ -148,38 +146,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() { @@ -189,7 +187,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() { @@ -201,8 +199,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() { @@ -214,8 +212,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() { @@ -226,8 +224,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() { @@ -238,15 +236,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() { @@ -257,8 +255,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() { @@ -273,7 +271,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() { @@ -288,8 +286,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() diff --git a/lib/ace/test/text_edit_test.js b/lib/ace/test/text_edit_test.js index 2087a838..06f54de7 100644 --- a/lib/ace/test/text_edit_test.js +++ b/lib/ace/test/text_edit_test.js @@ -35,21 +35,24 @@ * * ***** END LICENSE BLOCK ***** */ -require.def([ - "ace/Document", - "ace/Editor", - "ace/mode/JavaScript", - "ace/test/MockRenderer" - ], function( - Document, - Editor, - jsMod, - MockRenderer - ) { +require("../../../support/paths"); -var JavaScriptMode = jsMod.JavaScript; -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").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); @@ -57,23 +60,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() { @@ -84,8 +87,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() { @@ -94,8 +97,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() { @@ -105,11 +108,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); @@ -118,18 +121,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); @@ -137,23 +140,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() { @@ -163,8 +164,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() { @@ -176,11 +177,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() { @@ -194,8 +195,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() { @@ -207,7 +208,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()); @@ -217,7 +218,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() { @@ -228,26 +229,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); @@ -255,16 +256,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() @@ -276,14 +277,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() { @@ -294,11 +295,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() { @@ -309,11 +310,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() { @@ -324,11 +325,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() { @@ -338,8 +339,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() diff --git a/lib/ace/test/virtual_renderer_test.js b/lib/ace/test/virtual_renderer_test.js index a7ea6d23..7ca42e62 100644 --- a/lib/ace/test/virtual_renderer_test.js +++ b/lib/ace/test/virtual_renderer_test.js @@ -34,17 +34,14 @@ * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ + +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"; @@ -61,17 +58,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() diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index e117b093..6abf9585 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -59,14 +59,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); @@ -355,18 +355,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; } @@ -378,10 +373,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); } @@ -616,7 +607,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); }); 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