201 lines
11 KiB
JavaScript
201 lines
11 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Red Hat. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
const vscode_languageserver_types_1 = require("vscode-languageserver-types");
|
|
const yamlSettings_1 = require("../src/yamlSettings");
|
|
const serviceSetup_1 = require("./utils/serviceSetup");
|
|
const testHelper_1 = require("./utils/testHelper");
|
|
const chai_1 = require("chai");
|
|
const verifyError_1 = require("./utils/verifyError");
|
|
describe('YAML Validation Tests', () => {
|
|
let languageSettingsSetup;
|
|
let validationHandler;
|
|
let yamlSettings;
|
|
before(() => {
|
|
languageSettingsSetup = new serviceSetup_1.ServiceSetup().withValidate();
|
|
const { validationHandler: valHandler, yamlSettings: settings } = (0, testHelper_1.setupLanguageService)(languageSettingsSetup.languageSettings);
|
|
validationHandler = valHandler;
|
|
yamlSettings = settings;
|
|
});
|
|
function parseSetup(content, customSchemaID) {
|
|
const testTextDocument = (0, testHelper_1.setupSchemaIDTextDocument)(content, customSchemaID);
|
|
yamlSettings.documents = new yamlSettings_1.TextDocumentTestManager();
|
|
yamlSettings.documents.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);
|
|
(0, chai_1.expect)(result).is.not.empty;
|
|
(0, chai_1.expect)(result.length).to.be.equal(1);
|
|
(0, chai_1.expect)(result[0]).deep.equal((0, verifyError_1.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);
|
|
(0, chai_1.expect)(result).is.not.empty;
|
|
(0, chai_1.expect)(result.length).to.be.equal(1);
|
|
(0, chai_1.expect)(result[0]).deep.equal((0, verifyError_1.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);
|
|
(0, chai_1.expect)(result).is.not.empty;
|
|
(0, chai_1.expect)(result.length).to.be.equal(1);
|
|
(0, chai_1.expect)(result[0]).deep.equal((0, verifyError_1.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);
|
|
(0, chai_1.expect)(result).is.not.empty;
|
|
(0, chai_1.expect)(result.length).to.be.equal(1);
|
|
(0, chai_1.expect)(result[0]).deep.equal((0, verifyError_1.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);
|
|
(0, chai_1.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
|
|
- &g o
|
|
- &e m
|
|
- e
|
|
ee: *g`;
|
|
const result = await parseSetup(yaml);
|
|
(0, chai_1.expect)(result).is.not.empty;
|
|
(0, chai_1.expect)(result.length).to.be.equal(4);
|
|
(0, chai_1.expect)(result).to.include.deep.members([
|
|
(0, verifyError_1.createUnusedAnchorDiagnostic)('Unused anchor "&bar"', 0, 5, 0, 9),
|
|
(0, verifyError_1.createUnusedAnchorDiagnostic)('Unused anchor "&a"', 4, 2, 4, 4),
|
|
(0, verifyError_1.createUnusedAnchorDiagnostic)('Unused anchor "&aa"', 5, 0, 5, 3),
|
|
(0, verifyError_1.createUnusedAnchorDiagnostic)('Unused anchor "&e"', 8, 4, 8, 6),
|
|
]);
|
|
});
|
|
});
|
|
describe(`YAML styles test`, () => {
|
|
it('should not report flow style', async () => {
|
|
const yaml = `host: phl-42
|
|
datacenter:
|
|
location: canada
|
|
cab: 15
|
|
animals:
|
|
- dog
|
|
- cat
|
|
- mouse`;
|
|
const result = await parseSetup(yaml);
|
|
(0, chai_1.expect)(result).to.be.empty;
|
|
});
|
|
it('should report flow style', async () => {
|
|
const yaml = `host: phl-42
|
|
datacenter: {location: canada , cab: 15}
|
|
animals: [dog , cat , mouse] `;
|
|
yamlSettings.style = {
|
|
flowMapping: 'forbid',
|
|
flowSequence: 'forbid',
|
|
};
|
|
languageSettingsSetup = new serviceSetup_1.ServiceSetup().withValidate().withFlowMapping('forbid').withFlowSequence('forbid');
|
|
const { validationHandler: valHandler, yamlSettings: settings } = (0, testHelper_1.setupLanguageService)(languageSettingsSetup.languageSettings);
|
|
validationHandler = valHandler;
|
|
yamlSettings = settings;
|
|
const result = await parseSetup(yaml);
|
|
(0, chai_1.expect)(result).not.to.be.empty;
|
|
(0, chai_1.expect)(result.length).to.be.equal(2);
|
|
(0, chai_1.expect)(result).to.include.deep.members([
|
|
(0, verifyError_1.createExpectedError)('Flow style mapping is forbidden', 1, 12, 1, 42, vscode_languageserver_types_1.DiagnosticSeverity.Error, 'YAML', 'flowMap'),
|
|
(0, verifyError_1.createExpectedError)('Flow style sequence is forbidden', 2, 9, 2, 28, vscode_languageserver_types_1.DiagnosticSeverity.Error, 'YAML', 'flowSeq'),
|
|
]);
|
|
});
|
|
it('should report only sequence when flow mapping is allow', async () => {
|
|
const yaml = `host: phl-42
|
|
datacenter: {location: canada , cab: 15}
|
|
animals: [dog , cat , mouse] `;
|
|
yamlSettings.style = {
|
|
flowMapping: 'forbid',
|
|
flowSequence: 'forbid',
|
|
};
|
|
languageSettingsSetup = new serviceSetup_1.ServiceSetup().withValidate().withFlowMapping('allow').withFlowSequence('forbid');
|
|
const { validationHandler: valHandler, yamlSettings: settings } = (0, testHelper_1.setupLanguageService)(languageSettingsSetup.languageSettings);
|
|
validationHandler = valHandler;
|
|
yamlSettings = settings;
|
|
const result = await parseSetup(yaml);
|
|
(0, chai_1.expect)(result).not.to.be.empty;
|
|
(0, chai_1.expect)(result.length).to.be.equal(1);
|
|
(0, chai_1.expect)(result).to.include.deep.members([
|
|
(0, verifyError_1.createExpectedError)('Flow style sequence is forbidden', 2, 9, 2, 28, vscode_languageserver_types_1.DiagnosticSeverity.Error, 'YAML', 'flowSeq'),
|
|
]);
|
|
});
|
|
it('should report flow error for empty map & sequence', async () => {
|
|
const yaml = 'object: {} \nobject2: []';
|
|
yamlSettings.style = {
|
|
flowMapping: 'forbid',
|
|
flowSequence: 'forbid',
|
|
};
|
|
languageSettingsSetup = new serviceSetup_1.ServiceSetup().withValidate().withFlowMapping('forbid').withFlowSequence('forbid');
|
|
const { validationHandler: valHandler, yamlSettings: settings } = (0, testHelper_1.setupLanguageService)(languageSettingsSetup.languageSettings);
|
|
validationHandler = valHandler;
|
|
yamlSettings = settings;
|
|
const result = await parseSetup(yaml);
|
|
(0, chai_1.expect)(result).not.to.be.empty;
|
|
(0, chai_1.expect)(result.length).to.be.equal(2);
|
|
(0, chai_1.expect)(result).to.include.deep.members([
|
|
(0, verifyError_1.createExpectedError)('Flow style mapping is forbidden', 0, 8, 0, 11, vscode_languageserver_types_1.DiagnosticSeverity.Error, 'YAML', 'flowMap'),
|
|
(0, verifyError_1.createExpectedError)('Flow style sequence is forbidden', 1, 9, 1, 10, vscode_languageserver_types_1.DiagnosticSeverity.Error, 'YAML', 'flowSeq'),
|
|
]);
|
|
});
|
|
});
|
|
describe('Map keys order Tests', () => {
|
|
it('should report key order error', async () => {
|
|
const yaml = '- key 2: v\n key 1: val\n key 5: valu\n key 3: ff';
|
|
yamlSettings.keyOrdering = true;
|
|
languageSettingsSetup = new serviceSetup_1.ServiceSetup().withValidate().withKeyOrdering();
|
|
const { validationHandler: valHandler, yamlSettings: settings } = (0, testHelper_1.setupLanguageService)(languageSettingsSetup.languageSettings);
|
|
validationHandler = valHandler;
|
|
yamlSettings = settings;
|
|
const result = await parseSetup(yaml);
|
|
(0, chai_1.expect)(result).not.to.be.empty;
|
|
(0, chai_1.expect)(result.length).to.be.equal(2);
|
|
(0, chai_1.expect)(result).to.include.deep.members([
|
|
(0, verifyError_1.createExpectedError)('Wrong ordering of key "key 2" in mapping', 0, 2, 0, 9, vscode_languageserver_types_1.DiagnosticSeverity.Error, 'YAML', 'mapKeyOrder'),
|
|
(0, verifyError_1.createExpectedError)('Wrong ordering of key "key 5" in mapping', 2, 0, 2, 9, vscode_languageserver_types_1.DiagnosticSeverity.Error, 'YAML', 'mapKeyOrder'),
|
|
]);
|
|
});
|
|
it('should report key order error for flow style maps', async () => {
|
|
const yaml = '- {b: 1, a: 2}';
|
|
yamlSettings.keyOrdering = true;
|
|
languageSettingsSetup = new serviceSetup_1.ServiceSetup().withValidate().withKeyOrdering();
|
|
const { validationHandler: valHandler, yamlSettings: settings } = (0, testHelper_1.setupLanguageService)(languageSettingsSetup.languageSettings);
|
|
validationHandler = valHandler;
|
|
yamlSettings = settings;
|
|
const result = await parseSetup(yaml);
|
|
(0, chai_1.expect)(result).not.to.be.empty;
|
|
(0, chai_1.expect)(result.length).to.be.equal(1);
|
|
(0, chai_1.expect)(result).to.include.deep.members([
|
|
(0, verifyError_1.createExpectedError)('Wrong ordering of key "b" in mapping', 0, 3, 0, 6, vscode_languageserver_types_1.DiagnosticSeverity.Error, 'YAML', 'mapKeyOrder'),
|
|
]);
|
|
});
|
|
it('should NOT report any errors', async () => {
|
|
const yaml = '- key 1: val\n key 5: valu\n- {a: 1, c: 2}';
|
|
yamlSettings.keyOrdering = true;
|
|
languageSettingsSetup = new serviceSetup_1.ServiceSetup().withValidate().withKeyOrdering();
|
|
const { validationHandler: valHandler, yamlSettings: settings } = (0, testHelper_1.setupLanguageService)(languageSettingsSetup.languageSettings);
|
|
validationHandler = valHandler;
|
|
yamlSettings = settings;
|
|
const result = await parseSetup(yaml);
|
|
(0, chai_1.expect)(result).to.be.empty;
|
|
});
|
|
});
|
|
});
|
|
//# sourceMappingURL=yamlValidation.test.js.map
|