@shopify/theme-language-server-common
Version:
<h1 align="center" style="position: relative;" > <br> <img src="https://github.com/Shopify/theme-check-vscode/blob/main/images/shopify_glyph.png?raw=true" alt="logo" width="141" height="160"> <br> Theme Language Server </h1>
140 lines (129 loc) • 4.24 kB
text/typescript
import { describe, beforeEach, it, expect } from 'vitest';
import { DocumentManager } from '../../../documents';
import { JSONLanguageService } from '../../JSONLanguageService';
import { getRequestParams, mockJSONLanguageService } from '../../test/test-helpers';
describe('Module: SettingsHoverProvider', async () => {
const rootUri = 'file:///root/';
let jsonLanguageService: JSONLanguageService;
let documentManager: DocumentManager;
beforeEach(async () => {
documentManager = new DocumentManager(
undefined, // don't need a fs
undefined, // don't need a connection
undefined, // don't need client capabilities
async () => 'theme', // 'theme' mode
async () => false, // schema is invalid for tests
);
jsonLanguageService = mockJSONLanguageService(
rootUri,
documentManager,
async (uri: string) => ({
general: {
fake: 'Fake Setting',
},
}),
);
await jsonLanguageService.setup({
textDocument: {
hover: {},
completion: {
contextSupport: true,
completionItem: {
snippetSupport: true,
commitCharactersSupport: true,
documentationFormat: ['markdown'],
deprecatedSupport: true,
preselectSupport: true,
},
},
},
});
});
const tests = [
{
label: 'preset',
schemaTemplate: (setting: object) => {
return {
presets: [setting],
};
},
},
{
label: 'default',
schemaTemplate: (setting: object) => {
return {
default: setting,
};
},
},
];
for (const test of tests) {
describe(`${test.label} settings`, () => {
it(`provide hover for ${test.label} setting when setting label contains a translation key`, async () => {
const schema = {
settings: [
{ id: 'custom-setting', label: 'Custom Setting' },
{ id: 'fake-setting', label: 't:general.fake' },
],
...test.schemaTemplate({
settings: {
'fake-setting█': '',
},
}),
};
const source = `
{% schema %}
${JSON.stringify(schema)}
{% endschema %}
`;
const params = getRequestParams(documentManager, 'blocks/block.liquid', source);
const hover = await jsonLanguageService.hover(params);
expect(hover).not.toBeNull();
expect(hover!.contents).to.have.lengthOf(1);
expect(hover!.contents).toEqual(['Fake Setting']);
});
it(`provide hover for ${test.label} setting when setting label is literal text`, async () => {
const schema = {
settings: [
{ id: 'custom-setting', label: 'Custom Setting' },
{ id: 'fake-setting', label: 't:general.fake' },
],
...test.schemaTemplate({
settings: {
'custom-setting█': '',
},
}),
};
const source = `
{% schema %}
${JSON.stringify(schema)}
{% endschema %}
`;
const params = getRequestParams(documentManager, 'blocks/block.liquid', source);
const hover = await jsonLanguageService.hover(params);
expect(hover).not.toBeNull();
expect(hover!.contents).to.have.lengthOf(1);
expect(hover!.contents).toEqual(['Custom Setting']);
});
it(`provide no hover for ${test.label} setting when setting label does not exist`, async () => {
const schema = {
settings: [{ id: 'custom-setting' }, { id: 'fake-setting', label: 't:general.fake' }],
...test.schemaTemplate({
settings: {
'custom-setting█': '',
},
}),
};
const source = `
{% schema %}
${JSON.stringify(schema)}
{% endschema %}
`;
const params = getRequestParams(documentManager, 'blocks/block.liquid', source);
const hover = await jsonLanguageService.hover(params);
expect(hover).not.toBeNull();
expect(hover!.contents).to.have.lengthOf(0);
});
});
}
});