lexer-specs.js 3.7 KB

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