| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- import { Lexer } from "../lexer";
- describe("when lexing graphite expression", function() {
- it("should tokenize metric expression", function() {
- var lexer = new Lexer("metric.test.*.asd.count");
- var tokens = lexer.tokenize();
- expect(tokens[0].value).toBe("metric");
- expect(tokens[1].value).toBe(".");
- expect(tokens[2].type).toBe("identifier");
- expect(tokens[4].type).toBe("identifier");
- expect(tokens[4].pos).toBe(13);
- });
- it("should tokenize metric expression with dash", function() {
- var lexer = new Lexer("metric.test.se1-server-*.asd.count");
- var tokens = lexer.tokenize();
- expect(tokens[4].type).toBe("identifier");
- expect(tokens[4].value).toBe("se1-server-*");
- });
- it("should tokenize metric expression with dash2", function() {
- var lexer = new Lexer("net.192-168-1-1.192-168-1-9.ping_value.*");
- var tokens = lexer.tokenize();
- expect(tokens[0].value).toBe("net");
- expect(tokens[2].value).toBe("192-168-1-1");
- });
- it("should tokenize metric expression with equal sign", function() {
- var lexer = new Lexer("apps=test");
- var tokens = lexer.tokenize();
- expect(tokens[0].value).toBe("apps=test");
- });
- it("simple function2", function() {
- var lexer = new Lexer("offset(test.metric, -100)");
- var tokens = lexer.tokenize();
- expect(tokens[2].type).toBe("identifier");
- expect(tokens[4].type).toBe("identifier");
- expect(tokens[6].type).toBe("number");
- });
- it("should tokenize metric expression with curly braces", function() {
- var lexer = new Lexer("metric.se1-{first, second}.count");
- var tokens = lexer.tokenize();
- expect(tokens.length).toBe(10);
- expect(tokens[3].type).toBe("{");
- expect(tokens[4].value).toBe("first");
- expect(tokens[5].value).toBe(",");
- expect(tokens[6].value).toBe("second");
- });
- it("should tokenize metric expression with number segments", function() {
- var lexer = new Lexer("metric.10.12_10.test");
- var tokens = lexer.tokenize();
- expect(tokens[0].type).toBe("identifier");
- expect(tokens[2].type).toBe("identifier");
- expect(tokens[2].value).toBe("10");
- expect(tokens[4].value).toBe("12_10");
- expect(tokens[4].type).toBe("identifier");
- });
- it("should tokenize metric expression with segment that start with number", function() {
- var lexer = new Lexer("metric.001-server");
- var tokens = lexer.tokenize();
- expect(tokens[0].type).toBe("identifier");
- expect(tokens[2].type).toBe("identifier");
- expect(tokens.length).toBe(3);
- });
- it("should tokenize func call with numbered metric and number arg", function() {
- var lexer = new Lexer("scale(metric.10, 15)");
- var tokens = lexer.tokenize();
- expect(tokens[0].type).toBe("identifier");
- expect(tokens[2].type).toBe("identifier");
- expect(tokens[2].value).toBe("metric");
- expect(tokens[4].value).toBe("10");
- expect(tokens[4].type).toBe("number");
- expect(tokens[6].type).toBe("number");
- });
- it("should tokenize metric with template parameter", function() {
- var lexer = new Lexer("metric.[[server]].test");
- var tokens = lexer.tokenize();
- expect(tokens[2].type).toBe("identifier");
- expect(tokens[2].value).toBe("[[server]]");
- expect(tokens[4].type).toBe("identifier");
- });
- it("should tokenize metric with question mark", function() {
- var lexer = new Lexer("metric.server_??.test");
- var tokens = lexer.tokenize();
- expect(tokens[2].type).toBe("identifier");
- expect(tokens[2].value).toBe("server_??");
- expect(tokens[4].type).toBe("identifier");
- });
- it("should handle error with unterminated string", function() {
- var lexer = new Lexer("alias(metric, 'asd)");
- var tokens = lexer.tokenize();
- expect(tokens[0].value).toBe("alias");
- expect(tokens[1].value).toBe("(");
- expect(tokens[2].value).toBe("metric");
- expect(tokens[3].value).toBe(",");
- expect(tokens[4].type).toBe("string");
- expect(tokens[4].isUnclosed).toBe(true);
- expect(tokens[4].pos).toBe(20);
- });
- it("should handle float parameters", function() {
- var lexer = new Lexer("alias(metric, 0.002)");
- var tokens = lexer.tokenize();
- expect(tokens[4].type).toBe("number");
- expect(tokens[4].value).toBe("0.002");
- });
- it("should handle bool parameters", function() {
- var lexer = new Lexer("alias(metric, true, false)");
- var tokens = lexer.tokenize();
- expect(tokens[4].type).toBe("bool");
- expect(tokens[4].value).toBe("true");
- expect(tokens[6].type).toBe("bool");
- });
- });
|