123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596 |
- /* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Ajax.org B.V. nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
- if (typeof process !== "undefined") {
- ace_require("amd-loader");
- }
- define(function(ace_require, exports, module) {
- "use strict";
- var LineWidgets = ace_require("./line_widgets").LineWidgets;
- var EditSession = ace_require("./edit_session").EditSession;
- var assert = ace_require("./test/assertions");
- var Range = ace_require("./range").Range;
- module.exports = {
- createSession : function(rows, cols) {
- var line = new Array(cols + 1).join("a");
- var text = new Array(rows).join(line + "\n") + line;
- return new EditSession(text);
- },
-
- "test: selectAll" : function() {
- var session = this.createSession(10, 10);
- var selection = session.selection;
- session.selection.selectAll();
- assert.position(selection.getAnchor(), 0, 0);
- assert.position(selection.getCursor(), 9, 10);
- assert.position(selection.getRange().end, 9, 10);
- assert.position(selection.getRange().start, 0, 0);
- },
- "test: move cursor to end of file should place the cursor on last row and column" : function() {
- var session = this.createSession(200, 10);
- var selection = session.getSelection();
- selection.moveCursorFileEnd();
- assert.position(selection.getCursor(), 199, 10);
- },
- "test: moveCursor to start of file should place the cursor on the first row and column" : function() {
- var session = this.createSession(200, 10);
- var selection = session.getSelection();
- selection.moveCursorFileStart();
- assert.position(selection.getCursor(), 0, 0);
- },
- "test: move selection lead to end of file" : function() {
- var session = this.createSession(200, 10);
- var selection = session.getSelection();
- selection.moveCursorTo(100, 5);
- selection.selectFileEnd();
- var range = selection.getRange();
- assert.position(range.start, 100, 5);
- assert.position(range.end, 199, 10);
- },
- "test: move selection lead to start of file" : function() {
- var session = this.createSession(200, 10);
- var selection = session.getSelection();
- selection.moveCursorTo(100, 5);
- selection.selectFileStart();
- var range = selection.getRange();
- assert.position(range.start, 0, 0);
- assert.position(range.end, 100, 5);
- },
- "test: move cursor word right" : function() {
- var session = new EditSession([
- "ab",
- " Juhu Kinners (abc, 12)",
- " cde"
- ].join("\n"));
-
- var selection = session.getSelection();
- session.$selectLongWords = true;
- selection.moveCursorDown();
- assert.position(selection.getCursor(), 1, 0);
- selection.moveCursorWordRight();
- assert.position(selection.getCursor(), 1, 5);
- selection.moveCursorWordRight();
- assert.position(selection.getCursor(), 1, 13);
- selection.moveCursorWordRight();
- assert.position(selection.getCursor(), 1, 18);
- selection.moveCursorWordRight();
- assert.position(selection.getCursor(), 1, 22);
- // wrap line
- selection.moveCursorWordRight();
- assert.position(selection.getCursor(), 2, 4);
-
- selection.moveCursorWordRight();
- assert.position(selection.getCursor(), 2, 4);
- },
- "test: select word right if cursor in word" : function() {
- var session = new EditSession("Juhu Kinners");
- var selection = session.getSelection();
- selection.moveCursorTo(0, 2);
- selection.moveCursorWordRight();
- assert.position(selection.getCursor(), 0, 4);
- },
- "test: moveCursor word left" : function() {
- var session = new EditSession([
- "ab",
- " Juhu Kinners (abc, 12)",
- " cde"
- ].join("\n"));
- var selection = session.getSelection();
- session.$selectLongWords = true;
- selection.moveCursorDown();
- selection.moveCursorLineEnd();
- assert.position(selection.getCursor(), 1, 23);
- selection.moveCursorWordLeft();
- assert.position(selection.getCursor(), 1, 20);
- selection.moveCursorWordLeft();
- assert.position(selection.getCursor(), 1, 15);
- selection.moveCursorWordLeft();
- assert.position(selection.getCursor(), 1, 6);
- selection.moveCursorWordLeft();
- assert.position(selection.getCursor(), 1, 1);
- // wrap line
- selection.moveCursorWordLeft();
- assert.position(selection.getCursor(), 0, 0);
- selection.moveCursorWordLeft();
- assert.position(selection.getCursor(), 0, 0);
- },
- "test: moveCursor word left with umlauts" : function() {
- var session = new EditSession(" Fuß Füße");
- session.$selectLongWords = true;
- var selection = session.getSelection();
- selection.moveCursorTo(0, 9);
- selection.moveCursorWordLeft();
- assert.position(selection.getCursor(), 0, 5);
- selection.moveCursorWordLeft();
- assert.position(selection.getCursor(), 0, 1);
- },
- "test: select word left if cursor in word" : function() {
- var session = new EditSession("Juhu Kinners");
- var selection = session.getSelection();
- session.$selectLongWords = true;
- selection.moveCursorTo(0, 8);
- selection.moveCursorWordLeft();
- assert.position(selection.getCursor(), 0, 5);
- },
- "test: select word right and select" : function() {
- var session = new EditSession("Juhu Kinners");
- var selection = session.getSelection();
- selection.moveCursorTo(0, 0);
- selection.selectWordRight();
- var range = selection.getRange();
- assert.position(range.start, 0, 0);
- assert.position(range.end, 0, 4);
- },
- "test: select word left and select" : function() {
- var session = new EditSession("Juhu Kinners");
- var selection = session.getSelection();
- selection.moveCursorTo(0, 3);
- selection.selectWordLeft();
- var range = selection.getRange();
- assert.position(range.start, 0, 0);
- assert.position(range.end, 0, 3);
- },
- "test: select word with cursor in word should select the word" : function() {
- var session = new EditSession("Juhu Kinners 123");
- var selection = session.getSelection();
- selection.moveCursorTo(0, 8);
- selection.selectWord();
- var range = selection.getRange();
- assert.position(range.start, 0, 5);
- assert.position(range.end, 0, 12);
- },
- "test: select word with cursor in word including right whitespace should select the word" : function() {
- var session = new EditSession("Juhu Kinners 123");
- var selection = session.getSelection();
- selection.moveCursorTo(0, 8);
- selection.selectAWord();
- var range = selection.getRange();
- assert.position(range.start, 0, 5);
- assert.position(range.end, 0, 18);
- },
- "test: select word with cursor betwen white space and word should select the word" : function() {
- var session = new EditSession("Juhu Kinners");
- var selection = session.getSelection();
- session.$selectLongWords = true;
- selection.moveCursorTo(0, 4);
- selection.selectWord();
- var range = selection.getRange();
- assert.position(range.start, 0, 0);
- assert.position(range.end, 0, 4);
- selection.moveCursorTo(0, 5);
- selection.selectWord();
- var range = selection.getRange();
- 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() {
- var session = new EditSession("Juhu Kinners");
- var selection = session.getSelection();
- session.$selectLongWords = true;
- selection.moveCursorTo(0, 5);
- selection.selectWord();
- var range = selection.getRange();
- assert.position(range.start, 0, 4);
- assert.position(range.end, 0, 6);
- },
- "test: moving cursor should fire a 'changeCursor' event" : function() {
- var session = new EditSession("Juhu Kinners");
- var selection = session.getSelection();
- session.$selectLongWords = true;
- selection.moveCursorTo(0, 5);
- var called = false;
- selection.addEventListener("changeCursor", function() {
- called = true;
- });
- selection.moveCursorTo(0, 6);
- assert.ok(called);
- },
- "test: calling setCursor with the same position should not fire an event": function() {
- var session = new EditSession("Juhu Kinners");
- var selection = session.getSelection();
- session.$selectLongWords = true;
- selection.moveCursorTo(0, 5);
- var called = false;
- selection.addEventListener("changeCursor", function() {
- called = true;
- });
- selection.moveCursorTo(0, 5);
- assert.notOk(called);
- },
- "test: moveWordright should move past || and [": function() {
- var session = new EditSession("||foo[");
- var selection = session.getSelection();
- session.$selectLongWords = true;
- // Move behind ||foo
- selection.moveCursorWordRight();
- assert.position(selection.getCursor(), 0, 5);
- // Move behind [
- selection.moveCursorWordRight();
- assert.position(selection.getCursor(), 0, 6);
- },
- "test: moveWordLeft should move past || and [": function() {
- var session = new EditSession("||foo[");
- var selection = session.getSelection();
- session.$selectLongWords = true;
- selection.moveCursorTo(0, 6);
- // Move behind [foo
- selection.moveCursorWordLeft();
- assert.position(selection.getCursor(), 0, 2);
- // Move behind ||
- selection.moveCursorWordLeft();
- assert.position(selection.getCursor(), 0, 0);
- },
- "test: move cursor to line start should move cursor to end of the indentation first": function() {
- var session = new EditSession("12\n Juhu\n12");
- var selection = session.getSelection();
- selection.moveCursorTo(1, 6);
- selection.moveCursorLineStart();
- assert.position(selection.getCursor(), 1, 4);
- },
- "test: move cursor to line start when the cursor is at the end of the indentation should move cursor to column 0": function() {
- var session = new EditSession("12\n Juhu\n12");
- var selection = session.getSelection();
- selection.moveCursorTo(1, 4);
- selection.moveCursorLineStart();
- assert.position(selection.getCursor(), 1, 0);
- },
- "test: move cursor to line start when the cursor is at column 0 should move cursor to the end of the indentation": function() {
- var session = new EditSession("12\n Juhu\n12");
- var selection = session.getSelection();
- selection.moveCursorTo(1, 0);
- selection.moveCursorLineStart();
- assert.position(selection.getCursor(), 1, 4);
- },
- // Eclipse style
- "test: move cursor to line start when the cursor is before the initial indentation should move cursor to the end of the indentation": function() {
- var session = new EditSession("12\n Juhu\n12");
- var selection = session.getSelection();
- selection.moveCursorTo(1, 2);
- selection.moveCursorLineStart();
- assert.position(selection.getCursor(), 1, 4);
- },
- "test go line up when in the middle of the first line should go to document start": function() {
- var session = new EditSession("juhu kinners");
- var selection = session.getSelection();
- selection.moveCursorTo(0, 4);
- selection.moveCursorUp();
- assert.position(selection.getCursor(), 0, 0);
- },
- "test: (wrap) go line up when in the middle of the first line should go to document start": function() {
- var session = new EditSession("juhu kinners");
- session.setWrapLimitRange(5, 5);
- session.adjustWrapLimit(80);
- var selection = session.getSelection();
- selection.moveCursorTo(0, 4);
- selection.moveCursorUp();
- assert.position(selection.getCursor(), 0, 0);
- },
- "test go line down when in the middle of the last line should go to document end": function() {
- var session = new EditSession("juhu kinners");
- var selection = session.getSelection();
- selection.moveCursorTo(0, 4);
- selection.moveCursorDown();
- assert.position(selection.getCursor(), 0, 12);
- },
- "test (wrap) go line down when in the middle of the last line should go to document end": function() {
- var session = new EditSession("juhu kinners");
- session.setWrapLimitRange(8, 8);
- session.adjustWrapLimit(80);
- var selection = session.getSelection();
- selection.moveCursorTo(0, 10);
- selection.moveCursorDown();
- assert.position(selection.getCursor(), 0, 12);
- },
- "test go line up twice and then once down when in the second should go back to the previous column": function() {
- var session = new EditSession("juhu\nkinners");
- var selection = session.getSelection();
- selection.moveCursorTo(1, 4);
- selection.moveCursorUp();
- selection.moveCursorUp();
- selection.moveCursorDown();
- assert.position(selection.getCursor(), 1, 4);
- },
- "test (keyboard navigation) when curLine is not EOL and targetLine is all whitespace new column should be current column": function() {
- var session = new EditSession("function (a) {\n \n}");
- var selection = session.getSelection();
- selection.moveCursorTo(2, 0);
- selection.moveCursorUp();
- assert.position(selection.getCursor(), 1, 0);
- },
- "test (keyboard navigation) when curLine is EOL and targetLine is shorter than current column, new column should be targetLine's EOL": function() {
- var session = new EditSession("function (a) {\n \n}");
- var selection = session.getSelection();
- selection.moveCursorTo(0, 14);
- selection.moveCursorDown();
- assert.position(selection.getCursor(), 1, 4);
- },
- "test fromJSON/toJSON": function() {
- var copy = function(data) { return JSON.parse(JSON.stringify(data)); };
- var session = new EditSession("function (a) {\n \n}");
- var selection = session.getSelection();
- selection.moveCursorTo(0, 14);
- selection.moveCursorDown();
- assert.position(selection.getCursor(), 1, 4);
- var data = selection.toJSON();
- selection.moveCursorDown();
- assert.position(selection.getCursor(), 2, 1);
-
- assert.ok(!selection.isEqual(data));
-
- var nCursor = 0;
- var nSelection = 0;
- selection.on("changeCursor", function() { nCursor++; });
- selection.on("changeSelection", function() { nSelection++; });
-
- selection.fromJSON(copy(data));
- assert.equal(nCursor, 1);
- assert.equal(nSelection, 1);
- assert.position(selection.getCursor(), 1, 4);
- assert.ok(selection.isEqual(data));
-
- data.end.column = 10;
- selection.fromJSON(copy(data));
- assert.equal(nCursor, 1);
- assert.equal(nSelection, 1);
- data.end.column = 4;
- assert.ok(selection.isEqual(data));
-
- data.start.row = 0;
- selection.fromJSON(copy(data));
- assert.equal(nCursor, 1);
- assert.equal(nSelection, 2);
- assert.ok(selection.isEqual(data));
-
- data.isBackwards = true;
- selection.fromJSON(copy(data));
- assert.equal(nCursor, 2);
- assert.equal(nSelection, 3);
- assert.ok(selection.isEqual(data));
-
- selection.moveTo(0, 0);
- nCursor = nSelection = 0;
- selection.selectAll();
- assert.equal(nCursor, 1);
- assert.equal(nSelection, 1);
- selection.moveCursorRight();
- selection.clearSelection();
- nCursor = nSelection = 0;
- selection.selectAll();
- assert.equal(nCursor, 0);
- assert.equal(nSelection, 1);
- },
- "test setRange inside fold": function() {
- var session = new EditSession("-\n-fold-\n-");
- var selection = session.getSelection();
- session.addFold(".", new Range(0, 1, 2, 0));
- selection.setRange(new Range(1, 1, 1, 5));
-
- assert.equal(session.getTextRange(), "fold");
- },
-
- "test navigate around line widgets": function() {
- var session = new EditSession(["a", "b", "", "c", "d"]);
- session.widgetManager = new LineWidgets(session);
- var selection = session.getSelection();
- session.widgetManager.addLineWidget({
- row: 0,
- rowCount: 5,
- rowsAbove: 2
- });
- session.widgetManager.addLineWidget({
- row: 1,
- rowCount: 3,
- rowsAbove: 1
- });
- session.widgetManager.addLineWidget({
- row: 3,
- rowCount: 4
- });
- assert.position(session.documentToScreenPosition(3, 1), 11, 1);
-
- session.selection.moveCursorLineEnd();
- session.selection.moveCursorUp();
- assert.position(selection.cursor, 0, 0);
- session.selection.moveCursorDown();
- assert.position(selection.cursor, 1, 1);
- session.selection.moveCursorDown();
- assert.position(selection.cursor, 2, 0);
- session.selection.moveCursorDown();
- assert.position(selection.cursor, 3, 1);
- session.selection.moveCursorUp();
- assert.position(selection.cursor, 2, 0);
- session.selection.moveCursorUp();
- assert.position(selection.cursor, 1, 1);
- },
- "test selectLine": function() {
- var session = new EditSession(" text -\n-fold- \n-");
- var selection = session.getSelection();
- selection.selectLine();
- assert.range(selection.getRange(), 0, 0, 1, 0);
- selection.clearSelection();
- assert.position(selection.getAnchor(), 1, 0);
-
- selection.moveCursorLineEnd();
- assert.position(selection.getAnchor(), 1, 9);
- selection.moveCursorLineEnd();
- assert.position(selection.getAnchor(), 1, 6);
-
- selection.selectLineStart();
- assert.range(selection.getRange(), 1, 0, 1, 6);
- }
- };
- });
- if (typeof module !== "undefined" && module === ace_require.main) {
- ace_require("asyncjs").test.testcase(module.exports).exec();
- }
|