deleteNodesVisitor.test.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { numberTypeNode, publicKeyTypeNode, tupleTypeNode } from '@kinobi-so/nodes';
  2. import test from 'ava';
  3. import { deleteNodesVisitor, visit } from '../src/index.js';
  4. test('it can delete nodes using selectors', t => {
  5. // Given the following tree.
  6. const node = tupleTypeNode([numberTypeNode('u32'), tupleTypeNode([numberTypeNode('u32'), publicKeyTypeNode()])]);
  7. // And a visitor that deletes all number nodes.
  8. const visitor = deleteNodesVisitor(['[numberTypeNode]']);
  9. // When we visit the tree using that visitor.
  10. const result = visit(node, visitor);
  11. // Then we expect the number nodes to have been deleted.
  12. t.deepEqual(result, tupleTypeNode([tupleTypeNode([publicKeyTypeNode()])]));
  13. });
  14. test('it can create partial visitors', t => {
  15. // Given the following tree.
  16. const node = tupleTypeNode([numberTypeNode('u32'), tupleTypeNode([numberTypeNode('u32'), publicKeyTypeNode()])]);
  17. // And a visitor that deletes all number nodes and public key nodes
  18. // but does not support public key nodes.
  19. const visitor = deleteNodesVisitor(
  20. ['[numberTypeNode]', '[publicKeyTypeNode]'],
  21. ['tupleTypeNode', 'numberTypeNode'],
  22. );
  23. // When we visit the tree using that visitor.
  24. const result = visit(node, visitor);
  25. // Then only the number nodes have been deleted.
  26. t.deepEqual(result, tupleTypeNode([tupleTypeNode([publicKeyTypeNode()])]));
  27. // And the public key node cannot be visited.
  28. // @ts-expect-error PublicKeyTypeNode is not supported.
  29. t.throws(() => visit(publicKeyTypeNode(), visitor));
  30. });