generate-children-regexp.spec.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { describe, expect, test } from 'vitest';
  2. import { generateChildrenRegExp } from './generate-children-regexp';
  3. describe('generateChildrenRegExp', () => {
  4. describe.each([
  5. {
  6. path: '/',
  7. expected: '^\\/[^/]+$',
  8. validPaths: ['/child', '/test'],
  9. invalidPaths: ['/', '/child/grandchild'],
  10. },
  11. {
  12. path: '/parent',
  13. expected: '^\\/parent(\\/[^/]+)\\/?$',
  14. validPaths: ['/parent/child', '/parent/test'],
  15. invalidPaths: ['/parent', '/parent/child/grandchild', '/other/path'],
  16. },
  17. {
  18. path: '/parent (with brackets)',
  19. expected: '^\\/parent\\x20\\(with\\x20brackets\\)(\\/[^/]+)\\/?$',
  20. validPaths: [
  21. '/parent (with brackets)/child',
  22. '/parent (with brackets)/test',
  23. ],
  24. invalidPaths: [
  25. '/parent (with brackets)',
  26. '/parent (with brackets)/child/grandchild',
  27. ],
  28. },
  29. {
  30. path: '/parent[with square]',
  31. expected: '^\\/parent\\[with\\x20square\\](\\/[^/]+)\\/?$',
  32. validPaths: ['/parent[with square]/child', '/parent[with square]/test'],
  33. invalidPaths: [
  34. '/parent[with square]',
  35. '/parent[with square]/child/grandchild',
  36. ],
  37. },
  38. {
  39. path: '/parent*with+special?chars',
  40. expected: '^\\/parent\\*with\\+special\\?chars(\\/[^/]+)\\/?$',
  41. validPaths: [
  42. '/parent*with+special?chars/child',
  43. '/parent*with+special?chars/test',
  44. ],
  45. invalidPaths: [
  46. '/parent*with+special?chars',
  47. '/parent*with+special?chars/child/grandchild',
  48. ],
  49. },
  50. ])('with path: $path', ({ path, expected, validPaths, invalidPaths }) => {
  51. test('should generate correct regexp pattern', () => {
  52. const result = generateChildrenRegExp(path);
  53. expect(result.source).toBe(expected);
  54. });
  55. test.each(validPaths)('should match valid path: %s', (validPath) => {
  56. const result = generateChildrenRegExp(path);
  57. expect(validPath).toMatch(result);
  58. });
  59. test.each(
  60. invalidPaths,
  61. )('should not match invalid path: %s', (invalidPath) => {
  62. const result = generateChildrenRegExp(path);
  63. expect(invalidPath).not.toMatch(result);
  64. });
  65. });
  66. });