提交 23d0b17f 编写于 作者: A Alex Dima

Prepare model to get passed in the default eol

上级 6ca06f6e
......@@ -1000,6 +1000,20 @@ export enum EndOfLinePreference {
CRLF = 2
}
/**
* The default end of line to use when instantiating models.
*/
export enum DefaultEndOfLine {
/**
* Use line feed (\n) as the end of line character.
*/
LF = 1,
/**
* Use carriage return and line feed (\r\n) as the end of line character.
*/
CRLF = 2
}
/**
* End of line character preference.
*/
......@@ -1933,6 +1947,7 @@ export interface IRawText {
lines: string[];
BOM: string;
EOL: string;
defaultEOL: DefaultEndOfLine;
}
/**
* An event describing that a model has been reset to a new value.
......
......@@ -259,7 +259,7 @@ export class MirrorModelEmbedded extends AbstractMirrorModel implements editorCo
endColumn: lastColumn
}, ' ');
return TextModel.toRawText(resultingText);
return TextModel.toRawText(resultingText, actualModel.toRawText().defaultEOL);
}
public setIncludedRanges(newIncludedRanges:editorCommon.IRange[]): void {
......@@ -287,8 +287,8 @@ class EmbeddedModeRange {
}
}
export function createMirrorModelFromString(resourceService:IResourceService, versionId:number, value:string, mode:IMode, associatedResource?:URI): MirrorModel {
return new MirrorModel(resourceService, versionId, TextModel.toRawText(value), mode, associatedResource);
export function createMirrorModelFromString(resourceService:IResourceService, versionId:number, value:string, defaultEOL: editorCommon.DefaultEndOfLine, mode:IMode, associatedResource?:URI): MirrorModel {
return new MirrorModel(resourceService, versionId, TextModel.toRawText(value, defaultEOL), mode, associatedResource);
}
export class MirrorModel extends AbstractMirrorModel implements editorCommon.IMirrorModel {
......
......@@ -6,7 +6,7 @@
import URI from 'vs/base/common/uri';
import {TPromise} from 'vs/base/common/winjs.base';
import {EventType, IModel} from 'vs/editor/common/editorCommon';
import {EventType, IModel, DefaultEndOfLine} from 'vs/editor/common/editorCommon';
import {EditableTextModel} from 'vs/editor/common/model/editableTextModel';
import {TextModel} from 'vs/editor/common/model/textModel';
import {IMode} from 'vs/editor/common/modes';
......@@ -49,10 +49,10 @@ export class Model extends EditableTextModel implements IModel {
* The resource associated with this model. If the value is not provided an
* unique in memory URL is constructed as the associated resource.
*/
constructor(rawText:string, modeOrPromise:IMode|TPromise<IMode>, associatedResource:URI=null) {
constructor(rawText:string, defaultEOL:DefaultEndOfLine, modeOrPromise:IMode|TPromise<IMode>, associatedResource:URI=null) {
super([
EventType.ModelDispose
], TextModel.toRawText(rawText), modeOrPromise);
], TextModel.toRawText(rawText, defaultEOL), modeOrPromise);
// Generate a new unique model id
MODEL_ID++;
......
......@@ -5,7 +5,6 @@
'use strict';
import {OrderGuaranteeEventEmitter} from 'vs/base/common/eventEmitter';
import * as platform from 'vs/base/common/platform';
import * as strings from 'vs/base/common/strings';
import {Position} from 'vs/editor/common/core/position';
import {Range} from 'vs/editor/common/core/range';
......@@ -15,7 +14,6 @@ import {ModelLine} from 'vs/editor/common/model/modelLine';
var __space = ' '.charCodeAt(0);
var __tab = '\t'.charCodeAt(0);
var LIMIT_FIND_COUNT = 999;
var DEFAULT_PLATFORM_EOL = (platform.isLinux || platform.isMacintosh) ? '\n' : '\r\n';
export interface IIndentationFactors {
/**
......@@ -38,6 +36,7 @@ export class TextModel extends OrderGuaranteeEventEmitter implements editorCommo
_EOL:string;
_isDisposed:boolean;
_isDisposing:boolean;
private _defaultEOL:editorCommon.DefaultEndOfLine;
private _versionId:number;
/**
......@@ -50,6 +49,7 @@ export class TextModel extends OrderGuaranteeEventEmitter implements editorCommo
allowedEventTypes.push(editorCommon.EventType.ModelContentChanged);
super(allowedEventTypes);
this._defaultEOL = rawText.defaultEOL;
this._constructLines(rawText);
this._setVersionId(1);
this._isDisposed = false;
......@@ -130,7 +130,7 @@ export class TextModel extends OrderGuaranteeEventEmitter implements editorCommo
}
_resetValue(e:editorCommon.IModelContentChangedFlushEvent, newValue:string): void {
this._constructLines(TextModel.toRawText(newValue));
this._constructLines(TextModel.toRawText(newValue, this._defaultEOL));
this._increaseVersionId();
e.detail = this.toRawText();
......@@ -142,7 +142,8 @@ export class TextModel extends OrderGuaranteeEventEmitter implements editorCommo
BOM: this._BOM,
EOL: this._EOL,
lines: this.getLinesContent(),
length: this.getValueLength()
length: this.getValueLength(),
defaultEOL: this._defaultEOL
};
}
......@@ -772,7 +773,7 @@ export class TextModel extends OrderGuaranteeEventEmitter implements editorCommo
}
}
public static toRawText(rawText:string): editorCommon.IRawText {
public static toRawText(rawText:string, defaultEOL:editorCommon.DefaultEndOfLine): editorCommon.IRawText {
// Count the number of lines that end with \r\n
var carriageReturnCnt = 0,
lastCarriageReturnIndex = -1;
......@@ -794,7 +795,7 @@ export class TextModel extends OrderGuaranteeEventEmitter implements editorCommo
var EOL = '';
if (lineFeedCnt === 0) {
// This is an empty file or a file with precisely one line
EOL = DEFAULT_PLATFORM_EOL;
EOL = (defaultEOL === editorCommon.DefaultEndOfLine.LF ? '\n' : '\r\n');
} else if (carriageReturnCnt > lineFeedCnt / 2) {
// More than half of the file contains \r\n ending lines
EOL = '\r\n';
......@@ -807,7 +808,8 @@ export class TextModel extends OrderGuaranteeEventEmitter implements editorCommo
BOM: BOM,
EOL: EOL,
lines: lines,
length: rawText.length
length: rawText.length,
defaultEOL: defaultEOL
};
}
......
......@@ -23,6 +23,7 @@ import {IMode} from 'vs/editor/common/modes';
import {IModeService} from 'vs/editor/common/services/modeService';
import {IModelService} from 'vs/editor/common/services/modelService';
import {IResourceService} from 'vs/editor/common/services/resourceService';
import * as platform from 'vs/base/common/platform';
export interface IRawModelData {
url:URI;
......@@ -230,8 +231,9 @@ export class ModelServiceImpl implements IModelService {
}
private _createModelData(value:string, modeOrPromise:TPromise<IMode>|IMode, resource: URI): ModelData {
let defaultEOL = (platform.isLinux || platform.isMacintosh) ? editorCommon.DefaultEndOfLine.LF : editorCommon.DefaultEndOfLine.CRLF;
// create & save the model
let model = new Model(value, modeOrPromise, resource);
let model = new Model(value, defaultEOL, modeOrPromise, resource);
let modelId = MODEL_ID(model.getAssociatedResource());
if (this._models[modelId]) {
......
......@@ -8,10 +8,11 @@ import * as assert from 'assert';
import {Model} from 'vs/editor/common/model/model';
import {IFoldingRange} from 'vs/editor/contrib/folding/common/foldingRange';
import {computeRanges} from 'vs/editor/contrib/folding/common/indentFoldStrategy';
import {DefaultEndOfLine} from 'vs/editor/common/editorCommon';
suite('Folding', () => {
function assertRanges(lines: string[], tabSize: number, expected:IFoldingRange[]): void {
let model = new Model(lines.join('\n'), null);
let model = new Model(lines.join('\n'), DefaultEndOfLine.LF, null);
let actual = computeRanges(model, tabSize);
actual.sort((r1, r2) => r1.startLineNumber - r2.startLineNumber);
assert.deepEqual(actual, expected);
......
......@@ -7,7 +7,7 @@
import * as assert from 'assert';
import {Range} from 'vs/editor/common/core/range';
import {Selection} from 'vs/editor/common/core/selection';
import {ISingleEditOperation} from 'vs/editor/common/editorCommon';
import {ISingleEditOperation, DefaultEndOfLine} from 'vs/editor/common/editorCommon';
import {Model} from 'vs/editor/common/model/model';
import {EditOperationsCommand} from 'vs/editor/contrib/format/common/formatCommand';
import {testCommand} from 'vs/editor/test/common/commands/commandTestUtils';
......@@ -22,7 +22,7 @@ function editOp(startLineNumber: number, startColumn: number, endLineNumber: num
suite('FormatCommand.trimEdit', () => {
function testTrimEdit(lines: string[], edit:ISingleEditOperation, expected:ISingleEditOperation): void {
let model = new Model(lines.join('\n'), null);
let model = new Model(lines.join('\n'), DefaultEndOfLine.LF, null);
let actual = EditOperationsCommand.trimEdit(edit, model);
assert.deepEqual(actual, expected);
model.dispose();
......
......@@ -446,7 +446,7 @@ export class ReferenceWidget extends PeekViewWidget {
this.preview = this.instantiationService.createInstance(EmbeddedCodeEditorWidget, div.getHTMLElement(), options, this.editor);
this.previewContainer = div.hide();
this.previewNotAvailableMessage = new Model(nls.localize('missingPreviewMessage', "no preview available"), null);
this.previewNotAvailableMessage = new Model(nls.localize('missingPreviewMessage', "no preview available"), editorCommon.DefaultEndOfLine.LF, null);
});
// tree
......
......@@ -22,7 +22,7 @@ export function testCommand(
expectedSelection: Selection
): void {
let model = new Model(lines.join('\n'), mode);
let model = new Model(lines.join('\n'), editorCommon.DefaultEndOfLine.LF, mode);
let config = new MockConfiguration(null);
let cursor = new Cursor(0, config, model, null, false);
......
......@@ -9,13 +9,13 @@ import {Cursor} from 'vs/editor/common/controller/cursor';
import {EditOperation} from 'vs/editor/common/core/editOperation';
import {Position} from 'vs/editor/common/core/position';
import {Selection} from 'vs/editor/common/core/selection';
import {IIdentifiedSingleEditOperation} from 'vs/editor/common/editorCommon';
import {IIdentifiedSingleEditOperation, DefaultEndOfLine} from 'vs/editor/common/editorCommon';
import {Model} from 'vs/editor/common/model/model';
import {ILineEdit, ModelLine} from 'vs/editor/common/model/modelLine';
import {MockConfiguration} from 'vs/editor/test/common/mocks/mockConfiguration';
function testCommand(lines:string[], selection:Selection, edits:IIdentifiedSingleEditOperation[], expectedLines:string[], expectedSelection:Selection): void {
let model = new Model(lines.join('\n'), null);
let model = new Model(lines.join('\n'), DefaultEndOfLine.LF, null);
let config = new MockConfiguration(null);
let cursor = new Cursor(0, config, model, null, false);
......
......@@ -9,7 +9,7 @@ import {Cursor} from 'vs/editor/common/controller/cursor';
import {EditOperation} from 'vs/editor/common/core/editOperation';
import {Position} from 'vs/editor/common/core/position';
import {Range} from 'vs/editor/common/core/range';
import {EndOfLinePreference, EventType, Handler, IPosition, ISelection} from 'vs/editor/common/editorCommon';
import {EndOfLinePreference, EventType, Handler, IPosition, ISelection, DefaultEndOfLine} from 'vs/editor/common/editorCommon';
import {Model} from 'vs/editor/common/model/model';
import {IMode, IRichEditSupport, IndentAction} from 'vs/editor/common/modes';
import {RichEditSupport} from 'vs/editor/common/modes/supports/richEditSupport';
......@@ -136,7 +136,7 @@ suite('Editor Controller - Cursor', () => {
LINE4 + '\r\n' +
LINE5;
thisModel = new Model(text, null);
thisModel = new Model(text, DefaultEndOfLine.LF, null);
thisConfiguration = new MockConfiguration(null);
thisCursor = new Cursor(1, thisConfiguration, thisModel, null, false);
});
......@@ -980,7 +980,7 @@ suite('Editor Controller - Regression tests', () => {
'asdasd',
'qwerty'
];
let model = new Model(text.join('\n'), null);
let model = new Model(text.join('\n'), DefaultEndOfLine.LF, null);
let cursor = new Cursor(1, new MockConfiguration({ insertSpaces: false, tabSize: 4 }), model, null, true);
moveTo(cursor, 2, 1, false);
......@@ -998,7 +998,7 @@ suite('Editor Controller - Regression tests', () => {
'asdasd',
''
];
model = new Model(text.join('\n'), null);
model = new Model(text.join('\n'), DefaultEndOfLine.LF, null);
cursor = new Cursor(1, new MockConfiguration({ insertSpaces: false, tabSize: 4 }), model, null, true);
moveTo(cursor, 2, 1, false);
......@@ -1507,7 +1507,7 @@ interface ICursorOpts {
}
function usingCursor(opts:ICursorOpts, callback:(model:Model, cursor:Cursor)=>void): void {
let model = new Model(opts.text.join('\n'), opts.mode);
let model = new Model(opts.text.join('\n'), DefaultEndOfLine.LF, opts.mode);
let config = new MockConfiguration(opts.config);
let cursor = new Cursor(1, config, model, null, false);
......
......@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
import {IPosition} from 'vs/editor/common/editorCommon';
import {IPosition, DefaultEndOfLine} from 'vs/editor/common/editorCommon';
import {Model} from 'vs/editor/common/model/model';
export function pos(lineNumber:number, column:number): IPosition {
......@@ -15,7 +15,7 @@ export function pos(lineNumber:number, column:number): IPosition {
}
export function withEditorModel(text:string[], callback:(model:Model) => void): void {
var model = new Model(text.join('\n'), null);
var model = new Model(text.join('\n'), DefaultEndOfLine.LF, null);
callback(model);
model.dispose();
}
......@@ -66,7 +66,7 @@ export function withMockCodeEditor(text:string[], options:editorCommon.ICodeEdit
telemetryService: telemetryService
});
let model = new Model(text.join('\n'), null);
let model = new Model(text.join('\n'), editorCommon.DefaultEndOfLine.LF, null);
let editor = new MockCodeEditor(new MockScopeLocation(), options, instantiationService, codeEditorService, keybindingService, telemetryService);
editor.setModel(model);
......
......@@ -6,7 +6,7 @@
import * as assert from 'assert';
import {Range} from 'vs/editor/common/core/range';
import {EndOfLinePreference, EndOfLineSequence, EventType, IIdentifiedSingleEditOperation, IModelContentChangedEvent2} from 'vs/editor/common/editorCommon';
import {EndOfLinePreference, EndOfLineSequence, EventType, IIdentifiedSingleEditOperation, IModelContentChangedEvent2, DefaultEndOfLine} from 'vs/editor/common/editorCommon';
import {EditableTextModel, IValidatedEditOperation} from 'vs/editor/common/model/editableTextModel';
import {MirrorModel2} from 'vs/editor/common/model/mirrorModel2';
import {TextModel} from 'vs/editor/common/model/textModel';
......@@ -273,7 +273,7 @@ suite('EditorModel - EditableTextModel._toSingleEditOperation', () => {
}
function testSimpleApplyEdits(original:string[], edits:IValidatedEditOperation[], expected:IValidatedEditOperation): void {
let model = new EditableTextModel([], TextModel.toRawText(original.join('\n')), null);
let model = new EditableTextModel([], TextModel.toRawText(original.join('\n'), DefaultEndOfLine.LF), null);
model.setEOL(EndOfLineSequence.LF);
let actual = model._toSingleEditOperation(edits);
......@@ -1228,7 +1228,7 @@ suite('EditorModel - EditableTextModel.applyEdits', () => {
});
test('issue #1580: Changes in line endings are not correctly reflected in the extension host, leading to invalid offsets sent to external refactoring tools', () => {
let model = new EditableTextModel([], TextModel.toRawText('Hello\nWorld!'), null);
let model = new EditableTextModel([], TextModel.toRawText('Hello\nWorld!', DefaultEndOfLine.LF), null);
assert.equal(model.getEOL(), '\n');
let mirrorModel2 = new MirrorModel2(null, model.toRawText().lines, model.toRawText().EOL, model.getVersionId());
......@@ -1299,7 +1299,7 @@ suite('EditorModel - EditableTextModel.applyEdits & markers', () => {
// var expectedMarkersMap = toMarkersMap(expectedMarkers);
var markerId2ModelMarkerId = Object.create(null);
var model = new EditableTextModel([], TextModel.toRawText(textStr), null);
var model = new EditableTextModel([], TextModel.toRawText(textStr, DefaultEndOfLine.LF), null);
model.setEOL(EndOfLineSequence.LF);
// Add markers
......
......@@ -38,7 +38,7 @@ export function testApplyEditsWithSyncedModels(original:string[], edits:editorCo
}
export function assertSyncedModels(text:string, callback:(model:EditableTextModel, assertMirrorModels:()=>void)=>void, setup:(model:EditableTextModel)=>void = null): void {
var model = new EditableTextModel([], TextModel.toRawText(text), null);
var model = new EditableTextModel([], TextModel.toRawText(text, editorCommon.DefaultEndOfLine.LF), null);
model.setEOL(editorCommon.EndOfLineSequence.LF);
if (setup) {
......
......@@ -76,7 +76,7 @@ suite('Editor Model - MirrorModel', () => {
var mirrorModel:MirrorModel;
setup(() => {
mirrorModel = createMirrorModelFromString(null, 0, 'line1\nline2\nline3\nline4', createMockMode('mock.mode.id'));
mirrorModel = createMirrorModelFromString(null, 0, 'line1\nline2\nline3\nline4', editorCommon.DefaultEndOfLine.LF, createMockMode('mock.mode.id'));
});
teardown(() => {
......@@ -103,7 +103,8 @@ suite('Editor Model - MirrorModel', () => {
'bar'
],
BOM: '',
EOL: '\n'
EOL: '\n',
defaultEOL: editorCommon.DefaultEndOfLine.LF
})]));
assert.equal(mirrorModel.getLineStart(1), 0);
......@@ -125,7 +126,7 @@ suite('Editor Model - MirrorModel', () => {
});
test('get (all/unique) words', () => {
var model = createMirrorModelFromString(null, 0, 'foo bar foo bar', createMockMode('mock.mode.id'));
var model = createMirrorModelFromString(null, 0, 'foo bar foo bar', editorCommon.DefaultEndOfLine.LF, createMockMode('mock.mode.id'));
var words = model.getAllWords();
var uniqueWords = model.getAllUniqueWords();
assert.equal(words.length, 4);
......@@ -137,7 +138,7 @@ suite('Editor Model - MirrorModel', () => {
assert.equal(uniqueWords[0], 'foo');
assert.equal(uniqueWords[1], 'bar');
model = createMirrorModelFromString(null, 0, 'foo bar\nfoo\nbar', createMockMode('mock.mode.id'));
model = createMirrorModelFromString(null, 0, 'foo bar\nfoo\nbar', editorCommon.DefaultEndOfLine.LF, createMockMode('mock.mode.id'));
words = model.getAllWords();
uniqueWords = model.getAllUniqueWords();
assert.equal(words.length, 4);
......@@ -154,7 +155,7 @@ suite('Editor Model - MirrorModel', () => {
var pos = { lineNumber: 1, column: 3 };
assert.equal(mirrorModel.getWordAtPosition(pos).word, 'line1');
var model = createMirrorModelFromString(null, 0, 'foo bar 1234 :";\'', createMockMode('mock.mode.id'));
var model = createMirrorModelFromString(null, 0, 'foo bar 1234 :";\'', editorCommon.DefaultEndOfLine.LF, createMockMode('mock.mode.id'));
assert.equal(model.getWordAtPosition({lineNumber: 1, column: 1}).word, 'foo');
assert.equal(model.getWordAtPosition({lineNumber: 1, column: 2}).word, 'foo');
assert.equal(model.getWordAtPosition({lineNumber: 1, column: 3}).word, 'foo');
......@@ -189,7 +190,7 @@ suite('Editor Model - MirrorModel', () => {
assert.equal(wordsWithRanges[3].text, 'line4');
equalRange(wordsWithRanges[3].range, { startLineNumber: 4, startColumn: 1, endLineNumber: 4, endColumn: 6 });
var model = createMirrorModelFromString(null, 0, 'foo bar\nfoo\nbar', createMockMode('mock.mode.id'));
var model = createMirrorModelFromString(null, 0, 'foo bar\nfoo\nbar', editorCommon.DefaultEndOfLine.LF, createMockMode('mock.mode.id'));
wordsWithRanges = model.getAllWordsWithRange();
assert.equal(wordsWithRanges.length, 4);
assert.equal(wordsWithRanges[0].text, 'foo');
......@@ -208,7 +209,7 @@ suite('Editor Model - MirrorModel Eventing', () => {
var mirrorModel:MirrorModel;
setup(() => {
mirrorModel = createMirrorModelFromString(null, 0, 'line one\nline two\nline three\nline four', createMockMode('mock.mode.id'));
mirrorModel = createMirrorModelFromString(null, 0, 'line one\nline two\nline three\nline four', editorCommon.DefaultEndOfLine.LF, createMockMode('mock.mode.id'));
});
teardown(() => {
......@@ -328,7 +329,8 @@ suite('Editor Model - MirrorModel Eventing', () => {
'bar'
],
BOM: '',
EOL: '\n'
EOL: '\n',
defaultEOL: editorCommon.DefaultEndOfLine.LF
})]));
assert.equal(mirrorModel.getLineContent(1), 'foo');
......
......@@ -6,7 +6,7 @@
import * as assert from 'assert';
import {Range} from 'vs/editor/common/core/range';
import {IFoundBracket} from 'vs/editor/common/editorCommon';
import {IFoundBracket, DefaultEndOfLine} from 'vs/editor/common/editorCommon';
import {TextModel} from 'vs/editor/common/model/textModel';
import {TextModelWithTokens} from 'vs/editor/common/model/textModelWithTokens';
......@@ -60,7 +60,7 @@ suite('TextModelWithTokens', () => {
}
}
let model = new TextModelWithTokens([], TextModel.toRawText(contents.join('\n')), false, null);
let model = new TextModelWithTokens([], TextModel.toRawText(contents.join('\n'), DefaultEndOfLine.LF), false, null);
// findPrevBracket
{
......
......@@ -6,6 +6,7 @@
import * as assert from 'assert';
import {EditOperation} from 'vs/editor/common/core/editOperation';
import {DefaultEndOfLine} from 'vs/editor/common/editorCommon';
import {Position} from 'vs/editor/common/core/position';
import {Range} from 'vs/editor/common/core/range';
import {Model} from 'vs/editor/common/model/model';
......@@ -61,7 +62,7 @@ suite('Editor Model - Model Modes 1', () => {
LINE3 + '\n' +
LINE4 + '\r\n' +
LINE5;
thisModel = new Model(text, thisHighlighter);
thisModel = new Model(text, DefaultEndOfLine.LF, thisHighlighter);
});
teardown(() => {
......@@ -179,7 +180,7 @@ suite('Editor Model - Model Modes 2', () => {
'Line3' + '\n' +
'Line4' + '\r\n' +
'Line5';
thisModel = new Model(text, thisHighlighter);
thisModel = new Model(text, DefaultEndOfLine.LF, thisHighlighter);
});
teardown(() => {
......@@ -259,7 +260,7 @@ suite('Editor Model - Token Iterator', () => {
'foobarfoobar' + '\r\n' +
'foobarfoobar' + '\r\n' +
'foobarfoobar' + '\r\n';
thisModel = new Model(text, nmode);
thisModel = new Model(text, DefaultEndOfLine.LF, nmode);
});
teardown(() => {
......
......@@ -8,7 +8,7 @@ import * as assert from 'assert';
import {EditOperation} from 'vs/editor/common/core/editOperation';
import {Position} from 'vs/editor/common/core/position';
import {Range} from 'vs/editor/common/core/range';
import {EventType, IModelContentChangedEvent, IModelContentChangedFlushEvent} from 'vs/editor/common/editorCommon';
import {EventType, IModelContentChangedEvent, IModelContentChangedFlushEvent, DefaultEndOfLine} from 'vs/editor/common/editorCommon';
import {Model} from 'vs/editor/common/model/model';
import {BracketMode} from 'vs/editor/test/common/testModes';
......@@ -55,7 +55,7 @@ suite('Editor Model - Model', () => {
LINE3 + '\n' +
LINE4 + '\r\n' +
LINE5;
thisModel = new Model(text, null);
thisModel = new Model(text, DefaultEndOfLine.LF, null);
});
teardown(() => {
......@@ -361,7 +361,7 @@ suite('Editor Model - Model Line Separators', () => {
LINE3 + '\u2028' +
LINE4 + '\r\n' +
LINE5;
thisModel = new Model(text, null);
thisModel = new Model(text, DefaultEndOfLine.LF, null);
});
teardown(() => {
......@@ -377,7 +377,7 @@ suite('Editor Model - Model Line Separators', () => {
});
test('Bug 13333:Model should line break on lonely CR too', () => {
var model = new Model('Hello\rWorld!\r\nAnother line', null);
var model = new Model('Hello\rWorld!\r\nAnother line', DefaultEndOfLine.LF, null);
assert.equal(model.getLineCount(), 3);
assert.equal(model.getValue(), 'Hello\r\nWorld!\r\nAnother line');
model.dispose();
......@@ -399,7 +399,7 @@ suite('Editor Model - Bracket Matching', () => {
'}, bar: {hallo: [{' + '\n' +
'}, {' + '\n' +
'}]}}';
thisModel = new Model(text, bracketMode);
thisModel = new Model(text, DefaultEndOfLine.LF, bracketMode);
});
teardown(() => {
......@@ -464,7 +464,7 @@ suite('Editor Model - Bracket Matching 2', () => {
var text =
')]}{[(' + '\n' +
')]}{[(';
thisModel = new Model(text, bracketMode);
thisModel = new Model(text, DefaultEndOfLine.LF, bracketMode);
});
teardown(() => {
......@@ -499,7 +499,7 @@ suite('Editor Model - Words', () => {
setup(() => {
var text = [ 'This text has some words. ' ];
thisModel = new Model(text.join('\n'), null);
thisModel = new Model(text.join('\n'), DefaultEndOfLine.LF, null);
});
teardown(() => {
......@@ -552,7 +552,7 @@ suite('Editor Model - Find', () => {
'It is also interesting if it\'s part of a word like amazingFooBar',
'Again nothing interesting here'
];
thisModel = new Model(text.join('\n'), null);
thisModel = new Model(text.join('\n'), DefaultEndOfLine.LF, null);
});
teardown(() => {
......@@ -638,7 +638,7 @@ suite('Editor Model - Find', () => {
'',
'Again nothing interesting here'
];
var model = new Model(text.join('\n'), null);
var model = new Model(text.join('\n'), DefaultEndOfLine.LF, null);
var ranges = [
[2, 1, 2, 1],
......
......@@ -8,7 +8,7 @@ import * as assert from 'assert';
import {EditOperation} from 'vs/editor/common/core/editOperation';
import {Position} from 'vs/editor/common/core/position';
import {Range} from 'vs/editor/common/core/range';
import {EventType, IModelDeltaDecoration, IRange, TrackedRangeStickiness} from 'vs/editor/common/editorCommon';
import {EventType, IModelDeltaDecoration, IRange, TrackedRangeStickiness, DefaultEndOfLine} from 'vs/editor/common/editorCommon';
import {Model} from 'vs/editor/common/model/model';
// --------- utils
......@@ -87,7 +87,7 @@ suite('Editor Model - Model Decorations', () => {
LINE3 + '\n' +
LINE4 + '\r\n' +
LINE5;
thisModel = new Model(text, null);
thisModel = new Model(text, DefaultEndOfLine.LF, null);
});
teardown(() => {
......@@ -445,7 +445,7 @@ suite('deltaDecorations', () => {
function testDeltaDecorations(text:string[], decorations:ILightWeightDecoration[], newDecorations:ILightWeightDecoration[]): void {
var model = new Model(text.join('\n'), null);
var model = new Model(text.join('\n'), DefaultEndOfLine.LF, null);
// Add initial decorations & assert they are added
var initialIds = model.deltaDecorations([], decorations.map(toModelDeltaDecoration));
......@@ -481,7 +481,7 @@ suite('deltaDecorations', () => {
var model = new Model([
'Hello world,',
'How are you?'
].join('\n'), null);
].join('\n'), DefaultEndOfLine.LF, null);
var ids = model.deltaDecorations([], [
toModelDeltaDecoration(decoration('a', 1, 1, 1, 12)),
......@@ -568,7 +568,7 @@ suite('deltaDecorations', () => {
var model = new Model([
'Hello world,',
'How are you?'
].join('\n'), null);
].join('\n'), DefaultEndOfLine.LF, null);
var trackedRangeId = model.addTrackedRange({
startLineNumber: 1,
......
......@@ -6,7 +6,7 @@
import * as assert from 'assert';
import {Range} from 'vs/editor/common/core/range';
import {IIdentifiedSingleEditOperation} from 'vs/editor/common/editorCommon';
import {IIdentifiedSingleEditOperation, DefaultEndOfLine} from 'vs/editor/common/editorCommon';
import {Model} from 'vs/editor/common/model/model';
suite('Editor Model - Model Edit Operation', () => {
......@@ -25,7 +25,7 @@ suite('Editor Model - Model Edit Operation', () => {
LINE3 + '\n' +
LINE4 + '\r\n' +
LINE5;
model = new Model(text, null);
model = new Model(text, DefaultEndOfLine.LF, null);
});
teardown(() => {
......
......@@ -8,9 +8,10 @@ import * as assert from 'assert';
import {Position} from 'vs/editor/common/core/position';
import {Range} from 'vs/editor/common/core/range';
import {TextModel} from 'vs/editor/common/model/textModel';
import {DefaultEndOfLine} from 'vs/editor/common/editorCommon';
function testGuessIndentation(expectedInsertSpaces:boolean, expectedTabSize:number, text:string[], msg?:string): void {
var m = new TextModel([], TextModel.toRawText(text.join('\n')));
var m = new TextModel([], TextModel.toRawText(text.join('\n'), DefaultEndOfLine.LF));
var r = m.guessIndentation(1337);
m.dispose();
......@@ -30,7 +31,7 @@ suite('Editor Model - TextModel', () => {
test('getValueLengthInRange', () => {
var m = new TextModel([], TextModel.toRawText('My First Line\r\nMy Second Line\r\nMy Third Line'));
var m = new TextModel([], TextModel.toRawText('My First Line\r\nMy Second Line\r\nMy Third Line', DefaultEndOfLine.LF));
assert.equal(m.getValueLengthInRange(new Range(1, 1, 1, 1)), ''.length);
assert.equal(m.getValueLengthInRange(new Range(1, 1, 1, 2)), 'M'.length);
assert.equal(m.getValueLengthInRange(new Range(1, 2, 1, 3)), 'y'.length);
......@@ -43,7 +44,7 @@ suite('Editor Model - TextModel', () => {
assert.equal(m.getValueLengthInRange(new Range(1, 2, 3, 1000)), 'y First Line\r\nMy Second Line\r\nMy Third Line'.length);
assert.equal(m.getValueLengthInRange(new Range(1, 1, 1000, 1000)), 'My First Line\r\nMy Second Line\r\nMy Third Line'.length);
m = new TextModel([], TextModel.toRawText('My First Line\nMy Second Line\nMy Third Line'));
m = new TextModel([], TextModel.toRawText('My First Line\nMy Second Line\nMy Third Line', DefaultEndOfLine.LF));
assert.equal(m.getValueLengthInRange(new Range(1, 1, 1, 1)), ''.length);
assert.equal(m.getValueLengthInRange(new Range(1, 1, 1, 2)), 'M'.length);
assert.equal(m.getValueLengthInRange(new Range(1, 2, 1, 3)), 'y'.length);
......@@ -393,7 +394,7 @@ suite('Editor Model - TextModel', () => {
test('modifyPosition', () => {
var m = new TextModel([], TextModel.toRawText('line one\nline two'));
var m = new TextModel([], TextModel.toRawText('line one\nline two', DefaultEndOfLine.LF));
assert.deepEqual(m.modifyPosition(new Position(1,1), 0), new Position(1, 1));
assert.deepEqual(m.modifyPosition(new Position(0,0), 0), new Position(1, 1));
assert.deepEqual(m.modifyPosition(new Position(30, 1), 0), new Position(2, 1));
......
......@@ -12,6 +12,7 @@ import {compile} from 'vs/editor/common/modes/monarch/monarchCompile';
import {createTokenizationSupport} from 'vs/editor/common/modes/monarch/monarchLexer';
import {ILanguage} from 'vs/editor/common/modes/monarch/monarchTypes';
import {createMockModeService} from 'vs/editor/test/common/servicesTestUtils';
import {DefaultEndOfLine} from 'vs/editor/common/editorCommon';
export interface IRelaxedToken {
startIndex:number;
......@@ -81,6 +82,7 @@ export function createOnEnterAsserter(modeId:string, richEditSupport: modes.IRic
var assertOne = (oneLineAboveText:string, beforeText:string, afterText:string, expected: modes.IndentAction) => {
var model = new Model(
[ oneLineAboveText, beforeText + afterText ].join('\n'),
DefaultEndOfLine.LF,
new SimpleMode(modeId)
);
var actual = richEditSupport.onEnter.onEnter(model, { lineNumber: 2, column: beforeText.length + 1 });
......
......@@ -9,6 +9,7 @@ import URI from 'vs/base/common/uri';
import {createMirrorModelFromString} from 'vs/editor/common/model/mirrorModel';
import {ResourceEvents} from 'vs/editor/common/services/resourceService';
import {ResourceService} from 'vs/editor/common/services/resourceServiceImpl';
import {DefaultEndOfLine} from 'vs/editor/common/editorCommon';
suite('Editor Services - ResourceService', () => {
......@@ -16,10 +17,10 @@ suite('Editor Services - ResourceService', () => {
var service = new ResourceService();
service.insert(URI.parse('test://1'), createMirrorModelFromString(null, 1, 'hi', null));
service.insert(URI.parse('test://1'), createMirrorModelFromString(null, 1, 'hi', DefaultEndOfLine.LF, null));
assert.equal(service.all().length, 1);
service.insert(URI.parse('test://2'), createMirrorModelFromString(null, 1, 'hi', null));
service.insert(URI.parse('test://2'), createMirrorModelFromString(null, 1, 'hi', DefaultEndOfLine.LF, null));
assert.equal(service.all().length, 2);
assert.ok(service.contains(URI.parse('test://1')));
......@@ -37,7 +38,7 @@ suite('Editor Services - ResourceService', () => {
var eventCnt = 0;
var url = URI.parse('far');
var element = createMirrorModelFromString(null, 1, 'hi', null);
var element = createMirrorModelFromString(null, 1, 'hi', DefaultEndOfLine.LF, null);
var service = new ResourceService();
service.addListener(ResourceEvents.ADDED, () => {
eventCnt++;
......@@ -58,7 +59,7 @@ suite('Editor Services - ResourceService', () => {
var eventCnt = 0;
var url = URI.parse('far');
var element = createMirrorModelFromString(null, 1, 'hi', null);
var element = createMirrorModelFromString(null, 1, 'hi', DefaultEndOfLine.LF, null);
var event = {};
var service = new ResourceService();
......
......@@ -20,7 +20,7 @@ import {NULL_THREAD_SERVICE} from 'vs/platform/test/common/nullThreadService';
import {IMarker} from 'vs/platform/markers/common/markers';
export function mockMirrorModel(content:string, url:URI = null) : mm.MirrorModel {
return mm.createMirrorModelFromString(null, 0, content, modesUtil.createMockMode('mock.mode.id', /(#?-?\d*\.\d\w*%?)|([@#.:!]?[\w-?]+%?)|[@#.!]/g), url);
return mm.createMirrorModelFromString(null, 0, content, EditorCommon.DefaultEndOfLine.LF, modesUtil.createMockMode('mock.mode.id', /(#?-?\d*\.\d\w*%?)|([@#.:!]?[\w-?]+%?)|[@#.!]/g), url);
}
suite('Validation - CSS', () => {
......
......@@ -16,6 +16,7 @@ import WinJS = require('vs/base/common/winjs.base');
import modesUtil = require('vs/editor/test/common/modesUtil');
import servicesUtil2 = require('vs/editor/test/common/servicesTestUtils');
import {NULL_THREAD_SERVICE} from 'vs/platform/test/common/nullThreadService';
import {DefaultEndOfLine} from 'vs/editor/common/editorCommon';
suite('HTML - worker', () => {
......@@ -31,7 +32,7 @@ suite('HTML - worker', () => {
var mockHtmlWorkerEnv = function (url: URI, content: string): { worker: htmlWorker.HTMLWorker; model: mm.MirrorModel; } {
var resourceService = new ResourceService.ResourceService();
var model = mm.createMirrorModelFromString(null, 0, content, mode, url);
var model = mm.createMirrorModelFromString(null, 0, content, DefaultEndOfLine.LF, mode, url);
resourceService.insert(url, model);
var markerService = new MarkerService.MainProcessMarkerService(NULL_THREAD_SERVICE);
......
......@@ -606,7 +606,7 @@ suite('Colorizing - HTML', () => {
});
test('onEnter', function() {
var model = new Model('<script type=\"text/javascript\">function f() { foo(); }', _mode);
var model = new Model('<script type=\"text/javascript\">function f() { foo(); }', EditorCommon.DefaultEndOfLine.LF, _mode);
var actual = _mode.richEditSupport.onEnter.onEnter(model, {
lineNumber: 1,
......@@ -621,7 +621,7 @@ suite('Colorizing - HTML', () => {
test('onEnter', function() {
function onEnter(line:string, offset:number): Modes.IEnterAction {
let model = new TextModelWithTokens([], TextModel.toRawText(line), false, _mode);
let model = new TextModelWithTokens([], TextModel.toRawText(line, EditorCommon.DefaultEndOfLine.LF), false, _mode);
let result = getRawEnterActionAtPosition(model, 1, offset + 1);
model.dispose();
return result;
......@@ -664,7 +664,7 @@ suite('Colorizing - HTML', () => {
}
function assertBracket(lines:string[], lineNumber:number, column:number, expected:EditorCommon.IEditorRange[]): void {
let model = new TextModelWithTokens([], TextModel.toRawText(lines.join('\n')), false, _mode);
let model = new TextModelWithTokens([], TextModel.toRawText(lines.join('\n'), EditorCommon.DefaultEndOfLine.LF), false, _mode);
// force tokenization
model.getLineContext(model.getLineCount());
let actual = model.matchBracket({
......
......@@ -18,7 +18,7 @@ suite('JSON - formatter', () => {
var range : EditorCommon.IRange = null;
var mockMode = ModesTestUtils.createMockMode('mock.mode.id');
var mirrorModel = MirrorModel.createMirrorModelFromString(null, 1, unformatted, mockMode);
var mirrorModel = MirrorModel.createMirrorModelFromString(null, 1, unformatted, EditorCommon.DefaultEndOfLine.LF, mockMode);
var rangeStart = unformatted.indexOf('|');
var rangeEnd = unformatted.lastIndexOf('|');
......@@ -28,12 +28,12 @@ suite('JSON - formatter', () => {
var startPos = mirrorModel.getPositionFromOffset(rangeStart);
var endPos = mirrorModel.getPositionFromOffset(rangeEnd);
range = { startLineNumber: startPos.lineNumber, startColumn: startPos.column, endLineNumber: endPos.lineNumber, endColumn: endPos.column };
mirrorModel = MirrorModel.createMirrorModelFromString(null, 1, unformatted, mockMode);
mirrorModel = MirrorModel.createMirrorModelFromString(null, 1, unformatted, EditorCommon.DefaultEndOfLine.LF, mockMode);
}
var operations = Formatter.format(mirrorModel, range, { tabSize: 2, insertSpaces: insertSpaces });
var model = new Model(unformatted, mockMode);
var model = new Model(unformatted, EditorCommon.DefaultEndOfLine.LF, mockMode);
model.pushEditOperations([], operations.map(o => {
return {
range: Range.lift(o.range),
......
......@@ -33,7 +33,7 @@ suite('JSON - Worker', () => {
};
function mockWorkerEnv(url: URI, content: string): { worker: jsonworker.JSONWorker; model: EditorCommon.IMirrorModel; } {
var mm = mirrorModel.createMirrorModelFromString(null, 1, content, modesUtil.createMockMode('mock.mode.id'), url);
var mm = mirrorModel.createMirrorModelFromString(null, 1, content, EditorCommon.DefaultEndOfLine.LF, modesUtil.createMockMode('mock.mode.id'), url);
var resourceModelMock: IResourceService = new resourceService.ResourceService();
resourceModelMock.insert(url, mm);
......
......@@ -23,7 +23,7 @@ suite('LESS - Intellisense', () => {
var testSuggestionsFor = function(value:string, stringBefore:string):WinJS.TPromise<Modes.ISuggestResult> {
var resourceService = new ResourceService.ResourceService();
var url = URI.parse('test://1');
resourceService.insert(url, mm.createMirrorModelFromString(null, 0, value, modesUtil.createMockMode('mock.mode.id', /(-?\d*\.\d+)|([\w-]+)/g), url));
resourceService.insert(url, mm.createMirrorModelFromString(null, 0, value, EditorCommon.DefaultEndOfLine.LF, modesUtil.createMockMode('mock.mode.id', /(-?\d*\.\d+)|([\w-]+)/g), url));
let services = servicesUtil2.createMockEditorWorkerServices({
resourceService: resourceService,
......
......@@ -19,7 +19,7 @@ suite('SASS - Worker', () => {
var mockSASSWorkerEnv = function (url:URI, content: string) : { worker: sassWorker.SassWorker; model: mm.MirrorModel } {
var resourceService = new ResourceService.ResourceService();
var model = mm.createMirrorModelFromString(null, 0, content, modesUtil.createMockMode('mock.mode.id', /(#?-?\d*\.\d\w*%?)|([$@#!]?[\w-?]+%?)|[$@#!]/g), url);
var model = mm.createMirrorModelFromString(null, 0, content, EditorCommon.DefaultEndOfLine.LF, modesUtil.createMockMode('mock.mode.id', /(#?-?\d*\.\d\w*%?)|([$@#!]?[\w-?]+%?)|[$@#!]/g), url);
resourceService.insert(url, model);
let services = servicesUtil2.createMockEditorWorkerServices({
......
......@@ -216,12 +216,8 @@ class DirtyDiffModelDecorator {
return true;
}
private static _equals(model:common.IModel, rawText:common.IRawText): boolean {
if (!model) {
return false;
}
let modelRawText = model.toRawText();
return this._stringArrEquals(modelRawText.lines, rawText.lines);
private static _equals(a:common.IRawText, b:common.IRawText): boolean {
return this._stringArrEquals(a.lines, b.lines);
}
private diffOriginalContents(): winjs.TPromise<void> {
......@@ -237,12 +233,15 @@ class DirtyDiffModelDecorator {
return this.triggerDiff();
}
let rawText = TextModel.toRawText(contents);
let originalModel = this.modelService.getModel(this._originalContentsURI);
// return early if nothing has changed
if (DirtyDiffModelDecorator._equals(originalModel, rawText)) {
return winjs.TPromise.as(null);
if (originalModel) {
let originalRawText = originalModel.toRawText();
let contentsRawText = TextModel.toRawText(contents, originalRawText.defaultEOL);
// return early if nothing has changed
if (DirtyDiffModelDecorator._equals(originalRawText, contentsRawText)) {
return winjs.TPromise.as(null);
}
}
if (!originalModel) {
......
......@@ -9,7 +9,7 @@ import * as assert from 'assert';
import { getSelectedChanges, applyChangesToModel } from 'vs/workbench/parts/git/common/stageRanges';
import { Model } from 'vs/editor/common/model/model';
import { NullMode } from 'vs/editor/common/modes/nullMode';
import { IChange, IEditorSelection, } from 'vs/editor/common/editorCommon';
import { IChange, IEditorSelection, DefaultEndOfLine } from 'vs/editor/common/editorCommon';
import { Selection } from 'vs/editor/common/core/selection';
function changesEqual(actual: IChange[], expected: IChange[]) {
......@@ -142,8 +142,8 @@ suite('Git - Stage ranges', () => {
});
test('Apply changes to model - no changes', () => {
var original = new Model('One line that is equal. ', mode);
var modified = new Model('One line that is equal. \n Second line is new.', mode);
var original = new Model('One line that is equal. ', DefaultEndOfLine.LF, mode);
var modified = new Model('One line that is equal. \n Second line is new.', DefaultEndOfLine.LF, mode);
var changes: IChange[] = [];
var result = applyChangesToModel(original, modified, changes);
var expected = original;
......@@ -153,8 +153,8 @@ suite('Git - Stage ranges', () => {
});
test('Apply changes to model - one line change at the end', () => {
var original = new Model('One line that is equal. ', mode);
var modified = new Model('One line that is equal. \n Second line is new.', mode);
var original = new Model('One line that is equal. ', DefaultEndOfLine.LF, mode);
var modified = new Model('One line that is equal. \n Second line is new.', DefaultEndOfLine.LF, mode);
var changes: IChange[] = [];
changes.push(createChange(2, 2, 2, 2));
var result = applyChangesToModel(original, modified, changes);
......@@ -165,8 +165,8 @@ suite('Git - Stage ranges', () => {
});
test('Apply changes to model - one line insertion in the middle', () => {
var original = new Model('One line that is equal. \n Last line same. ', mode);
var modified = new Model('One line that is equal. \n Second line is new. \n Last line same. ', mode);
var original = new Model('One line that is equal. \n Last line same. ', DefaultEndOfLine.LF, mode);
var modified = new Model('One line that is equal. \n Second line is new. \n Last line same. ', DefaultEndOfLine.LF, mode);
var changes: IChange[] = [];
changes.push(createChange(2, 2, 1, 0));
var result = applyChangesToModel(original, modified, changes);
......@@ -177,8 +177,8 @@ suite('Git - Stage ranges', () => {
});
test('Apply changes to model - three empty lines insertion in the middle', () => {
var original = new Model('hello\n there\n isidor\n', mode);
var modified = new Model('hello\n there\n \n \n \n isidor\n', mode);
var original = new Model('hello\n there\n isidor\n', DefaultEndOfLine.LF, mode);
var modified = new Model('hello\n there\n \n \n \n isidor\n', DefaultEndOfLine.LF, mode);
var changes: IChange[] = [];
changes.push(createChange(3, 5, 2, 0));
var result = applyChangesToModel(original, modified, changes);
......@@ -189,12 +189,12 @@ suite('Git - Stage ranges', () => {
});
test('Apply changes to model - one line deletion', () => {
var original = new Model('One line that is equal. \n Second line is old. \n Third line same. \n Forth line not important', mode);
var modified = new Model('One line that is equal. \n Third line same. ', mode);
var original = new Model('One line that is equal. \n Second line is old. \n Third line same. \n Forth line not important', DefaultEndOfLine.LF, mode);
var modified = new Model('One line that is equal. \n Third line same. ', DefaultEndOfLine.LF, mode);
var changes: IChange[] = [];
changes.push(createChange(2, 0, 2, 2));
var result = applyChangesToModel(original, modified, changes);
var expected = new Model('One line that is equal. \n Third line same. \n Forth line not important', mode);
var expected = new Model('One line that is equal. \n Third line same. \n Forth line not important', DefaultEndOfLine.LF, mode);
assert.equal(result, expected.getValue());
original.dispose();
modified.dispose();
......@@ -202,12 +202,12 @@ suite('Git - Stage ranges', () => {
});
test('Apply changes to model - one multi line change', () => {
var original = new Model('One line that is equal. \n Second line is different. \n Third line also different. \n Forth line is same. \n Fifth line is different.', mode);
var modified = new Model('One line that is equal. \n 2nd line is different. \n 3rd line also different. \n Forth line is same. \n 5th line is different.', mode);
var original = new Model('One line that is equal. \n Second line is different. \n Third line also different. \n Forth line is same. \n Fifth line is different.', DefaultEndOfLine.LF, mode);
var modified = new Model('One line that is equal. \n 2nd line is different. \n 3rd line also different. \n Forth line is same. \n 5th line is different.', DefaultEndOfLine.LF, mode);
var changes: IChange[] = [];
changes.push(createChange(2, 3, 2, 3));
var result = applyChangesToModel(original, modified, changes);
var expected = new Model('One line that is equal. \n 2nd line is different. \n 3rd line also different. \n Forth line is same. \n Fifth line is different.', mode);
var expected = new Model('One line that is equal. \n 2nd line is different. \n 3rd line also different. \n Forth line is same. \n Fifth line is different.', DefaultEndOfLine.LF, mode);
assert.equal(result, expected.getValue());
original.dispose();
modified.dispose();
......@@ -215,12 +215,12 @@ suite('Git - Stage ranges', () => {
});
test('Apply changes to model - two overlapping changes', () => {
var original = new Model(' One \n Two \n Three \n Four \n Five \n', mode);
var modified = new Model(' One \n 2 \n 3 \n 4 \n NotSelected \n', mode);
var original = new Model(' One \n Two \n Three \n Four \n Five \n', DefaultEndOfLine.LF, mode);
var modified = new Model(' One \n 2 \n 3 \n 4 \n NotSelected \n', DefaultEndOfLine.LF, mode);
var changes: IChange[] = [];
changes.push(createChange(2, 3, 2, 4), createChange(4, 4, 2, 4));
var result = applyChangesToModel(original, modified, changes);
var expected = new Model(' One \n 2 \n 3 \n 4 \n Five \n', mode);
var expected = new Model(' One \n 2 \n 3 \n 4 \n Five \n', DefaultEndOfLine.LF, mode);
assert.equal(result, expected.getValue());
original.dispose();
modified.dispose();
......@@ -228,12 +228,12 @@ suite('Git - Stage ranges', () => {
});
test('Apply changes to model - multiple small changes', () => {
var original = new Model(' One \n Two \n Three \n Four \n Five \n Six \n Seven \n Eight \n', mode);
var modified = new Model(' One \n 2 \n Three \n 4 \n 5 \n Six \n 7 \n 8 \n', mode);
var original = new Model(' One \n Two \n Three \n Four \n Five \n Six \n Seven \n Eight \n', DefaultEndOfLine.LF, mode);
var modified = new Model(' One \n 2 \n Three \n 4 \n 5 \n Six \n 7 \n 8 \n', DefaultEndOfLine.LF, mode);
var changes: IChange[] = [];
changes.push(createChange(1, 2, 1, 2), createChange(5, 5, 5, 5), createChange(7, 8, 7, 8));
var result = applyChangesToModel(original, modified, changes);
var expected = new Model(' One \n 2 \n Three \n Four \n 5 \n Six \n 7 \n 8 \n', mode);
var expected = new Model(' One \n 2 \n Three \n Four \n 5 \n Six \n 7 \n 8 \n', DefaultEndOfLine.LF, mode);
assert.equal(result, expected.getValue());
original.dispose();
modified.dispose();
......@@ -241,12 +241,12 @@ suite('Git - Stage ranges', () => {
});
test('Apply changes to model - multiple changes - insertion, deletion and modification', () => {
var original = new Model(' One \n Two \n Three \n Four \n Five \n Six \n Seven \n Eight \n Nine \n Ten', mode);
var modified = new Model(' 1 \n Three \n 4 \n 5 \n Six \n 7 \n NEWLINE \n Eight ', mode);
var original = new Model(' One \n Two \n Three \n Four \n Five \n Six \n Seven \n Eight \n Nine \n Ten', DefaultEndOfLine.LF, mode);
var modified = new Model(' 1 \n Three \n 4 \n 5 \n Six \n 7 \n NEWLINE \n Eight ', DefaultEndOfLine.LF, mode);
var changes: IChange[] = [];
changes.push(createChange(1, 1, 1, 1), createChange(2, 0, 2, 2), createChange(3, 3, 4, 4), createChange(7, 7, 7, 0), createChange(7, 0, 9, 10));
var result = applyChangesToModel(original, modified, changes);
var expected = new Model(' 1 \n Three \n 4 \n Five \n Six \n Seven \n NEWLINE \n Eight ', mode);
var expected = new Model(' 1 \n Three \n 4 \n Five \n Six \n Seven \n NEWLINE \n Eight ', DefaultEndOfLine.LF, mode);
assert.equal(result, expected.getValue());
original.dispose();
modified.dispose();
......@@ -254,12 +254,12 @@ suite('Git - Stage ranges', () => {
});
test('Apply changes to model - multiple changes 2 - insertion, deletion and modification', () => {
var original = new Model(' One \n Two \n Three \n Four \n Five \n Six \n Seven \n Eight \n Nine \n Ten ', mode);
var modified = new Model(' Two \n Three \n INSERTED \n Four \n Six \n 7 \n Eight \n 9 \n CHANGEIGNORED \n INSERTED', mode);
var original = new Model(' One \n Two \n Three \n Four \n Five \n Six \n Seven \n Eight \n Nine \n Ten ', DefaultEndOfLine.LF, mode);
var modified = new Model(' Two \n Three \n INSERTED \n Four \n Six \n 7 \n Eight \n 9 \n CHANGEIGNORED \n INSERTED', DefaultEndOfLine.LF, mode);
var changes: IChange[] = [];
changes.push(createChange(1, 0, 1, 1), createChange(3, 3, 3, 0), createChange(5, 0, 5, 5), createChange(6, 8, 7, 9), createChange(10, 10, 10, 0));
var result = applyChangesToModel(original, modified, changes);
var expected = new Model(' Two \n Three \n INSERTED \n Four \n Six \n 7 \n Eight \n 9 \n Ten \n INSERTED', mode);
var expected = new Model(' Two \n Three \n INSERTED \n Four \n Six \n 7 \n Eight \n 9 \n Ten \n INSERTED', DefaultEndOfLine.LF, mode);
assert.equal(result, expected.getValue());
original.dispose();
modified.dispose();
......
......@@ -8,7 +8,7 @@ import * as assert from 'assert';
import {Match, FileMatch, SearchResult} from 'vs/workbench/parts/search/common/searchModel';
import model = require('vs/editor/common/model/model');
import {Emitter} from 'vs/base/common/event';
import {IModel} from 'vs/editor/common/editorCommon';
import {IModel, DefaultEndOfLine} from 'vs/editor/common/editorCommon';
import URI from 'vs/base/common/uri';
import {createInstantiationService} from 'vs/platform/instantiation/common/instantiationService';
import {TestContextService} from 'vs/workbench/test/browser/servicesTestUtils';
......@@ -26,7 +26,7 @@ suite('Search - Model', () => {
setup(() => {
let emitter = new Emitter<any>();
oneModel = new model.Model('line1\nline2\nline3', null, URI.parse('file:///folder/file.txt'));
oneModel = new model.Model('line1\nline2\nline3', DefaultEndOfLine.LF, null, URI.parse('file:///folder/file.txt'));
instantiation = createInstantiationService({
modelService: {
getModel: () => oneModel,
......
......@@ -34,6 +34,7 @@ const model: EditorCommon.IModel = new EditorModel(
'This is the second line',
'This is the third line',
].join('\n'),
EditorCommon.DefaultEndOfLine.LF,
undefined,
URI.parse('far://testing/file.b'));
......@@ -82,7 +83,8 @@ suite('ExtHostLanguageFeatureCommands', function() {
EOL: model.getEOL(),
lines: model.getValue().split(model.getEOL()),
BOM: '',
length: -1
length: -1,
defaultEOL: EditorCommon.DefaultEndOfLine.LF
},
});
......
......@@ -41,6 +41,7 @@ const model: EditorCommon.IModel = new EditorModel(
'This is the second line',
'This is the third line',
].join('\n'),
EditorCommon.DefaultEndOfLine.LF,
undefined,
URI.parse('far://testing/file.a'));
......@@ -71,7 +72,8 @@ suite('ExtHostLanguageFeatures', function() {
EOL: model.getEOL(),
lines: model.getValue().split(model.getEOL()),
BOM: '',
length: -1
length: -1,
defaultEOL: EditorCommon.DefaultEndOfLine.LF
},
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册