braces.test.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // @ts-ignore
  2. import Plain from 'slate-plain-serializer';
  3. import BracesPlugin from './braces';
  4. declare global {
  5. interface Window {
  6. KeyboardEvent: any;
  7. }
  8. }
  9. describe('braces', () => {
  10. const handler = BracesPlugin().onKeyDown;
  11. it('adds closing braces around empty value', () => {
  12. const change = Plain.deserialize('').change();
  13. const event = new window.KeyboardEvent('keydown', { key: '(' });
  14. handler(event, change);
  15. expect(Plain.serialize(change.value)).toEqual('()');
  16. });
  17. it('adds closing braces around a value', () => {
  18. const change = Plain.deserialize('foo').change();
  19. const event = new window.KeyboardEvent('keydown', { key: '(' });
  20. handler(event, change);
  21. expect(Plain.serialize(change.value)).toEqual('(foo)');
  22. });
  23. it('adds closing braces around the following value only', () => {
  24. const change = Plain.deserialize('foo bar ugh').change();
  25. let event;
  26. event = new window.KeyboardEvent('keydown', { key: '(' });
  27. handler(event, change);
  28. expect(Plain.serialize(change.value)).toEqual('(foo) bar ugh');
  29. // Wrap bar
  30. change.move(5);
  31. event = new window.KeyboardEvent('keydown', { key: '(' });
  32. handler(event, change);
  33. expect(Plain.serialize(change.value)).toEqual('(foo) (bar) ugh');
  34. // Create empty parens after (bar)
  35. change.move(4);
  36. event = new window.KeyboardEvent('keydown', { key: '(' });
  37. handler(event, change);
  38. expect(Plain.serialize(change.value)).toEqual('(foo) (bar)() ugh');
  39. });
  40. it('adds closing braces outside a selector', () => {
  41. const change = Plain.deserialize('sumrate(metric{namespace="dev", cluster="c1"}[2m])').change();
  42. let event;
  43. change.move(3);
  44. event = new window.KeyboardEvent('keydown', { key: '(' });
  45. handler(event, change);
  46. expect(Plain.serialize(change.value)).toEqual('sum(rate(metric{namespace="dev", cluster="c1"}[2m]))');
  47. });
  48. it('removes closing brace when opening brace is removed', () => {
  49. const change = Plain.deserialize('time()').change();
  50. let event;
  51. change.move(5);
  52. event = new window.KeyboardEvent('keydown', { key: 'Backspace' });
  53. handler(event, change);
  54. expect(Plain.serialize(change.value)).toEqual('time');
  55. });
  56. it('keeps closing brace when opening brace is removed and inner values exist', () => {
  57. const change = Plain.deserialize('time(value)').change();
  58. let event;
  59. change.move(5);
  60. event = new window.KeyboardEvent('keydown', { key: 'Backspace' });
  61. const handled = handler(event, change);
  62. expect(handled).toBeFalsy();
  63. });
  64. });