123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- import { monacoTypes } from '@grafana/ui';
- import {
- multiLineFullQuery,
- singleLineFullQuery,
- singleLineEmptyQuery,
- singleLineTwoQueries,
- } from '../../__mocks__/cloudwatch-sql-test-data';
- import MonacoMock from '../../__mocks__/monarch/Monaco';
- import TextModel from '../../__mocks__/monarch/TextModel';
- import { linkedTokenBuilder } from '../../monarch/linkedTokenBuilder';
- import { StatementPosition } from '../../monarch/types';
- import cloudWatchSqlLanguageDefinition from '../definition';
- import { getStatementPosition } from './statementPosition';
- import { SQLTokenTypes } from './types';
- describe('statementPosition', () => {
- function assertPosition(query: string, position: monacoTypes.IPosition, expected: StatementPosition) {
- const testModel = TextModel(query);
- const current = linkedTokenBuilder(
- MonacoMock,
- cloudWatchSqlLanguageDefinition,
- testModel as monacoTypes.editor.ITextModel,
- position,
- SQLTokenTypes
- );
- 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);
- });
- });
|