@@ -9,16 +9,17 @@ import { TestDialogService } from 'vs/platform/dialogs/test/common/testDialogSer
99import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService' ;
1010import { UndoRedoElementType , IUndoRedoElement } from 'vs/platform/undoRedo/common/undoRedo' ;
1111import { URI } from 'vs/base/common/uri' ;
12+ import { mock } from 'vs/base/test/common/mock' ;
13+ import { IDialogService } from 'vs/platform/dialogs/common/dialogs' ;
1214
1315suite ( 'UndoRedoService' , ( ) => {
1416
15- function createUndoRedoService ( ) : UndoRedoService {
16- const dialogService = new TestDialogService ( ) ;
17+ function createUndoRedoService ( dialogService : IDialogService = new TestDialogService ( ) ) : UndoRedoService {
1718 const notificationService = new TestNotificationService ( ) ;
1819 return new UndoRedoService ( dialogService , notificationService ) ;
1920 }
2021
21- test ( 'simple single element ' , ( ) => {
22+ test ( 'simple single resource elements ' , ( ) => {
2223 const resource = URI . file ( 'test.txt' ) ;
2324 const service = createUndoRedoService ( ) ;
2425
@@ -128,4 +129,79 @@ suite('UndoRedoService', () => {
128129 assert . ok ( service . getLastElement ( resource ) === null ) ;
129130 } ) ;
130131
132+ test ( 'multi resource elements' , async ( ) => {
133+ const resource1 = URI . file ( 'test1.txt' ) ;
134+ const resource2 = URI . file ( 'test2.txt' ) ;
135+ const service = createUndoRedoService ( new class extends mock < IDialogService > ( ) {
136+ async show ( ) {
137+ return {
138+ choice : 0 // confirm!
139+ } ;
140+ }
141+ } ) ;
142+
143+ let undoCall1 = 0 , undoCall11 = 0 , undoCall12 = 0 ;
144+ let redoCall1 = 0 , redoCall11 = 0 , redoCall12 = 0 ;
145+ const element1 : IUndoRedoElement = {
146+ type : UndoRedoElementType . Workspace ,
147+ resources : [ resource1 , resource2 ] ,
148+ label : 'typing 1' ,
149+ undo : ( ) => { undoCall1 ++ ; } ,
150+ redo : ( ) => { redoCall1 ++ ; } ,
151+ split : ( ) => {
152+ return [
153+ {
154+ type : UndoRedoElementType . Resource ,
155+ resource : resource1 ,
156+ label : 'typing 1.1' ,
157+ undo : ( ) => { undoCall11 ++ ; } ,
158+ redo : ( ) => { redoCall11 ++ ; }
159+ } ,
160+ {
161+ type : UndoRedoElementType . Resource ,
162+ resource : resource2 ,
163+ label : 'typing 1.2' ,
164+ undo : ( ) => { undoCall12 ++ ; } ,
165+ redo : ( ) => { redoCall12 ++ ; }
166+ }
167+ ] ;
168+ }
169+ } ;
170+ service . pushElement ( element1 ) ;
171+
172+ assert . equal ( service . canUndo ( resource1 ) , true ) ;
173+ assert . equal ( service . canRedo ( resource1 ) , false ) ;
174+ assert . equal ( service . hasElements ( resource1 ) , true ) ;
175+ assert . ok ( service . getLastElement ( resource1 ) === element1 ) ;
176+ assert . equal ( service . canUndo ( resource2 ) , true ) ;
177+ assert . equal ( service . canRedo ( resource2 ) , false ) ;
178+ assert . equal ( service . hasElements ( resource2 ) , true ) ;
179+ assert . ok ( service . getLastElement ( resource2 ) === element1 ) ;
180+
181+ await service . undo ( resource1 ) ;
182+
183+ assert . equal ( undoCall1 , 1 ) ;
184+ assert . equal ( redoCall1 , 0 ) ;
185+ assert . equal ( service . canUndo ( resource1 ) , false ) ;
186+ assert . equal ( service . canRedo ( resource1 ) , true ) ;
187+ assert . equal ( service . hasElements ( resource1 ) , true ) ;
188+ assert . ok ( service . getLastElement ( resource1 ) === null ) ;
189+ assert . equal ( service . canUndo ( resource2 ) , false ) ;
190+ assert . equal ( service . canRedo ( resource2 ) , true ) ;
191+ assert . equal ( service . hasElements ( resource2 ) , true ) ;
192+ assert . ok ( service . getLastElement ( resource2 ) === null ) ;
193+
194+ await service . redo ( resource2 ) ;
195+ assert . equal ( undoCall1 , 1 ) ;
196+ assert . equal ( redoCall1 , 1 ) ;
197+ assert . equal ( service . canUndo ( resource1 ) , true ) ;
198+ assert . equal ( service . canRedo ( resource1 ) , false ) ;
199+ assert . equal ( service . hasElements ( resource1 ) , true ) ;
200+ assert . ok ( service . getLastElement ( resource1 ) === element1 ) ;
201+ assert . equal ( service . canUndo ( resource2 ) , true ) ;
202+ assert . equal ( service . canRedo ( resource2 ) , false ) ;
203+ assert . equal ( service . hasElements ( resource2 ) , true ) ;
204+ assert . ok ( service . getLastElement ( resource2 ) === element1 ) ;
205+
206+ } ) ;
131207} ) ;
0 commit comments