提交 b3314161 编写于 作者: B Benjamin Pasero

Merge branch 'master' into ben/focus-indication

{
"account": "monacobuild",
"container": "debuggers",
"zip": "17ccd91/node-debug.zip",
"zip": "c5c72bb/node-debug.zip",
"output": ""
}
......@@ -6,8 +6,7 @@
'use strict';
import * as assert from 'assert';
import {commands} from 'vscode';
import {join} from 'path';
import {commands, workspace, Uri} from 'vscode';
suite("commands namespace tests", () => {
......@@ -39,4 +38,21 @@ suite("commands namespace tests", () => {
done();
}, done);
});
});
\ No newline at end of file
test('api-command: workbench.html.preview', function() {
let registration = workspace.registerTextDocumentContentProvider('speciale', {
provideTextDocumentContent(uri) {
return `content of URI <b>${uri.toString()}</b>`;
}
});
let virtualDocumentUri = Uri.parse('speciale://authority/path')
return commands.executeCommand('workbench.html.preview', virtualDocumentUri).then(success => {
assert.ok(success);
registration.dispose();
});
})
});
......@@ -26,9 +26,10 @@ suite('workspace-namespace', () => {
});
test('openTextDocument', () => {
let len = workspace.textDocuments.length
return workspace.openTextDocument(join(workspace.rootPath, './far.js')).then(doc => {
assert.ok(doc);
assert.equal(workspace.textDocuments.length, 1);
assert.equal(workspace.textDocuments.length, len + 1);
});
});
......
......@@ -64,6 +64,9 @@ export class FindInput extends Widget {
private _onKeyDown = this._register(new Emitter<StandardKeyboardEvent>());
public onKeyDown: Event<StandardKeyboardEvent> = this._onKeyDown.event;
private _onInput = this._register(new Emitter<void>());
public onInput: Event<void> = this._onInput.event;
private _onKeyUp = this._register(new Emitter<StandardKeyboardEvent>());
public onKeyUp: Event<StandardKeyboardEvent> = this._onKeyUp.event;
......@@ -92,6 +95,7 @@ export class FindInput extends Widget {
this.onkeydown(this.inputBox.inputElement, (e) => this._onKeyDown.fire(e));
this.onkeyup(this.inputBox.inputElement, (e) => this._onKeyUp.fire(e));
this.oninput(this.inputBox.inputElement, (e) => this._onInput.fire());
}
public enable(): void {
......
......@@ -20,7 +20,7 @@ import {Position} from 'vs/editor/common/core/position';
import {CommonKeybindings} from 'vs/base/common/keyCodes';
import Event, {Emitter} from 'vs/base/common/event';
import {TextAreaHandler} from 'vs/editor/common/controller/textAreaHandler';
import {ITextAreaWrapper, IClipboardEvent, IKeyboardEventWrapper, ITextAreaStyle, ISimpleModel} from 'vs/editor/common/controller/textAreaState';
import {ITextAreaWrapper, IClipboardEvent, IKeyboardEventWrapper, ISimpleModel} from 'vs/editor/common/controller/textAreaState';
class ClipboardEventWrapper implements IClipboardEvent {
......@@ -143,6 +143,10 @@ class TextAreaWrapper extends Lifecycle.Disposable implements ITextAreaWrapper {
this._register(DomUtils.addDisposableListener(this._textArea, 'paste', (e:ClipboardEvent) => this._onPaste.fire(new ClipboardEventWrapper(e))));
}
public get actual(): HTMLTextAreaElement {
return this._textArea;
}
public get value(): string {
return this._textArea.value;
}
......@@ -162,7 +166,7 @@ class TextAreaWrapper extends Lifecycle.Disposable implements ITextAreaWrapper {
public setSelectionRange(selectionStart:number, selectionEnd:number): void {
// console.log('setSelectionRange: ' + selectionStart + ', ' + selectionEnd);
try {
var scrollState = DomUtils.saveParentsScrollTop(this._textArea);
let scrollState = DomUtils.saveParentsScrollTop(this._textArea);
this._textArea.focus();
this._textArea.setSelectionRange(selectionStart, selectionEnd);
DomUtils.restoreParentsScrollTop(this._textArea, scrollState);
......@@ -172,21 +176,6 @@ class TextAreaWrapper extends Lifecycle.Disposable implements ITextAreaWrapper {
}
}
public setStyle(style:ITextAreaStyle): void {
if (typeof style.top !== 'undefined') {
this._textArea.style.top = style.top;
}
if (typeof style.left !== 'undefined') {
this._textArea.style.left = style.left;
}
if (typeof style.width !== 'undefined') {
this._textArea.style.width = style.width;
}
if (typeof style.height !== 'undefined') {
this._textArea.style.height = style.height;
}
}
public isInOverwriteMode(): boolean {
// In IE, pressing Insert will bring the typing into overwrite mode
if (Browser.isIE11orEarlier && document.queryCommandValue('OverWrite')) {
......@@ -204,6 +193,11 @@ export class KeyboardHandler extends ViewEventHandler implements Lifecycle.IDisp
private viewHelper:EditorBrowser.IKeyboardHandlerHelper;
private textArea:TextAreaWrapper;
private textAreaHandler:TextAreaHandler;
private _toDispose:Lifecycle.IDisposable[];
private contentLeft:number;
private contentWidth:number;
private scrollLeft:number;
constructor(context:EditorBrowser.IViewContext, viewController:EditorBrowser.IViewController, viewHelper:EditorBrowser.IKeyboardHandlerHelper) {
super();
......@@ -213,38 +207,59 @@ export class KeyboardHandler extends ViewEventHandler implements Lifecycle.IDisp
this.textArea = new TextAreaWrapper(viewHelper.textArea);
this.viewHelper = viewHelper;
this.textAreaHandler = new TextAreaHandler(Platform, Browser, this.textArea, {
getModel: (): ISimpleModel => this.context.model,
emitKeyDown: (e:IKeyboardEventWrapper): void => this.viewController.emitKeyDown(<DomUtils.IKeyboardEvent>e._actual),
emitKeyUp: (e:IKeyboardEventWrapper): void => this.viewController.emitKeyUp(<DomUtils.IKeyboardEvent>e._actual),
paste: (source:string, txt:string, pasteOnNewLine:boolean): void => this.viewController.paste(source, txt, pasteOnNewLine),
type: (source:string, txt:string): void => this.viewController.type(source, txt),
replacePreviousChar: (source:string, txt:string): void => this.viewController.replacePreviousChar(source, txt),
cut: (source:string): void => this.viewController.cut(source),
visibleRangeForPositionRelativeToEditor: (lineNumber:number, column1:number, column2:number): { column1: EditorCommon.VisibleRange; column2: EditorCommon.VisibleRange; } => {
var revealInterestingColumn1Event:EditorCommon.IViewRevealRangeEvent = {
range: new Range(lineNumber, column1, lineNumber, column1),
verticalType: EditorCommon.VerticalRevealType.Simple,
revealHorizontal: true
};
this.context.privateViewEventBus.emit(EditorCommon.ViewEventNames.RevealRangeEvent, revealInterestingColumn1Event);
// Find range pixel position
var visibleRange1 = this.viewHelper.visibleRangeForPositionRelativeToEditor(lineNumber, column1);
var visibleRange2 = this.viewHelper.visibleRangeForPositionRelativeToEditor(lineNumber, column2);
return {
column1: visibleRange1,
column2: visibleRange2
}
},
startIME: (): void => {
DomUtils.addClass(this.viewHelper.viewDomNode, 'ime-input');
},
stopIME: (): void => {
DomUtils.removeClass(this.viewHelper.viewDomNode, 'ime-input');
this.contentLeft = 0;
this.contentWidth = 0;
this.scrollLeft = 0;
this.textAreaHandler = new TextAreaHandler(Platform, Browser, this.textArea, this.context.model);
this._toDispose = [];
this._toDispose.push(this.textAreaHandler.onKeyDown((e) => this.viewController.emitKeyDown(<DomUtils.IKeyboardEvent>e._actual)));
this._toDispose.push(this.textAreaHandler.onKeyUp((e) => this.viewController.emitKeyUp(<DomUtils.IKeyboardEvent>e._actual)));
this._toDispose.push(this.textAreaHandler.onPaste((e) => this.viewController.paste('keyboard', e.text, e.pasteOnNewLine)));
this._toDispose.push(this.textAreaHandler.onCut((e) => this.viewController.cut('keyboard')));
this._toDispose.push(this.textAreaHandler.onType((e) => {
if (e.replacePreviousCharacter) {
this.viewController.replacePreviousChar('keyboard', e.text);
} else {
this.viewController.type('keyboard', e.text);
}
}, this.context.configuration);
}));
this._toDispose.push(this.textAreaHandler.onCompositionStart((e) => {
let lineNumber = e.showAtLineNumber;
let column = e.showAtColumn;
let revealPositionEvent:EditorCommon.IViewRevealRangeEvent = {
range: new Range(lineNumber, column, lineNumber, column),
verticalType: EditorCommon.VerticalRevealType.Simple,
revealHorizontal: true
};
this.context.privateViewEventBus.emit(EditorCommon.ViewEventNames.RevealRangeEvent, revealPositionEvent);
// Find range pixel position
let visibleRange = this.viewHelper.visibleRangeForPositionRelativeToEditor(lineNumber, column);
if (visibleRange) {
this.textArea.actual.style.top = visibleRange.top + 'px';
this.textArea.actual.style.left = this.contentLeft + visibleRange.left - this.scrollLeft + 'px';
}
if (Browser.isIE11orEarlier) {
this.textArea.actual.style.width = this.contentWidth + 'px';
}
// Show the textarea
this.textArea.actual.style.height = this.context.configuration.editor.lineHeight + 'px';
DomUtils.addClass(this.viewHelper.viewDomNode, 'ime-input');
}));
this._toDispose.push(this.textAreaHandler.onCompositionEnd((e) => {
this.textArea.actual.style.height = '';
this.textArea.actual.style.width = '';
this.textArea.actual.style.left = '0px';
this.textArea.actual.style.top = '0px';
DomUtils.removeClass(this.viewHelper.viewDomNode, 'ime-input');
}));
this.context.addEventHandler(this);
}
......@@ -253,10 +268,11 @@ export class KeyboardHandler extends ViewEventHandler implements Lifecycle.IDisp
this.context.removeEventHandler(this);
this.textAreaHandler.dispose();
this.textArea.dispose();
this._toDispose = Lifecycle.disposeAll(this._toDispose);
}
public onScrollChanged(e:EditorCommon.IScrollEvent): boolean {
this.textAreaHandler.setScrollLeft(e.scrollLeft);
this.scrollLeft = e.scrollLeft;
return false;
}
......@@ -276,7 +292,8 @@ export class KeyboardHandler extends ViewEventHandler implements Lifecycle.IDisp
}
public onLayoutChanged(layoutInfo:EditorCommon.IEditorLayoutInfo): boolean {
this.textAreaHandler.setLayoutInfo(layoutInfo.contentLeft, layoutInfo.contentWidth);
this.contentLeft = layoutInfo.contentLeft;
this.contentWidth = layoutInfo.contentWidth;
return false;
}
......
......@@ -7,13 +7,7 @@
import * as EditorCommon from 'vs/editor/common/editorCommon';
import {Range} from 'vs/editor/common/core/range';
import Event from 'vs/base/common/event';
export interface ITextAreaStyle {
top: string;
left: string;
width: string;
height: string;
}
import {commonPrefixLength, commonSuffixLength} from 'vs/base/common/strings';
export interface IClipboardEvent {
canUseTextData(): boolean;
......@@ -44,7 +38,6 @@ export interface ITextAreaWrapper {
selectionEnd: number;
setSelectionRange(selectionStart:number, selectionEnd:number): void;
setStyle(style:ITextAreaStyle): void;
isInOverwriteMode(): boolean;
}
......@@ -57,13 +50,18 @@ export interface ISimpleModel {
}
export class TextAreaState {
public static EMPTY = new TextAreaState(null, '', 0, 0, false, 0);
private previousState:TextAreaState;
private value:string;
private selectionStart:number;
private selectionEnd:number;
private isInOverwriteMode:boolean;
private selectionToken:number;
constructor(value:string, selectionStart:number, selectionEnd:number, isInOverwriteMode:boolean, selectionToken:number) {
constructor(previousState:TextAreaState, value:string, selectionStart:number, selectionEnd:number, isInOverwriteMode:boolean, selectionToken:number) {
this.previousState = previousState ? previousState.shallowClone() : null;
this.value = value;
this.selectionStart = selectionStart;
this.selectionEnd = selectionEnd;
......@@ -71,6 +69,10 @@ export class TextAreaState {
this.selectionToken = selectionToken;
}
private shallowClone(): TextAreaState {
return new TextAreaState(null, this.value, this.selectionStart, this.selectionEnd, this.isInOverwriteMode, this.selectionToken);
}
public toString(): string {
return '[ <' + this.value + '>, selectionStart: ' + this.selectionStart + ', selectionEnd: ' + this.selectionEnd + ', isInOverwriteMode: ' + this.isInOverwriteMode + ', selectionToken: ' + this.selectionToken + ']';
}
......@@ -85,11 +87,11 @@ export class TextAreaState {
);
}
public static fromTextArea(textArea:ITextAreaWrapper, selectionToken:number): TextAreaState {
return new TextAreaState(textArea.value, textArea.selectionStart, textArea.selectionEnd, textArea.isInOverwriteMode(), selectionToken);
public fromTextArea(textArea:ITextAreaWrapper): TextAreaState {
return new TextAreaState(this, textArea.value, textArea.selectionStart, textArea.selectionEnd, textArea.isInOverwriteMode(), this.selectionToken);
}
public static fromEditorSelectionAndPreviousState(model:ISimpleModel, selection:EditorCommon.IEditorRange, previousSelectionToken:number): TextAreaState {
public fromEditorSelection(model:ISimpleModel, selection:EditorCommon.IEditorRange): TextAreaState {
let LIMIT_CHARS = 100;
let PADDING_LINES_COUNT = 0;
......@@ -100,7 +102,7 @@ export class TextAreaState {
selectionEndLineNumberMaxColumn = model.getLineMaxColumn(selectionEndLineNumber);
// If the selection is empty and we have switched line numbers, expand selection to full line (helps Narrator trigger a full line read)
if (selection.isEmpty() && previousSelectionToken !== selectionStartLineNumber) {
if (selection.isEmpty() && this.selectionToken !== selectionStartLineNumber) {
selectionStartColumn = 1;
selectionEndColumn = selectionEndLineNumberMaxColumn;
}
......@@ -135,24 +137,23 @@ export class TextAreaState {
text = text.substring(0, LIMIT_CHARS) + String.fromCharCode(8230) + text.substring(text.length - LIMIT_CHARS, text.length);
}
return new TextAreaState(pretext + text + posttext, pretext.length, pretext.length + text.length, false, selectionStartLineNumber);
return new TextAreaState(this, pretext + text + posttext, pretext.length, pretext.length + text.length, false, selectionStartLineNumber);
}
public getSelectionStart(): number {
return this.selectionStart;
public fromText(text:string): TextAreaState {
return new TextAreaState(this, text, 0, text.length, false, 0)
}
public resetSelection(): void {
this.selectionStart = this.value.length;
this.selectionEnd = this.value.length;
public resetSelection(): TextAreaState {
return new TextAreaState(this.previousState, this.value, this.value.length, this.value.length, this.isInOverwriteMode, this.selectionToken);
}
public getValue(): string {
return this.value;
public getSelectionStart(): number {
return this.selectionStart;
}
public getSelectionToken(): number {
return this.selectionToken;
public getValue(): string {
return this.value;
}
public applyToTextArea(textArea:ITextAreaWrapper, select:boolean): void {
......@@ -165,7 +166,7 @@ export class TextAreaState {
}
}
public extractNewText(previousState:TextAreaState): string {
public extractNewText(): string {
// console.log('-----------')
// console.log('prev:' + String(previousState));
// console.log('curr:' + String(this));
......@@ -173,11 +174,11 @@ export class TextAreaState {
// There is a selection in the textarea => ignore input
return '';
}
if (!previousState) {
if (!this.previousState) {
return this.value;
}
let previousPrefix = previousState.value.substring(0, previousState.selectionStart);
let previousSuffix = previousState.value.substring(previousState.selectionEnd, previousState.value.length);
let previousPrefix = this.previousState.value.substring(0, this.previousState.selectionStart);
let previousSuffix = this.previousState.value.substring(this.previousState.selectionEnd, this.previousState.value.length);
if (this.isInOverwriteMode) {
previousSuffix = previousSuffix.substr(1);
......@@ -192,4 +193,26 @@ export class TextAreaState {
}
return value;
}
public extractMacReplacedText(): string {
// Ignore if the textarea has selection
if (this.selectionStart !== this.selectionEnd) {
return '';
}
if (!this.previousState) {
return '';
}
if (this.previousState.value.length !== this.value.length) {
return '';
}
let prefixLength = commonPrefixLength(this.previousState.value, this.value);
let suffixLength = commonSuffixLength(this.previousState.value, this.value);
if (prefixLength + suffixLength + 1 !== this.value.length) {
return '';
}
return this.value.charAt(prefixLength);
}
}
......@@ -316,11 +316,6 @@ export class FindWidget extends Widget implements EditorBrowser.IOverlayWidget {
e.preventDefault();
return;
}
// getValue() is not updated right away
setTimeout(() => {
this._state.change({ searchString: this._findInput.getValue() }, true);
}, 10);
}
private _onReplaceInputKeyDown(e:DomUtils.IKeyboardEvent): void {
......@@ -351,10 +346,6 @@ export class FindWidget extends Widget implements EditorBrowser.IOverlayWidget {
e.preventDefault();
return;
}
setTimeout(() => {
this._state.change({ replaceString: this._replaceInputBox.value }, false);
}, 10);
}
// ----- initialization
......@@ -392,6 +383,9 @@ export class FindWidget extends Widget implements EditorBrowser.IOverlayWidget {
}
}));
this._register(this._findInput.onKeyDown((e) => this._onFindInputKeyDown(e)));
this._register(this._findInput.onInput(() => {
this._state.change({ searchString: this._findInput.getValue() }, true);
}));
this._register(this._findInput.onDidOptionChange(() => {
this._state.change({
isRegex: this._findInput.getRegex(),
......@@ -484,6 +478,9 @@ export class FindWidget extends Widget implements EditorBrowser.IOverlayWidget {
}));
this._register(DomUtils.addStandardDisposableListener(this._replaceInputBox.inputElement, 'keydown', (e) => this._onReplaceInputKeyDown(e)));
this._register(DomUtils.addStandardDisposableListener(this._replaceInputBox.inputElement, 'input', (e) => {
this._state.change({ replaceString: this._replaceInputBox.value }, false);
}));
// Replace one button
this._replaceBtn = this._register(new SimpleButton({
......
......@@ -14,7 +14,7 @@ import {MockTextAreaWrapper} from 'vs/editor/test/common/mocks/mockTextAreaWrapp
suite('TextAreaState', () => {
function assertTextAreaState(actual:TextAreaState, value:string, selectionStart:number, selectionEnd:number, isInOverwriteMode:boolean, selectionToken:number): void {
let desired = new TextAreaState(value, selectionStart, selectionEnd, isInOverwriteMode, selectionToken);
let desired = new TextAreaState(null, value, selectionStart, selectionEnd, isInOverwriteMode, selectionToken);
assert.ok(desired.equals(actual), desired.toString() + ' == ' + actual.toString());
}
......@@ -24,15 +24,14 @@ suite('TextAreaState', () => {
textArea._selectionStart = 1;
textArea._selectionEnd = 12;
textArea._isInOverwriteMode = false;
let actual = TextAreaState.fromTextArea(textArea, 3);
let actual = TextAreaState.EMPTY.fromTextArea(textArea);
assertTextAreaState(actual, 'Hello world!', 1, 12, false, 3);
assertTextAreaState(actual, 'Hello world!', 1, 12, false, 0);
assert.equal(actual.getValue(), 'Hello world!');
assert.equal(actual.getSelectionStart(), 1);
assert.equal(actual.getSelectionToken(), 3);
actual.resetSelection();
assertTextAreaState(actual, 'Hello world!', 12, 12, false, 3);
actual = actual.resetSelection();
assertTextAreaState(actual, 'Hello world!', 12, 12, false, 0);
textArea.dispose();
});
......@@ -44,21 +43,21 @@ suite('TextAreaState', () => {
textArea._selectionEnd = 12;
textArea._isInOverwriteMode = false;
let state = new TextAreaState('Hi world!', 2, 2, false, 0);
let state = new TextAreaState(null, 'Hi world!', 2, 2, false, 0);
state.applyToTextArea(textArea, false);
assert.equal(textArea._value, 'Hi world!');
assert.equal(textArea._selectionStart, 9);
assert.equal(textArea._selectionEnd, 9);
state = new TextAreaState('Hi world!', 3, 3, false, 0);
state = new TextAreaState(null, 'Hi world!', 3, 3, false, 0);
state.applyToTextArea(textArea, false);
assert.equal(textArea._value, 'Hi world!');
assert.equal(textArea._selectionStart, 9);
assert.equal(textArea._selectionEnd, 9);
state = new TextAreaState('Hi world!', 0, 2, false, 0);
state = new TextAreaState(null, 'Hi world!', 0, 2, false, 0);
state.applyToTextArea(textArea, true);
assert.equal(textArea._value, 'Hi world!');
......@@ -75,9 +74,9 @@ suite('TextAreaState', () => {
textArea._selectionEnd = selectionEnd;
textArea._isInOverwriteMode = isInOverwriteMode;
let newState = TextAreaState.fromTextArea(textArea, prevState ? prevState.getSelectionToken() : 0);
let newState = (prevState || TextAreaState.EMPTY).fromTextArea(textArea);
let actual = newState.extractNewText(prevState);
let actual = newState.extractNewText();
assert.equal(actual, expected);
......@@ -104,7 +103,7 @@ suite('TextAreaState', () => {
test('extractNewText - typing does not cause a selection', () => {
testExtractNewText(
new TextAreaState('', 0, 0, false, 0),
new TextAreaState(null, '', 0, 0, false, 0),
'a',
0, 1, false,
''
......@@ -113,7 +112,7 @@ suite('TextAreaState', () => {
test('extractNewText - had the textarea empty', () => {
testExtractNewText(
new TextAreaState('', 0, 0, false, 0),
new TextAreaState(null, '', 0, 0, false, 0),
'a',
1, 1, false,
'a'
......@@ -122,7 +121,7 @@ suite('TextAreaState', () => {
test('extractNewText - had the entire line selected', () => {
testExtractNewText(
new TextAreaState('Hello world!', 0, 12, false, 0),
new TextAreaState(null, 'Hello world!', 0, 12, false, 0),
'H',
1, 1, false,
'H'
......@@ -131,7 +130,7 @@ suite('TextAreaState', () => {
test('extractNewText - had previous text 1', () => {
testExtractNewText(
new TextAreaState('Hello world!', 12, 12, false, 0),
new TextAreaState(null, 'Hello world!', 12, 12, false, 0),
'Hello world!a',
13, 13, false,
'a'
......@@ -140,7 +139,7 @@ suite('TextAreaState', () => {
test('extractNewText - had previous text 2', () => {
testExtractNewText(
new TextAreaState('Hello world!', 0, 0, false, 0),
new TextAreaState(null, 'Hello world!', 0, 0, false, 0),
'aHello world!',
1, 1, false,
'a'
......@@ -149,7 +148,7 @@ suite('TextAreaState', () => {
test('extractNewText - had previous text 3', () => {
testExtractNewText(
new TextAreaState('Hello world!', 6, 11, false, 0),
new TextAreaState(null, 'Hello world!', 6, 11, false, 0),
'Hello other!',
11, 11, false,
'other'
......@@ -158,7 +157,7 @@ suite('TextAreaState', () => {
test('extractNewText - IME', () => {
testExtractNewText(
new TextAreaState('', 0, 0, false, 0),
new TextAreaState(null, '', 0, 0, false, 0),
'これは',
3, 3, false,
'これは'
......@@ -167,16 +166,69 @@ suite('TextAreaState', () => {
test('extractNewText - isInOverwriteMode', () => {
testExtractNewText(
new TextAreaState('Hello world!', 0, 0, false, 0),
new TextAreaState(null, 'Hello world!', 0, 0, false, 0),
'Aello world!',
1, 1, true,
'A'
);
});
function testExtractMacReplacedText(prevState:TextAreaState, value:string, selectionStart:number, selectionEnd:number, isInOverwriteMode: boolean, expected:string): void {
let textArea = new MockTextAreaWrapper();
textArea._value = value;
textArea._selectionStart = selectionStart;
textArea._selectionEnd = selectionEnd;
textArea._isInOverwriteMode = isInOverwriteMode;
let newState = (prevState || TextAreaState.EMPTY).fromTextArea(textArea);
let actual = newState.extractMacReplacedText();
assert.equal(actual, expected);
textArea.dispose();
}
test('extractMacReplacedText - does nothing if there is selection', () => {
testExtractMacReplacedText(
new TextAreaState(null, 'Hello world!', 0, 0, false, 0),
'Hellö world!',
4, 5, false,
''
);
});
test('extractMacReplacedText - does nothing if there is more than one extra char', () => {
testExtractMacReplacedText(
new TextAreaState(null, 'Hello world!', 0, 0, false, 0),
'Hellöö world!',
6, 6, false,
''
);
});
test('extractMacReplacedText - does nothing if there is more than one changed char', () => {
testExtractMacReplacedText(
new TextAreaState(null, 'Hello world!', 0, 0, false, 0),
'Helöö world!',
6, 6, false,
''
);
});
test('extractMacReplacedText', () => {
testExtractMacReplacedText(
new TextAreaState(null, 'Hello world!', 0, 0, false, 0),
'Hellö world!',
5, 5, false,
'ö'
);
});
function testFromEditorSelectionAndPreviousState(eol:string, lines:string[], range:Range, prevSelectionToken:number): TextAreaState {
let model = new SimpleModel(lines, eol);
return TextAreaState.fromEditorSelectionAndPreviousState(model, range, prevSelectionToken);
let previousState = new TextAreaState(null, '', 0, 0, false, prevSelectionToken);
return previousState.fromEditorSelection(model, range);
}
test('fromEditorSelectionAndPreviousState - no selection on first line', () => {
......
......@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
import {ITextAreaWrapper, IClipboardEvent, IKeyboardEventWrapper, ITextAreaStyle} from 'vs/editor/common/controller/textAreaState';
import {ITextAreaWrapper, IClipboardEvent, IKeyboardEventWrapper} from 'vs/editor/common/controller/textAreaState';
import Event, {Emitter} from 'vs/base/common/event';
import {Disposable} from 'vs/base/common/lifecycle';
......@@ -40,7 +40,6 @@ export class MockTextAreaWrapper extends Disposable implements ITextAreaWrapper
public _value: string;
public _selectionStart: number;
public _selectionEnd: number;
public _lastSetStyle: ITextAreaStyle;
public _isInOverwriteMode: boolean;
constructor() {
......@@ -48,7 +47,6 @@ export class MockTextAreaWrapper extends Disposable implements ITextAreaWrapper
this._value = '';
this._selectionStart = 0;
this._selectionEnd = 0;
this._lastSetStyle = null;
this._isInOverwriteMode = false;
}
......@@ -87,10 +85,6 @@ export class MockTextAreaWrapper extends Disposable implements ITextAreaWrapper
this._selectionEnd = selectionEnd;
}
public setStyle(style:ITextAreaStyle): void {
this._lastSetStyle = style;
}
public isInOverwriteMode(): boolean {
return this._isInOverwriteMode;
}
......
......@@ -527,6 +527,8 @@ export class AdaptiveCollapsibleViewletView extends FixedCollapsibleView impleme
protected actionRunner: IActionRunner;
protected isDisposed: boolean;
private dragHandler: DelayedDragHandler
constructor(
actionRunner: IActionRunner,
initialBodySize: number,
......@@ -560,7 +562,7 @@ export class AdaptiveCollapsibleViewletView extends FixedCollapsibleView impleme
this.toolBar.setActions(prepareActions(this.getActions()), prepareActions(this.getSecondaryActions()))();
// Expand on drag over
new DelayedDragHandler(container, () => {
this.dragHandler = new DelayedDragHandler(container, () => {
if (!this.isExpanded()) {
this.expand();
}
......@@ -629,6 +631,8 @@ export class AdaptiveCollapsibleViewletView extends FixedCollapsibleView impleme
this.treeContainer = null;
this.tree.dispose();
this.dragHandler.dispose();
this.toDispose = disposeAll(this.toDispose);
if (this.toolBar) {
......@@ -648,6 +652,8 @@ export class CollapsibleViewletView extends CollapsibleView implements IViewletV
protected actionRunner: IActionRunner;
protected isDisposed: boolean;
private dragHandler: DelayedDragHandler;
constructor(
actionRunner: IActionRunner,
collapsed: boolean,
......@@ -679,7 +685,7 @@ export class CollapsibleViewletView extends CollapsibleView implements IViewletV
this.toolBar.setActions(prepareActions(this.getActions()), prepareActions(this.getSecondaryActions()))();
// Expand on drag over
new DelayedDragHandler(container, () => {
this.dragHandler = new DelayedDragHandler(container, () => {
if (!this.isExpanded()) {
this.expand();
}
......@@ -747,6 +753,8 @@ export class CollapsibleViewletView extends CollapsibleView implements IViewletV
this.isDisposed = true;
this.treeContainer = null;
this.tree.dispose();
this.dragHandler.dispose();
this.toDispose = disposeAll(this.toDispose);
......
......@@ -174,7 +174,7 @@ export class RawDebugSession extends v8.V8Protocol implements debug.IRawDebugSes
private connectServer(port: number): Promise {
return new Promise((c, e) => {
this.socket = net.createConnection(port, null, () => {
this.socket = net.createConnection(port, '127.0.0.1', () => {
this.connect(this.socket, <any>this.socket);
c(null);
});
......
......@@ -987,7 +987,7 @@ export class SearchViewlet extends Viewlet {
public layout(dimension: Dimension): void {
this.size = dimension;
Promise.timeout(10).done(() => { this.reLayout(); }, errors.onUnexpectedError);
this.reLayout();
}
public getControl(): ITree {
......
......@@ -447,7 +447,9 @@ export class TestQuickOpenService implements QuickOpenService.IQuickOpenService
}
show(prefix?: string, quickNavigateConfiguration?: any): Promise {
this.callback && this.callback(prefix);
if (this.callback) {
this.callback(prefix);
}
return Promise.as(true);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册