forked from redhat-developer/vscode-yaml
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjson-schema-selection.test.ts
More file actions
109 lines (93 loc) · 4.9 KB
/
json-schema-selection.test.ts
File metadata and controls
109 lines (93 loc) · 4.9 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
99
100
101
102
103
104
105
106
107
108
109
/*---------------------------------------------------------------------------------------------
* Copyright (c) Red Hat, Inc. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as sinon from 'sinon';
import * as sinonChai from 'sinon-chai';
import * as chai from 'chai';
import { createJSONSchemaStatusBarItem } from '../src/schema-status-bar-item';
import { CommonLanguageClient } from 'vscode-languageclient';
import * as vscode from 'vscode';
import { TestLanguageClient } from './helper';
import * as jsonStatusBar from '../src/schema-status-bar-item';
const expect = chai.expect;
chai.use(sinonChai);
describe('Completion should work in multiple different scenarios', () => {
const sandbox = sinon.createSandbox();
let clock: sinon.SinonFakeTimers;
let clcStub: sinon.SinonStubbedInstance<TestLanguageClient>;
let registerCommandStub: sinon.SinonStub;
let createStatusBarItemStub: sinon.SinonStub;
let onDidChangeActiveTextEditorStub: sinon.SinonStub;
beforeEach(() => {
clcStub = sandbox.stub(new TestLanguageClient());
registerCommandStub = sandbox.stub(vscode.commands, 'registerCommand');
createStatusBarItemStub = sandbox.stub(vscode.window, 'createStatusBarItem');
onDidChangeActiveTextEditorStub = sandbox.stub(vscode.window, 'onDidChangeActiveTextEditor');
sandbox.stub(vscode.window, 'activeTextEditor').returns(undefined);
clock = sandbox.useFakeTimers();
sandbox.stub(jsonStatusBar, 'statusBarItem').returns(undefined);
});
afterEach(() => {
clock.restore();
sandbox.restore();
});
it('Should create status bar item for JSON Schema', () => {
const context: vscode.ExtensionContext = {
subscriptions: [],
} as vscode.ExtensionContext;
createStatusBarItemStub.returns({});
createJSONSchemaStatusBarItem(context, (clcStub as unknown) as CommonLanguageClient);
expect(registerCommandStub).calledOnceWith('yaml.select.json.schema');
expect(createStatusBarItemStub).calledOnceWith(vscode.StatusBarAlignment.Right);
expect(context.subscriptions).has.length(2);
});
it('Should update status bar on editor change', async () => {
const context: vscode.ExtensionContext = {
subscriptions: [],
} as vscode.ExtensionContext;
const statusBar = ({ show: sandbox.stub() } as unknown) as vscode.StatusBarItem;
createStatusBarItemStub.returns(statusBar);
onDidChangeActiveTextEditorStub.returns({});
clcStub.sendRequest.resolves([{ uri: 'https://foo.com/bar.json', name: 'bar schema' }]);
createJSONSchemaStatusBarItem(context, (clcStub as unknown) as CommonLanguageClient);
const callBackFn = onDidChangeActiveTextEditorStub.firstCall.firstArg;
await callBackFn({ document: { languageId: 'yaml', uri: vscode.Uri.parse('/foo.yaml') } });
expect(statusBar.text).to.equal('bar schema');
expect(statusBar.tooltip).to.equal('Select JSON Schema');
expect(statusBar.backgroundColor).to.be.undefined;
expect(statusBar.show).calledOnce;
});
it('Should inform if there are no schema', async () => {
const context: vscode.ExtensionContext = {
subscriptions: [],
} as vscode.ExtensionContext;
const statusBar = ({ show: sandbox.stub() } as unknown) as vscode.StatusBarItem;
createStatusBarItemStub.returns(statusBar);
onDidChangeActiveTextEditorStub.returns({});
clcStub.sendRequest.resolves([]);
createJSONSchemaStatusBarItem(context, (clcStub as unknown) as CommonLanguageClient);
const callBackFn = onDidChangeActiveTextEditorStub.firstCall.firstArg;
await callBackFn({ document: { languageId: 'yaml', uri: vscode.Uri.parse('/foo.yaml') } });
expect(statusBar.text).to.equal('No JSON Schema');
expect(statusBar.tooltip).to.equal('Select JSON Schema');
expect(statusBar.backgroundColor).to.be.undefined;
expect(statusBar.show).calledOnce;
});
it('Should inform if there are more than one schema', async () => {
const context: vscode.ExtensionContext = {
subscriptions: [],
} as vscode.ExtensionContext;
const statusBar = ({ show: sandbox.stub() } as unknown) as vscode.StatusBarItem;
createStatusBarItemStub.returns(statusBar);
onDidChangeActiveTextEditorStub.returns({});
clcStub.sendRequest.resolves([{}, {}]);
createJSONSchemaStatusBarItem(context, (clcStub as unknown) as CommonLanguageClient);
const callBackFn = onDidChangeActiveTextEditorStub.firstCall.firstArg;
await callBackFn({ document: { languageId: 'yaml', uri: vscode.Uri.parse('/foo.yaml') } });
expect(statusBar.text).to.equal('Multiple JSON Schemas...');
expect(statusBar.tooltip).to.equal('Multiple JSON Schema used to validate this file, click to select one');
expect(statusBar.backgroundColor).to.eql({ id: 'statusBarItem.warningBackground' });
expect(statusBar.show).calledOnce;
});
});