Node.test.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import { describe, expect, test } from 'vitest';
  2. import {
  3. assertIsNode,
  4. assertIsNodeFilter,
  5. isNode,
  6. isNodeFilter,
  7. numberTypeNode,
  8. publicKeyTypeNode,
  9. removeNullAndAssertIsNodeFilter,
  10. tupleTypeNode,
  11. } from '../src';
  12. describe('isNode', () => {
  13. test('it checks if a given node is of the given kind', () => {
  14. expect(isNode(tupleTypeNode([]), 'tupleTypeNode')).toBe(true);
  15. expect(isNode(publicKeyTypeNode(), 'tupleTypeNode')).toBe(false);
  16. expect(isNode(null, 'tupleTypeNode')).toBe(false);
  17. });
  18. test('it checks if a given node is part of the given kinds', () => {
  19. expect(isNode(tupleTypeNode([]), ['tupleTypeNode', 'publicKeyTypeNode'])).toBe(true);
  20. expect(isNode(publicKeyTypeNode(), ['tupleTypeNode', 'publicKeyTypeNode'])).toBe(true);
  21. expect(isNode(numberTypeNode('u8'), ['tupleTypeNode', 'publicKeyTypeNode'])).toBe(false);
  22. expect(isNode(null, ['tupleTypeNode', 'publicKeyTypeNode'])).toBe(false);
  23. });
  24. });
  25. describe('assertIsNode', () => {
  26. test('it asserts that a given node is of the given kind', () => {
  27. expect(() => assertIsNode(tupleTypeNode([]), 'tupleTypeNode')).not.toThrow();
  28. expect(() => assertIsNode(publicKeyTypeNode(), 'tupleTypeNode')).toThrowError(
  29. 'Expected node of kind [tupleTypeNode], got [publicKeyTypeNode].',
  30. );
  31. expect(() => assertIsNode(null, 'tupleTypeNode')).toThrowError(
  32. 'Expected node of kind [tupleTypeNode], got [null].',
  33. );
  34. });
  35. test('it asserts that a given node is part of the given kinds', () => {
  36. expect(() => assertIsNode(tupleTypeNode([]), ['tupleTypeNode', 'publicKeyTypeNode'])).not.toThrow();
  37. expect(() => assertIsNode(publicKeyTypeNode(), ['tupleTypeNode', 'publicKeyTypeNode'])).not.toThrow();
  38. expect(() => assertIsNode(numberTypeNode('u8'), ['tupleTypeNode', 'publicKeyTypeNode'])).toThrowError(
  39. 'Expected node of kind [tupleTypeNode,publicKeyTypeNode], got [numberTypeNode].',
  40. );
  41. expect(() => assertIsNode(null, ['tupleTypeNode', 'publicKeyTypeNode'])).toThrowError(
  42. 'Expected node of kind [tupleTypeNode,publicKeyTypeNode], got [null].',
  43. );
  44. });
  45. });
  46. describe('isNodeFilter', () => {
  47. test('it returns a callback that checks the node is of the given kind', () => {
  48. const filter = isNodeFilter('tupleTypeNode');
  49. expect(filter(tupleTypeNode([]))).toBe(true);
  50. expect(filter(publicKeyTypeNode())).toBe(false);
  51. expect(filter(null)).toBe(false);
  52. });
  53. test('it returns a callback that checks the node is part of the given kinds', () => {
  54. const filter = isNodeFilter(['tupleTypeNode', 'publicKeyTypeNode']);
  55. expect(filter(tupleTypeNode([]))).toBe(true);
  56. expect(filter(publicKeyTypeNode())).toBe(true);
  57. expect(filter(numberTypeNode('u8'))).toBe(false);
  58. expect(filter(null)).toBe(false);
  59. });
  60. });
  61. describe('assertIsNodeFilter', () => {
  62. test('it returns a callback that asserts the node is of the given kind', () => {
  63. const filter = assertIsNodeFilter('tupleTypeNode');
  64. expect(() => filter(tupleTypeNode([]))).not.toThrow();
  65. expect(() => filter(publicKeyTypeNode())).toThrowError(
  66. 'Expected node of kind [tupleTypeNode], got [publicKeyTypeNode].',
  67. );
  68. expect(() => filter(null)).toThrowError('Expected node of kind [tupleTypeNode], got [null].');
  69. });
  70. test('it returns a callback that asserts the node is part of the given kinds', () => {
  71. const filter = assertIsNodeFilter(['tupleTypeNode', 'publicKeyTypeNode']);
  72. expect(() => filter(tupleTypeNode([]))).not.toThrow();
  73. expect(() => filter(publicKeyTypeNode())).not.toThrow();
  74. expect(() => filter(numberTypeNode('u8'))).toThrowError(
  75. 'Expected node of kind [tupleTypeNode,publicKeyTypeNode], got [numberTypeNode].',
  76. );
  77. expect(() => filter(null)).toThrowError('Expected node of kind [tupleTypeNode,publicKeyTypeNode], got [null].');
  78. });
  79. });
  80. describe('removeNullAndAssertIsNodeFilter', () => {
  81. test('it returns a callback that filters out null values and asserts the node is of the given kind', () => {
  82. const filter = removeNullAndAssertIsNodeFilter('tupleTypeNode');
  83. expect([tupleTypeNode([]), null].filter(filter)).toEqual([tupleTypeNode([])]);
  84. expect(() => [tupleTypeNode([]), publicKeyTypeNode(), null].filter(filter)).toThrowError(
  85. 'Expected node of kind [tupleTypeNode], got [publicKeyTypeNode].',
  86. );
  87. });
  88. test('it returns a callback that filters out null values and asserts the node is part of the given kinds', () => {
  89. const filter = removeNullAndAssertIsNodeFilter(['tupleTypeNode', 'publicKeyTypeNode']);
  90. expect([tupleTypeNode([]), publicKeyTypeNode(), null].filter(filter)).toEqual([
  91. tupleTypeNode([]),
  92. publicKeyTypeNode(),
  93. ]);
  94. expect(() => [tupleTypeNode([]), numberTypeNode('u8'), null].filter(filter)).toThrowError(
  95. 'Expected node of kind [tupleTypeNode,publicKeyTypeNode], got [numberTypeNode].',
  96. );
  97. });
  98. });