@@ -37,6 +37,7 @@ import {getNavigateToItems} from 'vs/workbench/parts/search/common/search';
3737import { rename } from 'vs/editor/contrib/rename/common/rename' ;
3838import { getParameterHints } from 'vs/editor/contrib/parameterHints/common/parameterHints' ;
3939import { suggest } from 'vs/editor/contrib/suggest/common/suggest' ;
40+ import { formatDocument , formatRange } from 'vs/editor/contrib/format/common/format' ;
4041
4142const defaultSelector = { scheme : 'far' } ;
4243const model : EditorCommon . IModel = new EditorModel (
@@ -907,4 +908,66 @@ suite('ExtHostLanguageFeatures', function() {
907908 } ) ;
908909 } ) ;
909910 } ) ;
911+
912+ // --- format
913+
914+ test ( 'Format Doc, data conversion' , function ( done ) {
915+ disposables . push ( extHost . registerDocumentFormattingEditProvider ( defaultSelector , < vscode . DocumentFormattingEditProvider > {
916+ provideDocumentFormattingEdits ( ) : any {
917+ return [ new types . TextEdit ( new types . Range ( 0 , 0 , 1 , 1 ) , 'testing' ) ] ;
918+ }
919+ } ) ) ;
920+
921+ threadService . sync ( ) . then ( ( ) => {
922+ formatDocument ( model , { insertSpaces : true , tabSize : 4 } ) . then ( value => {
923+ assert . equal ( value . length , 1 ) ;
924+ let [ first ] = value ;
925+ assert . equal ( first . text , 'testing' ) ;
926+ assert . deepEqual ( first . range , { startLineNumber : 1 , startColumn : 1 , endLineNumber : 2 , endColumn : 2 } ) ;
927+ done ( ) ;
928+ } ) ;
929+ } ) ;
930+ } ) ;
931+
932+ test ( 'Format Doc, evil provider' , function ( done ) {
933+ disposables . push ( extHost . registerDocumentFormattingEditProvider ( defaultSelector , < vscode . DocumentFormattingEditProvider > {
934+ provideDocumentFormattingEdits ( ) : any {
935+ throw new Error ( 'evil' ) ;
936+ }
937+ } ) ) ;
938+
939+ threadService . sync ( ) . then ( ( ) => {
940+ formatDocument ( model , { insertSpaces : true , tabSize : 4 } ) . then ( undefined , err => done ( ) ) ;
941+ } ) ;
942+ } ) ;
943+
944+ test ( 'Format Range, data conversion' , function ( done ) {
945+ disposables . push ( extHost . registerDocumentRangeFormattingEditProvider ( defaultSelector , < vscode . DocumentRangeFormattingEditProvider > {
946+ provideDocumentRangeFormattingEdits ( ) : any {
947+ return [ new types . TextEdit ( new types . Range ( 0 , 0 , 1 , 1 ) , 'testing' ) ] ;
948+ }
949+ } ) ) ;
950+
951+ threadService . sync ( ) . then ( ( ) => {
952+ formatRange ( model , { startLineNumber : 1 , startColumn : 1 , endLineNumber : 1 , endColumn : 1 } , { insertSpaces : true , tabSize : 4 } ) . then ( value => {
953+ assert . equal ( value . length , 1 ) ;
954+ let [ first ] = value ;
955+ assert . equal ( first . text , 'testing' ) ;
956+ assert . deepEqual ( first . range , { startLineNumber : 1 , startColumn : 1 , endLineNumber : 2 , endColumn : 2 } ) ;
957+ done ( ) ;
958+ } ) ;
959+ } ) ;
960+ } )
961+
962+ test ( 'Format Range, evil provider' , function ( done ) {
963+ disposables . push ( extHost . registerDocumentRangeFormattingEditProvider ( defaultSelector , < vscode . DocumentRangeFormattingEditProvider > {
964+ provideDocumentRangeFormattingEdits ( ) : any {
965+ throw new Error ( 'evil' ) ;
966+ }
967+ } ) ) ;
968+
969+ threadService . sync ( ) . then ( ( ) => {
970+ formatRange ( model , { startLineNumber : 1 , startColumn : 1 , endLineNumber : 1 , endColumn : 1 } , { insertSpaces : true , tabSize : 4 } ) . then ( undefined , err => done ( ) ) ;
971+ } ) ;
972+ } )
910973} ) ;
0 commit comments