Skip to content

Commit 7e0da93

Browse files
committed
Add tests for undo-redo
1 parent f268124 commit 7e0da93

1 file changed

Lines changed: 131 additions & 0 deletions

File tree

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import * as assert from 'assert';
7+
import { UndoRedoService } from 'vs/platform/undoRedo/common/undoRedoService';
8+
import { TestDialogService } from 'vs/platform/dialogs/test/common/testDialogService';
9+
import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService';
10+
import { UndoRedoElementType, IUndoRedoElement } from 'vs/platform/undoRedo/common/undoRedo';
11+
import { URI } from 'vs/base/common/uri';
12+
13+
suite('UndoRedoService', () => {
14+
15+
function createUndoRedoService(): UndoRedoService {
16+
const dialogService = new TestDialogService();
17+
const notificationService = new TestNotificationService();
18+
return new UndoRedoService(dialogService, notificationService);
19+
}
20+
21+
test('simple single element', () => {
22+
const resource = URI.file('test.txt');
23+
const service = createUndoRedoService();
24+
25+
assert.equal(service.canUndo(resource), false);
26+
assert.equal(service.canRedo(resource), false);
27+
assert.equal(service.hasElements(resource), false);
28+
assert.ok(service.getLastElement(resource) === null);
29+
30+
let undoCall1 = 0;
31+
let redoCall1 = 0;
32+
const element1: IUndoRedoElement = {
33+
type: UndoRedoElementType.Resource,
34+
resource: resource,
35+
label: 'typing 1',
36+
undo: () => { undoCall1++; },
37+
redo: () => { redoCall1++; }
38+
};
39+
service.pushElement(element1);
40+
41+
assert.equal(undoCall1, 0);
42+
assert.equal(redoCall1, 0);
43+
assert.equal(service.canUndo(resource), true);
44+
assert.equal(service.canRedo(resource), false);
45+
assert.equal(service.hasElements(resource), true);
46+
assert.ok(service.getLastElement(resource) === element1);
47+
48+
service.undo(resource);
49+
assert.equal(undoCall1, 1);
50+
assert.equal(redoCall1, 0);
51+
assert.equal(service.canUndo(resource), false);
52+
assert.equal(service.canRedo(resource), true);
53+
assert.equal(service.hasElements(resource), true);
54+
assert.ok(service.getLastElement(resource) === null);
55+
56+
service.redo(resource);
57+
assert.equal(undoCall1, 1);
58+
assert.equal(redoCall1, 1);
59+
assert.equal(service.canUndo(resource), true);
60+
assert.equal(service.canRedo(resource), false);
61+
assert.equal(service.hasElements(resource), true);
62+
assert.ok(service.getLastElement(resource) === element1);
63+
64+
let undoCall2 = 0;
65+
let redoCall2 = 0;
66+
const element2: IUndoRedoElement = {
67+
type: UndoRedoElementType.Resource,
68+
resource: resource,
69+
label: 'typing 2',
70+
undo: () => { undoCall2++; },
71+
redo: () => { redoCall2++; }
72+
};
73+
service.pushElement(element2);
74+
75+
assert.equal(undoCall1, 1);
76+
assert.equal(redoCall1, 1);
77+
assert.equal(undoCall2, 0);
78+
assert.equal(redoCall2, 0);
79+
assert.equal(service.canUndo(resource), true);
80+
assert.equal(service.canRedo(resource), false);
81+
assert.equal(service.hasElements(resource), true);
82+
assert.ok(service.getLastElement(resource) === element2);
83+
84+
service.undo(resource);
85+
86+
assert.equal(undoCall1, 1);
87+
assert.equal(redoCall1, 1);
88+
assert.equal(undoCall2, 1);
89+
assert.equal(redoCall2, 0);
90+
assert.equal(service.canUndo(resource), true);
91+
assert.equal(service.canRedo(resource), true);
92+
assert.equal(service.hasElements(resource), true);
93+
assert.ok(service.getLastElement(resource) === null);
94+
95+
let undoCall3 = 0;
96+
let redoCall3 = 0;
97+
const element3: IUndoRedoElement = {
98+
type: UndoRedoElementType.Resource,
99+
resource: resource,
100+
label: 'typing 2',
101+
undo: () => { undoCall3++; },
102+
redo: () => { redoCall3++; }
103+
};
104+
service.pushElement(element3);
105+
106+
assert.equal(undoCall1, 1);
107+
assert.equal(redoCall1, 1);
108+
assert.equal(undoCall2, 1);
109+
assert.equal(redoCall2, 0);
110+
assert.equal(undoCall3, 0);
111+
assert.equal(redoCall3, 0);
112+
assert.equal(service.canUndo(resource), true);
113+
assert.equal(service.canRedo(resource), false);
114+
assert.equal(service.hasElements(resource), true);
115+
assert.ok(service.getLastElement(resource) === element3);
116+
117+
service.undo(resource);
118+
119+
assert.equal(undoCall1, 1);
120+
assert.equal(redoCall1, 1);
121+
assert.equal(undoCall2, 1);
122+
assert.equal(redoCall2, 0);
123+
assert.equal(undoCall3, 1);
124+
assert.equal(redoCall3, 0);
125+
assert.equal(service.canUndo(resource), true);
126+
assert.equal(service.canRedo(resource), true);
127+
assert.equal(service.hasElements(resource), true);
128+
assert.ok(service.getLastElement(resource) === null);
129+
});
130+
131+
});

0 commit comments

Comments
 (0)