forked from redhat-developer/yaml-language-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathyamlValidation.test.ts
More file actions
95 lines (88 loc) · 3.94 KB
/
yamlValidation.test.ts
File metadata and controls
95 lines (88 loc) · 3.94 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
/*---------------------------------------------------------------------------------------------
* Copyright (c) Red Hat. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Diagnostic } from 'vscode-languageserver-types';
import { ValidationHandler } from '../src/languageserver/handlers/validationHandlers';
import { SettingsState, TextDocumentTestManager } from '../src/yamlSettings';
import { ServiceSetup } from './utils/serviceSetup';
import { setupLanguageService, setupSchemaIDTextDocument } from './utils/testHelper';
import { expect } from 'chai';
import { createExpectedError, createUnusedAnchorDiagnostic } from './utils/verifyError';
describe('YAML Validation Tests', () => {
let languageSettingsSetup: ServiceSetup;
let validationHandler: ValidationHandler;
let yamlSettings: SettingsState;
before(() => {
languageSettingsSetup = new ServiceSetup().withValidate();
const { validationHandler: valHandler, yamlSettings: settings } = setupLanguageService(
languageSettingsSetup.languageSettings
);
validationHandler = valHandler;
yamlSettings = settings;
});
function parseSetup(content: string, customSchemaID?: string): Promise<Diagnostic[]> {
const testTextDocument = setupSchemaIDTextDocument(content, customSchemaID);
yamlSettings.documents = new TextDocumentTestManager();
(yamlSettings.documents as TextDocumentTestManager).set(testTextDocument);
return validationHandler.validateTextDocument(testTextDocument);
}
describe('TAB Character diagnostics', () => {
it('Should report if TAB character present', async () => {
const yaml = 'foo:\n\t- bar';
const result = await parseSetup(yaml);
expect(result).is.not.empty;
expect(result.length).to.be.equal(1);
expect(result[0]).deep.equal(createExpectedError('Tabs are not allowed as indentation', 1, 0, 1, 6));
});
it('Should report one error for TAB character present in a row', async () => {
const yaml = 'foo:\n\t\t- bar';
const result = await parseSetup(yaml);
expect(result).is.not.empty;
expect(result.length).to.be.equal(1);
expect(result[0]).deep.equal(createExpectedError('Tabs are not allowed as indentation', 1, 0, 1, 7));
});
it('Should report one error for TAB`s characters present in the middle of indentation', async () => {
const yaml = 'foo:\n \t\t\t - bar';
const result = await parseSetup(yaml);
expect(result).is.not.empty;
expect(result.length).to.be.equal(1);
expect(result[0]).deep.equal(createExpectedError('Tabs are not allowed as indentation', 1, 1, 1, 10));
});
});
describe('Unused anchors diagnostics', () => {
it('should report unused anchor', async () => {
const yaml = 'foo: &bar bar\n';
const result = await parseSetup(yaml);
expect(result).is.not.empty;
expect(result.length).to.be.equal(1);
expect(result[0]).deep.equal(createUnusedAnchorDiagnostic('Unused anchor "&bar"', 0, 5, 0, 9));
});
it('should not report used anchor', async () => {
const yaml = 'foo: &bar bar\nfff: *bar';
const result = await parseSetup(yaml);
expect(result).is.empty;
});
it('should report unused anchors in array ', async () => {
const yaml = `foo: &bar doe
aaa: some
dd: *ba
some:
&a ss: ss
&aa ff:
- s
- o
- &e m
- e`;
const result = await parseSetup(yaml);
expect(result).is.not.empty;
expect(result.length).to.be.equal(4);
expect(result).to.include.deep.members([
createUnusedAnchorDiagnostic('Unused anchor "&bar"', 0, 5, 0, 9),
createUnusedAnchorDiagnostic('Unused anchor "&a"', 4, 2, 4, 4),
createUnusedAnchorDiagnostic('Unused anchor "&aa"', 5, 0, 5, 3),
createUnusedAnchorDiagnostic('Unused anchor "&e"', 8, 4, 8, 6),
]);
});
});
});