import { getSituation, SituationType } from './situation'; jest.mock('@grafana/runtime', () => ({ ...jest.requireActual('@grafana/runtime'), })); interface SituationTest { query: string; cursorPos: number; expected: SituationType; } describe('situation', () => { const tests: SituationTest[] = [ { query: '{}', cursorPos: 1, expected: { type: 'SPANSET_EMPTY' }, }, { query: '{.}', cursorPos: 2, expected: { type: 'SPANSET_ONLY_DOT' }, }, { query: '{.foo}', cursorPos: 5, expected: { type: 'SPANSET_IN_NAME_SCOPE', scope: '' }, }, { query: '{.foo }', cursorPos: 6, expected: { type: 'SPANSET_EXPRESSION_OPERATORS' }, }, { query: '{span.}', cursorPos: 6, expected: { type: 'SPANSET_IN_NAME_SCOPE', scope: 'span' }, }, { query: '{span.foo }', cursorPos: 10, expected: { type: 'SPANSET_EXPRESSION_OPERATORS' }, }, { query: '{span.foo = }', cursorPos: 12, expected: { type: 'SPANSET_IN_VALUE', tagName: 'span.foo', betweenQuotes: false }, }, { query: '{span.foo = "val" }', cursorPos: 18, expected: { type: 'SPANFIELD_COMBINING_OPERATORS' }, }, { query: '{span.foo = 200 }', cursorPos: 16, expected: { type: 'SPANFIELD_COMBINING_OPERATORS' }, }, { query: '{span.foo = "val" && }', cursorPos: 21, expected: { type: 'SPANSET_EMPTY' }, }, { query: '{span.foo = "val" && resource.}', cursorPos: 30, expected: { type: 'SPANSET_IN_NAME_SCOPE', scope: 'resource' }, }, { query: '{ .sla && span.http.status_code && span.http.status_code = 200 }', cursorPos: 57, expected: { type: 'SPANSET_EXPRESSION_OPERATORS' }, }, ]; tests.forEach((test) => { it(`${test.query} at ${test.cursorPos} is ${test.expected.type}`, async () => { const sit = getSituation(test.query, test.cursorPos); expect(sit).toEqual({ ...test.expected, query: test.query }); }); }); });