You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
4.2 KiB
94 lines
4.2 KiB
import { monacoTypes } from '@grafana/ui';
|
|
import { LinkedToken } from './LinkedToken';
|
|
import MonacoMock from '../../__mocks__/cloudwatch-sql/Monaco';
|
|
import TextModel from '../../__mocks__/cloudwatch-sql/TextModel';
|
|
import {
|
|
multiLineFullQuery,
|
|
singleLineFullQuery,
|
|
singleLineTwoQueries,
|
|
multiLineIncompleteQueryWithoutNamespace,
|
|
} from '../../__mocks__/cloudwatch-sql/test-data';
|
|
import { linkedTokenBuilder } from './linkedTokenBuilder';
|
|
import { TokenType } from './types';
|
|
import { getMetricNameToken, getNamespaceToken, getSelectStatisticToken, getSelectToken } from './tokenUtils';
|
|
import { SELECT } from '../language';
|
|
|
|
const getToken = (
|
|
query: string,
|
|
position: monacoTypes.IPosition,
|
|
invokeFunction: (token: LinkedToken | null) => LinkedToken | null
|
|
) => {
|
|
const testModel = TextModel(query);
|
|
const current = linkedTokenBuilder(MonacoMock, testModel as monacoTypes.editor.ITextModel, position);
|
|
return invokeFunction(current);
|
|
};
|
|
|
|
describe('tokenUtils', () => {
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 50 }],
|
|
[multiLineFullQuery.query, { lineNumber: 5, column: 10 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 30 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 185 }],
|
|
])('getSelectToken should return the right token', (query: string, position: monacoTypes.IPosition) => {
|
|
const token = getToken(query, position, getSelectToken);
|
|
expect(token).not.toBeNull();
|
|
expect(token?.value).toBe(SELECT);
|
|
expect(token?.type).toBe(TokenType.Keyword);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 50 }],
|
|
[multiLineFullQuery.query, { lineNumber: 5, column: 10 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 30 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 185 }],
|
|
])('getSelectToken should return the right token', (query: string, position: monacoTypes.IPosition) => {
|
|
const token = getToken(query, position, getSelectStatisticToken);
|
|
expect(token).not.toBeNull();
|
|
expect(token?.type).toBe(TokenType.Function);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, 'AVG', { lineNumber: 1, column: 50 }],
|
|
[multiLineFullQuery.query, 'AVG', { lineNumber: 5, column: 10 }],
|
|
[singleLineTwoQueries.query, 'AVG', { lineNumber: 1, column: 30 }],
|
|
[singleLineTwoQueries.query, 'SUM', { lineNumber: 1, column: 185 }],
|
|
])(
|
|
'getSelectStatisticToken should return the right token',
|
|
(query: string, value: string, position: monacoTypes.IPosition) => {
|
|
const token = getToken(query, position, getSelectStatisticToken);
|
|
expect(token).not.toBeNull();
|
|
expect(token?.value).toBe(value);
|
|
expect(token?.type).toBe(TokenType.Function);
|
|
}
|
|
);
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, 'CPUUtilization', { lineNumber: 1, column: 50 }],
|
|
[multiLineFullQuery.query, 'CPUUtilization', { lineNumber: 5, column: 10 }],
|
|
[singleLineTwoQueries.query, 'CPUUtilization', { lineNumber: 1, column: 30 }],
|
|
[singleLineTwoQueries.query, 'CPUCreditUsage', { lineNumber: 1, column: 185 }],
|
|
])(
|
|
'getMetricNameToken should return the right token',
|
|
(query: string, value: string, position: monacoTypes.IPosition) => {
|
|
const token = getToken(query, position, getMetricNameToken);
|
|
expect(token).not.toBeNull();
|
|
expect(token?.value).toBe(value);
|
|
expect(token?.type).toBe(TokenType.Identifier);
|
|
}
|
|
);
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, '"AWS/EC2"', TokenType.Type, { lineNumber: 1, column: 50 }],
|
|
[multiLineFullQuery.query, '"AWS/ECS"', TokenType.Type, { lineNumber: 5, column: 10 }],
|
|
[singleLineTwoQueries.query, '"AWS/EC2"', TokenType.Type, { lineNumber: 1, column: 30 }],
|
|
[singleLineTwoQueries.query, '"AWS/ECS"', TokenType.Type, { lineNumber: 1, column: 185 }],
|
|
[multiLineIncompleteQueryWithoutNamespace.query, undefined, undefined, { lineNumber: 2, column: 5 }],
|
|
])(
|
|
'getNamespaceToken should return the right token',
|
|
(query: string, value: string | undefined, tokenType: TokenType | undefined, position: monacoTypes.IPosition) => {
|
|
const token = getToken(query, position, getNamespaceToken);
|
|
expect(token?.value).toBe(value);
|
|
expect(token?.type).toBe(tokenType);
|
|
}
|
|
);
|
|
});
|
|
|