plaxtony
Version:
Static code analysis of SC2 Galaxy Script
88 lines • 4.16 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
require("mocha");
const chai_1 = require("chai");
const definitions_1 = require("../../src/service/definitions");
const helpers_1 = require("../helpers");
const provider_1 = require("../../src/service/provider");
const utils_1 = require("../../src/service/utils");
const archive_1 = require("../../src/sc2mod/archive");
describe('Service Definition', () => {
const refsDoc = helpers_1.mockupTextDocument('service', 'definition', 'refs.galaxy');
const headerDoc = helpers_1.mockupTextDocument('service', 'definition', 'header.galaxy');
const store = helpers_1.mockupStore(headerDoc, refsDoc);
const defProvider = provider_1.createProvider(definitions_1.DefinitionProvider, store);
before(async () => {
await store.updateS2Workspace(new archive_1.SC2Workspace(new archive_1.SC2Archive('definition', helpers_1.fixtureFilePath('service', 'definition'))));
});
function getDefLinks(document, line, character) {
return defProvider.getDefinitionAt(document.uri, utils_1.getPositionOfLineAndCharacter(store.documents.get(document.uri), line, character));
}
it('should fail gracefully for non identifiers', () => {
chai_1.assert.isUndefined(getDefLinks(refsDoc, 0, 0));
});
it('should fail gracefully for undeclared symbols', () => {
chai_1.assert.isUndefined(getDefLinks(headerDoc, 13, 0));
});
it('should locate declarations within the same file', () => {
let loc;
loc = getDefLinks(refsDoc, 4, 8);
chai_1.assert.isAtLeast(loc.length, 1);
chai_1.assert.equal(loc[0].targetUri, refsDoc.uri);
chai_1.assert.deepEqual(loc[0].targetSelectionRange, {
start: { line: 2, character: 16 },
end: { line: 2, character: 21 },
}, 'func param');
loc = getDefLinks(refsDoc, 14, 7);
chai_1.assert.isAtLeast(loc.length, 1);
chai_1.assert.equal(loc[0].targetUri, refsDoc.uri);
chai_1.assert.deepEqual(loc[0].targetSelectionRange, {
start: { line: 9, character: 9 },
end: { line: 9, character: 14 },
}, 'local variable: unit local');
loc = getDefLinks(refsDoc, 13, 7);
chai_1.assert.isAtLeast(loc.length, 1);
chai_1.assert.equal(loc[0].targetUri, refsDoc.uri);
chai_1.assert.deepEqual(loc[0].targetSelectionRange, {
start: { line: 2, character: 5 },
end: { line: 2, character: 9 },
}, 'function call: call');
});
it('should locate declarations within the same workspace', () => {
let loc;
loc = getDefLinks(refsDoc, 11, 4);
chai_1.assert.isAtLeast(loc.length, 1);
chai_1.assert.equal(loc[0].targetUri, headerDoc.uri);
chai_1.assert.deepEqual(loc[0].targetSelectionRange, {
start: { line: 9, character: 4 },
end: { line: 9, character: 9 },
}, 'global variable: aglob');
loc = getDefLinks(refsDoc, 16, 14);
chai_1.assert.isAtLeast(loc.length, 1);
chai_1.assert.equal(loc[0].targetUri, headerDoc.uri);
chai_1.assert.deepEqual(loc[0].targetSelectionRange, {
start: { line: 1, character: 11 },
end: { line: 1, character: 20 },
}, 'struct property access: submemeber');
});
it('should locate types of members in a struct', () => {
let loc;
loc = getDefLinks(headerDoc, 6, 4);
chai_1.assert.isAtLeast(loc.length, 1);
chai_1.assert.equal(loc[0].targetUri, headerDoc.uri);
chai_1.assert.deepEqual(loc[0].targetSelectionRange, {
start: { line: 0, character: 7 },
end: { line: 0, character: 21 },
}, 'struct decl member: container_t::sub');
});
it('include statement', () => {
let loc;
loc = getDefLinks(refsDoc, 0, 10);
chai_1.assert.isAtLeast(loc.length, 1);
chai_1.assert.deepEqual(loc[0].originSelectionRange, {
start: { line: 0, character: 8 },
end: { line: 0, character: 16 },
});
});
});
//# sourceMappingURL=definitions.js.map