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

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);
}
);
});