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.
157 lines
7.4 KiB
157 lines
7.4 KiB
import { monacoTypes } from '@grafana/ui';
|
|
import MonacoMock from '../../__mocks__/cloudwatch-sql/Monaco';
|
|
import TextModel from '../../__mocks__/cloudwatch-sql/TextModel';
|
|
import {
|
|
multiLineFullQuery,
|
|
singleLineFullQuery,
|
|
singleLineEmptyQuery,
|
|
singleLineTwoQueries,
|
|
} from '../../__mocks__/cloudwatch-sql/test-data';
|
|
import { linkedTokenBuilder } from './linkedTokenBuilder';
|
|
import { StatementPosition } from './types';
|
|
import { getStatementPosition } from './statementPosition';
|
|
|
|
describe('statementPosition', () => {
|
|
function assertPosition(query: string, position: monacoTypes.IPosition, expected: StatementPosition) {
|
|
const testModel = TextModel(query);
|
|
const current = linkedTokenBuilder(MonacoMock, testModel as monacoTypes.editor.ITextModel, position);
|
|
const statementPosition = getStatementPosition(current);
|
|
expect(statementPosition).toBe(expected);
|
|
}
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 0 }],
|
|
[multiLineFullQuery.query, { lineNumber: 1, column: 0 }],
|
|
[singleLineEmptyQuery.query, { lineNumber: 1, column: 0 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 154 }],
|
|
])('should be before select keyword', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.SelectKeyword);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 7 }],
|
|
[multiLineFullQuery.query, { lineNumber: 1, column: 7 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 161 }],
|
|
])('should be after select keyword', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.AfterSelectKeyword);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 12 }],
|
|
[multiLineFullQuery.query, { lineNumber: 1, column: 12 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 166 }],
|
|
])('should be first argument in select statistic function', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.AfterSelectFuncFirstArgument);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 27 }],
|
|
[multiLineFullQuery.query, { lineNumber: 2, column: 0 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 181 }],
|
|
])('should be before the FROM keyword', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.FromKeyword);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 32 }],
|
|
[multiLineFullQuery.query, { lineNumber: 2, column: 5 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 186 }],
|
|
])('should after the FROM keyword', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.AfterFromKeyword);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 40 }],
|
|
[multiLineFullQuery.query, { lineNumber: 2, column: 13 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 40 }],
|
|
])('should be namespace arg in the schema func', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.SchemaFuncFirstArgument);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 50 }],
|
|
[multiLineFullQuery.query, { lineNumber: 2, column: 23 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 50 }],
|
|
])('should be label key args within the schema func', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.SchemaFuncExtraArgument);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 63 }],
|
|
[multiLineFullQuery.query, { lineNumber: 3, column: 0 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 63 }],
|
|
])('should be after from schema/namespace', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.AfterFrom);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 69 }],
|
|
[multiLineFullQuery.query, { lineNumber: 4, column: 6 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 69 }],
|
|
])('should after where keyword and before label key', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.WhereKey);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 79 }],
|
|
[multiLineFullQuery.query, { lineNumber: 4, column: 17 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 79 }],
|
|
])('should be before the comparison operator in a where filter', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.WhereComparisonOperator);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 81 }],
|
|
[multiLineFullQuery.query, { lineNumber: 4, column: 19 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 81 }],
|
|
])('should be before or in the value in a where filter', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.WhereValue);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 105 }],
|
|
[multiLineFullQuery.query, { lineNumber: 5, column: 0 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 105 }],
|
|
])('should be after a where value', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.AfterWhereValue);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 115 }],
|
|
[multiLineFullQuery.query, { lineNumber: 5, column: 10 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 115 }],
|
|
])('should be after group by keywords', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.AfterGroupByKeywords);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 123 }],
|
|
[multiLineFullQuery.query, { lineNumber: 5, column: 22 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 123 }],
|
|
])('should be after group by labels', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.AfterGroupBy);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 132 }],
|
|
[multiLineFullQuery.query, { lineNumber: 5, column: 31 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 132 }],
|
|
])('should be after order by keywords', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.AfterOrderByKeywords);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 138 }],
|
|
[multiLineFullQuery.query, { lineNumber: 5, column: 37 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 138 }],
|
|
])('should be after order by function', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.AfterOrderByFunction);
|
|
});
|
|
|
|
test.each([
|
|
[singleLineFullQuery.query, { lineNumber: 1, column: 143 }],
|
|
[multiLineFullQuery.query, { lineNumber: 6, column: 0 }],
|
|
[singleLineTwoQueries.query, { lineNumber: 1, column: 145 }],
|
|
])('should be after order by direction', (query: string, position: monacoTypes.IPosition) => {
|
|
assertPosition(query, position, StatementPosition.AfterOrderByDirection);
|
|
});
|
|
});
|
|
|