# test.govlab/code-parse/core/selectors/syntax.selector.test.ts

> 44 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-govlab-code-parse-core-selectors-syntax-selector-test-ts
Source text: https://banes-lab.com/source/testing/test.govlab/code-parse/core/selectors/syntax.selector.test.ts.txt

Listed in [test.govlab/code-parse/core/selectors](https://banes-lab.com/api/source/testing/test.govlab/code-parse/core/selectors.md).

## Contained in

- [test.govlab/code-parse/core/selectors](https://banes-lab.com/anatomy/testing/folder-testing-test-govlab-code-parse-core-selectors.md)

## Source

```typescript
import { commentNodes, isCommentType, walk } from "@govlab/code-parse";
import { describe, expect, it } from "vitest";
import { COMMENT_NODE_TYPES } from "@govlab/code-parse/configuration/constants/syntax.constants.ts";
import type { RawNode } from "@govlab/code-parse/types/syntax.types.ts";
import { adaptNode } from "@govlab/code-parse/core/adapters/syntax.adapter.ts";

const leaf = function leaf(type: string, startIndex: number): RawNode {
    return { child: () => null, childCount: 0, endIndex: startIndex + 1, isNamed: true, startIndex, type };
};

const TREE: RawNode = {
    child: (index) => [leaf("comment", 0), leaf("identifier", 1)].at(index) ?? null,
    childCount: 2,
    endIndex: 2,
    fieldNameForChild: (index) => (index === 1 ? "name" : null),
    isNamed: () => true,
    startIndex: 0,
    type: "program",
};

describe("adaptNode", () => {
    it("copies the tree into plain nodes with named fields", () => {
        const root = adaptNode(TREE);
        expect(root.isNamed).toBe(true);
        expect(root.child(1)?.type).toBe("identifier");
        expect(root.child(5)).toBeNull();
        expect(root.childForFieldName?.("name")?.type).toBe("identifier");
        expect(root.startPosition).toStrictEqual({ column: 0, row: 0 });
    });
});

describe("walk and commentNodes", () => {
    it("visit every node in document order and keep only the comment kinds", () => {
        const root = adaptNode(TREE);
        const seen: string[] = [];
        walk(root, (node) => {
            seen.push(node.type);
        });
        expect(seen).toStrictEqual(["program", "comment", "identifier"]);
        expect(commentNodes(root).map((node) => node.type)).toStrictEqual(["comment"]);
    });
});

describe("isCommentType", () => {
    it("accepts every declared comment kind and nothing else", () => {
        expect([...COMMENT_NODE_TYPES].every(isCommentType)).toBe(true);
        expect(isCommentType("function_declaration")).toBe(false);
    });
});
```
