import { parseSelector } from './prometheus'; describe('parseSelector()', () => { let parsed; it('returns a clean selector from an empty selector', () => { parsed = parseSelector('{}', 1); expect(parsed.selector).toBe('{}'); expect(parsed.labelKeys).toEqual([]); }); it('throws if selector is broken', () => { expect(() => parseSelector('{foo')).toThrow(); }); it('returns the selector sorted by label key', () => { parsed = parseSelector('{foo="bar"}'); expect(parsed.selector).toBe('{foo="bar"}'); expect(parsed.labelKeys).toEqual(['foo']); parsed = parseSelector('{foo="bar",baz="xx"}'); expect(parsed.selector).toBe('{baz="xx",foo="bar"}'); }); it('returns a clean selector from an incomplete one', () => { parsed = parseSelector('{foo}'); expect(parsed.selector).toBe('{}'); parsed = parseSelector('{foo="bar",baz}'); expect(parsed.selector).toBe('{foo="bar"}'); parsed = parseSelector('{foo="bar",baz="}'); expect(parsed.selector).toBe('{foo="bar"}'); }); it('throws if not inside a selector', () => { expect(() => parseSelector('foo{}', 0)).toThrow(); expect(() => parseSelector('foo{} + bar{}', 5)).toThrow(); }); it('returns the selector nearest to the cursor offset', () => { expect(() => parseSelector('{foo="bar"} + {foo="bar"}', 0)).toThrow(); parsed = parseSelector('{foo="bar"} + {foo="bar"}', 1); expect(parsed.selector).toBe('{foo="bar"}'); parsed = parseSelector('{foo="bar"} + {baz="xx"}', 1); expect(parsed.selector).toBe('{foo="bar"}'); parsed = parseSelector('{baz="xx"} + {foo="bar"}', 16); expect(parsed.selector).toBe('{foo="bar"}'); }); it('returns a selector with metric if metric is given', () => { parsed = parseSelector('bar{foo}', 4); expect(parsed.selector).toBe('{__name__="bar"}'); parsed = parseSelector('baz{foo="bar"}', 12); expect(parsed.selector).toBe('{__name__="baz",foo="bar"}'); parsed = parseSelector('bar:metric:1m{}', 14); expect(parsed.selector).toBe('{__name__="bar:metric:1m"}'); }); });