function assertTrimTrailingWhitespaceCommand(text: string[], expected: IIdentifiedSingleEditOperation[]): void {
	return withEditorModel(text, (model) => {
		let op = new TrimTrailingWhitespaceCommand(new Selection(1, 1, 1, 1), []);
		let actual = getEditOperation(model, op);
		assert.deepEqual(actual, expected);
	});
}
function assertTrimTrailingWhitespaceCommand(text:string[], expected:EditorCommon.IIdentifiedSingleEditOperation[]): void {
	return withEditorModel(text, (model) => {
		var op = new TrimTrailingWhitespaceCommand.TrimTrailingWhitespaceCommand(Selection.createSelection(1,1,1,1));
		var actual = TU.getEditOperation(model, op);
		assert.deepEqual(actual, expected);
	});
}
	function _assertShiftCommand(tabSize:number, oneIndent:string, text:string[], expected:IIdentifiedSingleEditOperation[]): void {
		return withEditorModel(text, (model) => {
			var op = new ShiftCommand(new Selection(1,1,text.length+1,1), {
				isUnshift: false,
				tabSize: tabSize,
				oneIndent: oneIndent
			});
			var actual = getEditOperation(model, op);
			assert.deepEqual(actual, expected);
		});
	}
function assertTrimTrailingWhitespace(text: string[], cursors: Position[], expected: IIdentifiedSingleEditOperation[]): void {
	return withEditorModel(text, (model) => {
		let actual = trimTrailingWhitespace(model, cursors);
		assert.deepEqual(actual, expected);
	});
}