Files
grafana/public/app/plugins/datasource/cloudwatch/language/logs/completion/statementPosition.test.ts
T
Kevin Yu 31e142633d CloudWatch Logs: Add getStatementPosition function for Monaco editor (#70724)
* CloudWatch Logs: Add getStatementPosition function for Monaco editor

* Add test cases

* add command and function arg positions

* remove unneeded statement position

* remove debug stuff

* remove unneeded cases

* add filterarg

* remove editor changes

* fix tests

* fix lint

* add debug for testing

* Revert "add debug for testing"

This reverts commit 22dd0e7a77eb43dbed7c065c246da04cddfa1afc.
2023-07-17 13:43:48 -07:00

158 lines
6.3 KiB
TypeScript

import { monacoTypes } from '@grafana/ui';
import {
emptyQuery,
whitespaceOnlyQuery,
commentOnlyQuery,
singleLineFullQuery,
multiLineFullQuery,
} from '../../../__mocks__/cloudwatch-logs-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 cloudWatchLogsLanguageDefinition from '../definition';
import { getStatementPosition } from './statementPosition';
import { LogsTokenTypes } from './types';
function generateToken(query: string, position: monacoTypes.IPosition) {
const testModel = TextModel(query);
return linkedTokenBuilder(
MonacoMock,
cloudWatchLogsLanguageDefinition,
testModel as monacoTypes.editor.ITextModel,
position,
LogsTokenTypes
);
}
describe('getStatementPosition', () => {
it('should return StatementPosition.NewCommand the current token is null', () => {
expect(getStatementPosition(null)).toEqual(StatementPosition.NewCommand);
});
it('should return StatementPosition.NewCommand for an empty query', () => {
expect(getStatementPosition(generateToken(emptyQuery.query, { lineNumber: 1, column: 1 }))).toEqual(
StatementPosition.NewCommand
);
});
it('should return StatementPosition.NewCommand for a query that is only whitespace', () => {
expect(getStatementPosition(generateToken(whitespaceOnlyQuery.query, { lineNumber: 1, column: 1 }))).toEqual(
StatementPosition.NewCommand
);
});
it('should return StatementPosition.Comment for a query with only a comment', () => {
expect(getStatementPosition(generateToken(commentOnlyQuery.query, { lineNumber: 1, column: 1 }))).toEqual(
StatementPosition.Comment
);
});
it('should return StatementPosition.NewCommand after a `|`', () => {
expect(getStatementPosition(generateToken(singleLineFullQuery.query, { lineNumber: 1, column: 30 }))).toEqual(
StatementPosition.NewCommand
);
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 2, column: 2 }))).toEqual(
StatementPosition.NewCommand
);
});
it('should return StatementPosition.FieldsKeyword inside the `fields` keyword', () => {
expect(getStatementPosition(generateToken(singleLineFullQuery.query, { lineNumber: 1, column: 6 }))).toEqual(
StatementPosition.FieldsKeyword
);
});
it('should return StatementPosition.AfterFieldsKeyword after the `fields` keyword', () => {
expect(getStatementPosition(generateToken(singleLineFullQuery.query, { lineNumber: 1, column: 7 }))).toEqual(
StatementPosition.AfterFieldsKeyword
);
});
it('should return StatementPosition.CommandArg after a keyword', () => {
expect(getStatementPosition(generateToken(singleLineFullQuery.query, { lineNumber: 1, column: 8 }))).toEqual(
StatementPosition.CommandArg
);
});
it('should return StatementPosition.AfterCommand after a function', () => {
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 2, column: 49 }))).toEqual(
StatementPosition.AfterCommand
);
});
it('should return StatementPosition.Function within a function', () => {
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 4, column: 9 }))).toEqual(
StatementPosition.Function
);
});
it('should return StatementPosition.FunctionArg when providing arguments to a function', () => {
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 4, column: 16 }))).toEqual(
StatementPosition.FunctionArg
);
});
it('should return StatementPosition.AfterFunction after a function', () => {
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 4, column: 64 }))).toEqual(
StatementPosition.AfterFunction
);
});
it('should return StatementPosition.ArithmeticOperatorArg after an arithmetic operator', () => {
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 4, column: 51 }))).toEqual(
StatementPosition.ArithmeticOperatorArg
);
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 4, column: 58 }))).toEqual(
StatementPosition.ArithmeticOperatorArg
);
});
it('should return StatementPosition.BooleanOperatorArg after a boolean operator', () => {
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 2, column: 37 }))).toEqual(
StatementPosition.BooleanOperatorArg
);
});
it('should return StatementPosition.ComparisonOperatorArg after a comparison operator', () => {
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 2, column: 44 }))).toEqual(
StatementPosition.ComparisonOperatorArg
);
});
it('should return StatementPosition.ArithmeticOperator after an arithmetic operator', () => {
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 4, column: 50 }))).toEqual(
StatementPosition.ArithmeticOperator
);
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 4, column: 57 }))).toEqual(
StatementPosition.ArithmeticOperator
);
});
it('should return StatementPosition.BooleanOperator after a boolean operator', () => {
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 2, column: 35 }))).toEqual(
StatementPosition.BooleanOperator
);
});
it('should return StatementPosition.ComparisonOperator after a comparison operator', () => {
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 2, column: 43 }))).toEqual(
StatementPosition.ComparisonOperator
);
});
it('should return StatementPosition.Comment when token is a comment', () => {
expect(getStatementPosition(generateToken(singleLineFullQuery.query, { lineNumber: 1, column: 40 }))).toEqual(
StatementPosition.Comment
);
expect(getStatementPosition(generateToken(commentOnlyQuery.query, { lineNumber: 1, column: 35 }))).toEqual(
StatementPosition.Comment
);
expect(getStatementPosition(generateToken(multiLineFullQuery.query, { lineNumber: 5, column: 3 }))).toEqual(
StatementPosition.Comment
);
});
});