grafana/public/app/plugins/datasource/loki/syntax.test.ts
李国忠 9521b0d2d2
Explore: Fix vector(5) syntax error in loki log explore (#63994)
* [fix] loki log explore : fix vector(5) err

* changelog

* changelog fmt

* rollback change log

* fix test and pretty fmt

* Update package.json

update lezer-logql depedency to 0.1.2

* Update package.json

fix conflict

➤ YN0000: │  "@grafana/monaco-logql@npm:^0.0.6":
➤ YN0000: │ @@ -21988,9 +21987,9 @@
➤ YN0000: │      "@grafana/experimental": 1.1.0
➤ YN0000: │      "@grafana/faro-core": 1.0.0-beta2
➤ YN0000: │      "@grafana/faro-web-sdk": 1.0.0-beta2
➤ YN0000: │      "@grafana/google-sdk": 0.0.4
➤ YN0028: │ -    "@grafana/lezer-logql": 0.1.1
➤ YN0028: │ +    "@grafana/lezer-logql": 0.1.2
➤ YN0000: │      "@grafana/monaco-logql": ^0.0.6
➤ YN0000: │      "@grafana/runtime": "workspace:*"
➤ YN0000: │      "@grafana/scenes": ^0.0.14
➤ YN0000: │      "@grafana/schema": "workspace:*"

* Upgrade lezer-logql

* fix logql test

---------

Co-authored-by: Matias Chomicki <matyax@gmail.com>
2023-03-03 10:09:34 +01:00

55 lines
3.5 KiB
TypeScript

import Prism from 'prismjs';
import syntax from './syntax';
describe('Loki syntax', () => {
it('should highlight Loki query correctly', () => {
expect(Prism.highlight('{key="val#ue"}', syntax, 'loki')).toBe(
'<span class="token context-labels"><span class="token punctuation">{</span><span class="token label-key attr-name">key</span>=<span class="token label-value attr-value">"val#ue"</span></span><span class="token punctuation">}</span>'
);
expect(Prism.highlight('{key="#value"}', syntax, 'loki')).toBe(
'<span class="token context-labels"><span class="token punctuation">{</span><span class="token label-key attr-name">key</span>=<span class="token label-value attr-value">"#value"</span></span><span class="token punctuation">}</span>'
);
expect(Prism.highlight('{key="value#"}', syntax, 'loki')).toBe(
'<span class="token context-labels"><span class="token punctuation">{</span><span class="token label-key attr-name">key</span>=<span class="token label-value attr-value">"value#"</span></span><span class="token punctuation">}</span>'
);
expect(Prism.highlight('#test{key="value"}', syntax, 'loki')).toBe(
'<span class="token comment">#test{key="value"}</span>'
);
expect(Prism.highlight('{key="value"}#test', syntax, 'loki')).toBe(
'<span class="token context-labels"><span class="token punctuation">{</span><span class="token label-key attr-name">key</span>=<span class="token label-value attr-value">"value"</span></span><span class="token punctuation">}</span><span class="token comment">#test</span>'
);
expect(Prism.highlight('{key="value"', syntax, 'loki')).toBe(
'<span class="token context-labels"><span class="token punctuation">{</span><span class="token label-key attr-name">key</span>=<span class="token label-value attr-value">"value"</span></span>'
);
expect(Prism.highlight('{Key="value"', syntax, 'loki')).toBe(
'<span class="token context-labels"><span class="token punctuation">{</span><span class="token label-key attr-name">Key</span>=<span class="token label-value attr-value">"value"</span></span>'
);
});
it('should highlight functions in Loki query correctly', () => {
expect(Prism.highlight('rate({key="value"}[5m])', syntax, 'loki')).toContain(
'<span class="token function">rate</span>'
);
expect(Prism.highlight('avg_over_time({key="value"}[5m])', syntax, 'loki')).toContain(
'<span class="token function">avg_over_time</span>'
);
expect(Prism.highlight('vector(5)', syntax, 'loki')).toContain('<span class="token function">vector</span>');
});
it('should highlight operators in Loki query correctly', () => {
expect(Prism.highlight('{key="value"} |= "test"', syntax, 'loki')).toContain(
'<span class="token operator"> |= </span>'
);
expect(Prism.highlight('{key="value"} |~"test"', syntax, 'loki')).toContain(
'<span class="token operator"> |~</span>'
);
});
it('should highlight pipe operations in Loki query correctly', () => {
expect(Prism.highlight('{key="value"} |= "test" | logfmt', syntax, 'loki')).toContain(
'<span class="token pipe-operator operator">|</span> <span class="token pipe-operations keyword">logfmt</span></span>'
);
expect(Prism.highlight('{key="value"} |= "test" | label_format', syntax, 'loki')).toContain(
'<span class="token context-pipe"> <span class="token pipe-operator operator">|</span> <span class="token pipe-operations keyword">label_format</span></span>'
);
});
});