lexer-specs.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. define([
  2. 'app/plugins/datasource/graphite/lexer'
  3. ], function(Lexer) {
  4. 'use strict';
  5. describe('when lexing graphite expression', function() {
  6. it('should tokenize metric expression', function() {
  7. var lexer = new Lexer('metric.test.*.asd.count');
  8. var tokens = lexer.tokenize();
  9. expect(tokens[0].value).to.be('metric');
  10. expect(tokens[1].value).to.be('.');
  11. expect(tokens[2].type).to.be('identifier');
  12. expect(tokens[4].type).to.be('identifier');
  13. expect(tokens[4].pos).to.be(13);
  14. });
  15. it('should tokenize metric expression with dash', function() {
  16. var lexer = new Lexer('metric.test.se1-server-*.asd.count');
  17. var tokens = lexer.tokenize();
  18. expect(tokens[4].type).to.be('identifier');
  19. expect(tokens[4].value).to.be('se1-server-*');
  20. });
  21. it('should tokenize metric expression with dash2', function() {
  22. var lexer = new Lexer('net.192-168-1-1.192-168-1-9.ping_value.*');
  23. var tokens = lexer.tokenize();
  24. expect(tokens[0].value).to.be('net');
  25. expect(tokens[2].value).to.be('192-168-1-1');
  26. });
  27. it('should tokenize metric expression with equal sign', function() {
  28. var lexer = new Lexer('apps=test');
  29. var tokens = lexer.tokenize();
  30. expect(tokens[0].value).to.be('apps=test');
  31. });
  32. it('simple function2', function() {
  33. var lexer = new Lexer('offset(test.metric, -100)');
  34. var tokens = lexer.tokenize();
  35. expect(tokens[2].type).to.be('identifier');
  36. expect(tokens[4].type).to.be('identifier');
  37. expect(tokens[6].type).to.be('number');
  38. });
  39. it('should tokenize metric expression with curly braces', function() {
  40. var lexer = new Lexer('metric.se1-{first, second}.count');
  41. var tokens = lexer.tokenize();
  42. expect(tokens.length).to.be(10);
  43. expect(tokens[3].type).to.be('{');
  44. expect(tokens[4].value).to.be('first');
  45. expect(tokens[5].value).to.be(',');
  46. expect(tokens[6].value).to.be('second');
  47. });
  48. it('should tokenize metric expression with number segments', function() {
  49. var lexer = new Lexer("metric.10.12_10.test");
  50. var tokens = lexer.tokenize();
  51. expect(tokens[0].type).to.be('identifier');
  52. expect(tokens[2].type).to.be('identifier');
  53. expect(tokens[2].value).to.be('10');
  54. expect(tokens[4].value).to.be('12_10');
  55. expect(tokens[4].type).to.be('identifier');
  56. });
  57. it('should tokenize func call with numbered metric and number arg', function() {
  58. var lexer = new Lexer("scale(metric.10, 15)");
  59. var tokens = lexer.tokenize();
  60. expect(tokens[0].type).to.be('identifier');
  61. expect(tokens[2].type).to.be('identifier');
  62. expect(tokens[2].value).to.be('metric');
  63. expect(tokens[4].value).to.be('10');
  64. expect(tokens[4].type).to.be('number');
  65. expect(tokens[6].type).to.be('number');
  66. });
  67. it('should tokenize metric with template parameter', function() {
  68. var lexer = new Lexer("metric.[[server]].test");
  69. var tokens = lexer.tokenize();
  70. expect(tokens[2].type).to.be('identifier');
  71. expect(tokens[2].value).to.be('[[server]]');
  72. expect(tokens[4].type).to.be('identifier');
  73. });
  74. it('should tokenize metric with question mark', function() {
  75. var lexer = new Lexer("metric.server_??.test");
  76. var tokens = lexer.tokenize();
  77. expect(tokens[2].type).to.be('identifier');
  78. expect(tokens[2].value).to.be('server_??');
  79. expect(tokens[4].type).to.be('identifier');
  80. });
  81. it('should handle error with unterminated string', function() {
  82. var lexer = new Lexer("alias(metric, 'asd)");
  83. var tokens = lexer.tokenize();
  84. expect(tokens[0].value).to.be('alias');
  85. expect(tokens[1].value).to.be('(');
  86. expect(tokens[2].value).to.be('metric');
  87. expect(tokens[3].value).to.be(',');
  88. expect(tokens[4].type).to.be('string');
  89. expect(tokens[4].isUnclosed).to.be(true);
  90. expect(tokens[4].pos).to.be(20);
  91. });
  92. it('should handle float parameters', function() {
  93. var lexer = new Lexer("alias(metric, 0.002)");
  94. var tokens = lexer.tokenize();
  95. expect(tokens[4].type).to.be('number');
  96. expect(tokens[4].value).to.be('0.002');
  97. });
  98. it('should handle bool parameters', function() {
  99. var lexer = new Lexer("alias(metric, true, false)");
  100. var tokens = lexer.tokenize();
  101. expect(tokens[4].type).to.be('bool');
  102. expect(tokens[4].value).to.be('true');
  103. expect(tokens[6].type).to.be('bool');
  104. });
  105. });
  106. });