|
|
@@ -1,33 +1,61 @@
|
|
|
-import { getCleanSelector } from './prometheus';
|
|
|
+import { parseSelector } from './prometheus';
|
|
|
+
|
|
|
+describe('parseSelector()', () => {
|
|
|
+ let parsed;
|
|
|
|
|
|
-describe('getCleanSelector()', () => {
|
|
|
it('returns a clean selector from an empty selector', () => {
|
|
|
- expect(getCleanSelector('{}', 1)).toBe('{}');
|
|
|
+ parsed = parseSelector('{}', 1);
|
|
|
+ expect(parsed.selector).toBe('{}');
|
|
|
+ expect(parsed.labelKeys).toEqual([]);
|
|
|
});
|
|
|
+
|
|
|
it('throws if selector is broken', () => {
|
|
|
- expect(() => getCleanSelector('{foo')).toThrow();
|
|
|
+ expect(() => parseSelector('{foo')).toThrow();
|
|
|
});
|
|
|
+
|
|
|
it('returns the selector sorted by label key', () => {
|
|
|
- expect(getCleanSelector('{foo="bar"}')).toBe('{foo="bar"}');
|
|
|
- expect(getCleanSelector('{foo="bar",baz="xx"}')).toBe('{baz="xx",foo="bar"}');
|
|
|
+ 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', () => {
|
|
|
- expect(getCleanSelector('{foo}')).toBe('{}');
|
|
|
- expect(getCleanSelector('{foo="bar",baz}')).toBe('{foo="bar"}');
|
|
|
- expect(getCleanSelector('{foo="bar",baz="}')).toBe('{foo="bar"}');
|
|
|
+ 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(() => getCleanSelector('foo{}', 0)).toThrow();
|
|
|
- expect(() => getCleanSelector('foo{} + bar{}', 5)).toThrow();
|
|
|
+ expect(() => parseSelector('foo{}', 0)).toThrow();
|
|
|
+ expect(() => parseSelector('foo{} + bar{}', 5)).toThrow();
|
|
|
});
|
|
|
+
|
|
|
it('returns the selector nearest to the cursor offset', () => {
|
|
|
- expect(() => getCleanSelector('{foo="bar"} + {foo="bar"}', 0)).toThrow();
|
|
|
- expect(getCleanSelector('{foo="bar"} + {foo="bar"}', 1)).toBe('{foo="bar"}');
|
|
|
- expect(getCleanSelector('{foo="bar"} + {baz="xx"}', 1)).toBe('{foo="bar"}');
|
|
|
- expect(getCleanSelector('{baz="xx"} + {foo="bar"}', 16)).toBe('{foo="bar"}');
|
|
|
+ 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', () => {
|
|
|
- expect(getCleanSelector('bar{foo}', 4)).toBe('{__name__="bar"}');
|
|
|
- expect(getCleanSelector('baz{foo="bar"}', 12)).toBe('{__name__="baz",foo="bar"}');
|
|
|
+ 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"}');
|
|
|
});
|
|
|
});
|