forked from microsoft/vscode-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrepl.unit.test.ts
More file actions
98 lines (89 loc) · 4.21 KB
/
repl.unit.test.ts
File metadata and controls
98 lines (89 loc) · 4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
import { expect } from 'chai';
import * as TypeMoq from 'typemoq';
import { Disposable, Uri } from 'vscode';
import {
IActiveResourceService,
ICommandManager,
IDocumentManager,
IWorkspaceService
} from '../../client/common/application/types';
import { Commands } from '../../client/common/constants';
import { IServiceContainer } from '../../client/ioc/types';
import { ReplProvider } from '../../client/providers/replProvider';
import { ICodeExecutionService } from '../../client/terminals/types';
// tslint:disable-next-line:max-func-body-length
suite('REPL Provider', () => {
let serviceContainer: TypeMoq.IMock<IServiceContainer>;
let commandManager: TypeMoq.IMock<ICommandManager>;
let workspace: TypeMoq.IMock<IWorkspaceService>;
let codeExecutionService: TypeMoq.IMock<ICodeExecutionService>;
let documentManager: TypeMoq.IMock<IDocumentManager>;
let activeResourceService: TypeMoq.IMock<IActiveResourceService>;
let replProvider: ReplProvider;
setup(() => {
serviceContainer = TypeMoq.Mock.ofType<IServiceContainer>();
commandManager = TypeMoq.Mock.ofType<ICommandManager>();
workspace = TypeMoq.Mock.ofType<IWorkspaceService>();
codeExecutionService = TypeMoq.Mock.ofType<ICodeExecutionService>();
documentManager = TypeMoq.Mock.ofType<IDocumentManager>();
activeResourceService = TypeMoq.Mock.ofType<IActiveResourceService>();
serviceContainer.setup(c => c.get(ICommandManager)).returns(() => commandManager.object);
serviceContainer.setup(c => c.get(IWorkspaceService)).returns(() => workspace.object);
serviceContainer
.setup(c => c.get(ICodeExecutionService, TypeMoq.It.isValue('repl')))
.returns(() => codeExecutionService.object);
serviceContainer.setup(c => c.get(IDocumentManager)).returns(() => documentManager.object);
serviceContainer.setup(c => c.get(IActiveResourceService)).returns(() => activeResourceService.object);
});
teardown(() => {
try {
replProvider.dispose();
// tslint:disable-next-line:no-empty
} catch {}
});
test('Ensure command is registered', () => {
replProvider = new ReplProvider(serviceContainer.object);
commandManager.verify(
c => c.registerCommand(TypeMoq.It.isValue(Commands.Start_REPL), TypeMoq.It.isAny(), TypeMoq.It.isAny()),
TypeMoq.Times.once()
);
});
test('Ensure command handler is disposed', () => {
const disposable = TypeMoq.Mock.ofType<Disposable>();
commandManager
.setup(c =>
c.registerCommand(TypeMoq.It.isValue(Commands.Start_REPL), TypeMoq.It.isAny(), TypeMoq.It.isAny())
)
.returns(() => disposable.object);
replProvider = new ReplProvider(serviceContainer.object);
replProvider.dispose();
disposable.verify(d => d.dispose(), TypeMoq.Times.once());
});
test('Ensure execution is carried smoothly in the handler if there are no errors', () => {
const resource = Uri.parse('a');
const disposable = TypeMoq.Mock.ofType<Disposable>();
let commandHandler: undefined | (() => void);
commandManager
.setup(c =>
c.registerCommand(TypeMoq.It.isValue(Commands.Start_REPL), TypeMoq.It.isAny(), TypeMoq.It.isAny())
)
.returns((_cmd, callback) => {
commandHandler = callback;
return disposable.object;
});
activeResourceService
.setup(a => a.getActiveResource())
.returns(() => resource)
.verifiable(TypeMoq.Times.once());
replProvider = new ReplProvider(serviceContainer.object);
expect(commandHandler).not.to.be.equal(undefined, 'Handler not set');
commandHandler!.call(replProvider);
serviceContainer.verify(
c => c.get(TypeMoq.It.isValue(ICodeExecutionService), TypeMoq.It.isValue('repl')),
TypeMoq.Times.once()
);
codeExecutionService.verify(c => c.initializeRepl(TypeMoq.It.isValue(resource)), TypeMoq.Times.once());
});
});