221 lines
6.3 KiB
JavaScript
221 lines
6.3 KiB
JavaScript
|
if (typeof process !== "undefined") {
|
||
|
require("amd-loader");
|
||
|
}
|
||
|
|
||
|
define(function(require, exports, module) {
|
||
|
"use strict";
|
||
|
|
||
|
require("../test/mockdom");
|
||
|
var ace = require("../ace");
|
||
|
var assert = require("assert");
|
||
|
var EditSession = require("../edit_session").EditSession;
|
||
|
var UndoManager = require("../undomanager").UndoManager;
|
||
|
var whitespace = require("./whitespace");
|
||
|
|
||
|
// Execution ORDER: test.setUpSuite, setUp, testFn, tearDown, test.tearDownSuite
|
||
|
module.exports = {
|
||
|
timeout: 10000,
|
||
|
|
||
|
"test tab detection": function(next) {
|
||
|
var s = new EditSession([
|
||
|
"define({",
|
||
|
"\tfoo:1,",
|
||
|
"\tbar:2,",
|
||
|
"\tbaz:{,",
|
||
|
"\t\tx:3",
|
||
|
"\t}",
|
||
|
"})"
|
||
|
]);
|
||
|
|
||
|
var indent = whitespace.$detectIndentation(s.doc.$lines);
|
||
|
assert.equal(indent.ch, "\t");
|
||
|
assert.equal(indent.length, undefined);
|
||
|
|
||
|
s.insert({row: 0, column: 0}, " ");
|
||
|
indent = whitespace.$detectIndentation(s.doc.$lines);
|
||
|
assert.equal(indent.ch, "\t");
|
||
|
assert.equal(indent.length, undefined);
|
||
|
s.doc.removeInLine(0, 0, 2);
|
||
|
|
||
|
s.insert({row: 0, column: 0}, "x\n y\n z\n");
|
||
|
indent = whitespace.$detectIndentation(s.doc.$lines);
|
||
|
assert.equal(indent.ch, "\t");
|
||
|
assert.equal(indent.length, 4);
|
||
|
|
||
|
s.setValue("");
|
||
|
indent = whitespace.$detectIndentation(s.doc.$lines);
|
||
|
assert.ok(!indent);
|
||
|
|
||
|
next();
|
||
|
},
|
||
|
|
||
|
"test empty session": function(next) {
|
||
|
var s = new EditSession([
|
||
|
"define({",
|
||
|
"foo:1,",
|
||
|
"})"
|
||
|
]);
|
||
|
var indent = whitespace.$detectIndentation(s.doc.$lines);
|
||
|
assert.ok(!indent);
|
||
|
s.insert({row: 1, column: 0}, " x\n ");
|
||
|
|
||
|
indent = whitespace.$detectIndentation(s.doc.$lines);
|
||
|
assert.equal(indent.ch, " ");
|
||
|
assert.equal(indent.length, 4);
|
||
|
|
||
|
next();
|
||
|
},
|
||
|
|
||
|
"!test one line": function(next) {
|
||
|
var s = new EditSession([
|
||
|
"define({",
|
||
|
" foo:1,",
|
||
|
"})"
|
||
|
]);
|
||
|
var indent = whitespace.$detectIndentation(s.doc.$lines);
|
||
|
assert.equal(indent.ch, " ");
|
||
|
assert.equal(indent.length, 4);
|
||
|
|
||
|
next();
|
||
|
},
|
||
|
|
||
|
"test 1 width indents": function(next) {
|
||
|
var s = new EditSession([
|
||
|
"define({",
|
||
|
" foo:1,",
|
||
|
"})",
|
||
|
"define({",
|
||
|
" bar:1,",
|
||
|
"})",
|
||
|
" t",
|
||
|
" t",
|
||
|
" t",
|
||
|
" t",
|
||
|
" t",
|
||
|
" t",
|
||
|
" t",
|
||
|
" t"
|
||
|
]);
|
||
|
var indent = whitespace.$detectIndentation(s.doc.$lines);
|
||
|
// assert.equal(indent.ch, " ");
|
||
|
// assert.equal(indent.length, 4);
|
||
|
|
||
|
s = new EditSession([
|
||
|
"{",
|
||
|
" foo:1,",
|
||
|
" bar: {",
|
||
|
" baz:2",
|
||
|
" }",
|
||
|
"}"
|
||
|
]);
|
||
|
indent = whitespace.$detectIndentation(s.doc.$lines);
|
||
|
assert.equal(indent.ch, " ");
|
||
|
assert.equal(indent.length, 1);
|
||
|
|
||
|
next();
|
||
|
},
|
||
|
|
||
|
"test trimTrailingSpace": function(next) {
|
||
|
var session = new EditSession([
|
||
|
"a",
|
||
|
"\t b \t",
|
||
|
" ",
|
||
|
"\t",
|
||
|
"\t\tx\t\t",
|
||
|
" ",
|
||
|
" "
|
||
|
]);
|
||
|
session.setUndoManager(new UndoManager());
|
||
|
|
||
|
function testOne(value, options) {
|
||
|
whitespace.trimTrailingSpace(session, options);
|
||
|
assert.equal(value, session.getValue());
|
||
|
session.markUndoGroup();
|
||
|
session.getUndoManager().undo();
|
||
|
}
|
||
|
|
||
|
testOne("a\n\t b\n \n\t\n\t\tx\n \n ");
|
||
|
|
||
|
testOne("a\n\t b\n\n\n\t\tx\n\n", {
|
||
|
trimEmpty: true
|
||
|
});
|
||
|
|
||
|
session.selection.fromJSON([{
|
||
|
start: {row:2,column:3},
|
||
|
end: {row:4,column:4}
|
||
|
}]);
|
||
|
testOne("a\n\t b\n\n\n\t\tx\t\n\n", {
|
||
|
keepCursorPosition: true,
|
||
|
trimEmpty: true
|
||
|
});
|
||
|
|
||
|
session.selection.fromJSON([{
|
||
|
start: {row:2,column:3},
|
||
|
end: {row:4,column:4},
|
||
|
isBackwards: true
|
||
|
}]);
|
||
|
testOne("a\n\t b\n \n\n\t\tx\n\n", {
|
||
|
keepCursorPosition: true,
|
||
|
trimEmpty: true
|
||
|
});
|
||
|
|
||
|
session.selection.$initRangeList();
|
||
|
session.selection.fromJSON([{
|
||
|
start: {row:2, column:3},
|
||
|
end: {row:2,column:3}
|
||
|
}, {
|
||
|
start: {row:1, column:1},
|
||
|
end: {row:1, column:1}
|
||
|
}, {
|
||
|
start: {row:2,column:2},
|
||
|
end: {row:2,column:2}
|
||
|
}, {
|
||
|
start: {row:0,column:5},
|
||
|
end: {row:0,column:5},
|
||
|
isBackwards:false
|
||
|
}, {
|
||
|
start: {row:6,column:1},
|
||
|
end: {row:6,column:1},
|
||
|
isBackwards:false
|
||
|
}]);
|
||
|
testOne("a\n\t b\n \n\n\t\tx\n\n ", {
|
||
|
trimEmpty: true,
|
||
|
keepCursorPosition: true
|
||
|
});
|
||
|
|
||
|
session.setValue("some text");
|
||
|
session.selection.fromJSON([{
|
||
|
start: {row:0,column:4},
|
||
|
end: {row:0,column:4}
|
||
|
}]);
|
||
|
testOne("some text", {
|
||
|
keepCursorPosition: true,
|
||
|
trimEmpty: true
|
||
|
});
|
||
|
|
||
|
next();
|
||
|
},
|
||
|
|
||
|
"test convertIndentation": function() {
|
||
|
var value = "\ta\n\t\tb\n\t\t\n\t\tc";
|
||
|
var editor = ace.edit(null, {value: value});
|
||
|
editor.commands.addCommands(whitespace.commands);
|
||
|
editor.execCommand("detectIndentation");
|
||
|
editor.execCommand("convertIndentation", "s8");
|
||
|
assert.equal(editor.getValue(), value.replace(/\t/g, " "));
|
||
|
editor.execCommand("setIndentation", "s4");
|
||
|
editor.execCommand("convertIndentation", "t1");
|
||
|
assert.equal(editor.getValue(), value.replace(/\t/g, "\t\t"));
|
||
|
editor.execCommand("convertIndentation", {text: "space"});
|
||
|
editor.execCommand("trimTrailingSpace", {trimEmpty: true});
|
||
|
assert.equal(editor.getValue(), value.replace(/\t/g, " ").replace(/ *$/gm, ""));
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
});
|
||
|
|
||
|
if (typeof module !== "undefined" && module === require.main) {
|
||
|
require("asyncjs").test.testcase(module.exports).exec();
|
||
|
}
|