diff --git a/jest.config.js b/jest.config.js index d5d967edaa..6d4ca74aa6 100644 --- a/jest.config.js +++ b/jest.config.js @@ -19,6 +19,7 @@ module.exports = { 'react-dnd$': 'react-dnd/dist/cjs', 'react-dnd-html5-backend$': 'react-dnd-html5-backend/dist/cjs', 'dnd-core$': 'dnd-core/dist/cjs', + 'monaco-editor': '/src/languageSupport/__mocks__/monacoMock.js', }, globals: { 'ts-jest': { diff --git a/src/languageSupport/__mocks__/monacoMock.js b/src/languageSupport/__mocks__/monacoMock.js new file mode 100644 index 0000000000..45d90ddf09 --- /dev/null +++ b/src/languageSupport/__mocks__/monacoMock.js @@ -0,0 +1,11 @@ +module.exports = { + languages: { + register: function (language) {}, + setMonarchTokensProvider: function (name, tokens) {}, + setLanguageConfiguration: function (name, config) {}, + }, + editor: { + defineTheme: function (name, theme) {}, + tokenize: jest.fn().mockReturnValue([[]]), + }, +} diff --git a/src/languageSupport/languages/influxql/influxql.test.ts b/src/languageSupport/languages/influxql/influxql.test.ts new file mode 100644 index 0000000000..a35a83d766 --- /dev/null +++ b/src/languageSupport/languages/influxql/influxql.test.ts @@ -0,0 +1,19 @@ +import {testTokenization} from './testRunner' + +it('comment', () => { + testTokenization('influxql', [ + // Comments + [ + { + line: '-- a comment', + tokens: [{startIndex: 0, type: 'comment.influxql'}], + }, + ], + [ + { + line: '---sticky -- comment', + tokens: [{startIndex: 0, type: 'comment.sql'}], + }, + ], + ]) +}) diff --git a/src/languageSupport/languages/influxql/testRunner.ts b/src/languageSupport/languages/influxql/testRunner.ts new file mode 100644 index 0000000000..445443ad7c --- /dev/null +++ b/src/languageSupport/languages/influxql/testRunner.ts @@ -0,0 +1,43 @@ +import * as monaco from 'monaco-editor' // from src/languageSupport/__mocks__/monacoMock.js + +interface RelaxedToken { + startIndex: number + type: string +} + +interface TestItem { + line: string + tokens: RelaxedToken[] +} + +export const testTokenization = ( + _language: string, + tests: TestItem[][] +): void => { + tests.forEach(test => runTest(_language, test)) +} + +function runTest(languageId: string, test: TestItem[]): void { + const text = test.map(t => t.line).join('\n') + const actualTokens = monaco.editor.tokenize(text, languageId) + const actual = actualTokens.map((lineTokens: any, index: number) => { + return { + line: test[index].line, + tokens: lineTokens.map(t => { + return { + startIndex: t.offset, + type: t.type, + } + }), + } + }) + + // eslint-disable-next-line no-console + console.log({ + languageId, + test, + test_tokens: test[0].tokens, + text, + actualTokens: actual[0].tokens, + }) +}