@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>
96 lines (88 loc) • 3.08 kB
text/typescript
import { MetafieldDefinitionMap } from '@shopify/theme-check-common';
import { beforeEach, describe, expect, it } from 'vitest';
import { InsertTextFormat } from 'vscode-json-languageservice';
import { DocumentManager } from '../../documents';
import { CompletionsProvider } from '../CompletionsProvider';
describe('Module: ContentForCompletionProvider', async () => {
let provider: CompletionsProvider;
beforeEach(async () => {
provider = new CompletionsProvider({
documentManager: new DocumentManager(),
themeDocset: {
filters: async () => [],
objects: async () => [],
liquidDrops: async () => [],
tags: async () => [],
systemTranslations: async () => ({}),
},
getMetafieldDefinitions: async (_rootUri: string) => ({} as MetafieldDefinitionMap),
});
});
it('should complete content_for block keywords correctly', async () => {
const expected = ['block', 'blocks'].sort();
await expect(provider).to.complete('{% content_for "█" %}', expected);
});
describe('when the text being completed does not have extra markup', () => {
it('should text edit complete content_for block with type & id placeholders', async () => {
const source = '{% content_for "█" %}';
await expect(provider).to.complete(
source,
expect.arrayContaining([
expect.objectContaining({
label: 'block',
textEdit: expect.applyEdits(source, `{% content_for "block", type: "$1", id: "$2" %}`),
}),
]),
);
});
it('should keep using the quote type used', async () => {
const source = `{% content_for '█' %}`;
await expect(provider).to.complete(
source,
expect.arrayContaining([
expect.objectContaining({
label: 'block',
textEdit: expect.applyEdits(
source,
// single quotes everywhere
`{% content_for 'block', type: '$1', id: '$2' %}`,
),
}),
]),
);
});
it('should text edit complete inside the liquid liquid tag', async () => {
const source = `{% liquid
content_for "█"
echo "more content"
%}`;
const afterEdit = `{% liquid
content_for "block", type: "$1", id: "$2"
echo "more content"
%}`;
await expect(provider).to.complete(
source,
expect.arrayContaining([
expect.objectContaining({
label: 'block',
textEdit: expect.applyEdits(source, afterEdit),
}),
]),
);
});
});
describe('when it has extra markup', () => {
it('should not text edit complete', async () => {
const source = '{% content_for "█", type: "some-type", id: "some-id" %}';
await expect(provider).to.complete(
source,
expect.arrayContaining([
expect.objectContaining({
label: 'block',
insertTextFormat: InsertTextFormat.PlainText,
}),
]),
);
});
});
});