# test.govlab/docs/core/predicates/character.predicate.test.ts

> 21 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-govlab-docs-core-predicates-character-predicate-test-ts
Source text: https://banes-lab.com/source/testing/test.govlab/docs/core/predicates/character.predicate.test.ts.txt

Listed in [test.govlab/docs/core/predicates](https://banes-lab.com/api/source/testing/test.govlab/docs/core/predicates.md), before [test.govlab/docs/core/predicates/code.typescript.predicate.test.ts](https://banes-lab.com/source/testing/test.govlab/docs/core/predicates/code.typescript.predicate.test.ts.md).

## Contained in

- [test.govlab/docs/core/predicates](https://banes-lab.com/anatomy/testing/folder-testing-test-govlab-docs-core-predicates.md)

## Source

```typescript
import { describe, expect, it } from "vitest";
import { isAsciiAlnum, isAsciiLower, isKebab } from "@govlab/docs/core/predicates/character.predicate.ts";

describe("the character predicates", () => {
    it("classify single characters", () => {
        expect(["a", "Z", "7", "-"].map(isAsciiAlnum)).toStrictEqual([true, true, true, false]);
        expect(["a", "A"].map(isAsciiLower)).toStrictEqual([true, false]);
    });

    it("accept a kebab name and refuse edge, doubled or foreign hyphens and other characters", () => {
        expect(["scale-docs", "a1", "-a", "a-", "a--b", "Aa", "a_b", "", 7].map(isKebab)).toStrictEqual([
            true,
            true,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
        ]);
    });
});
```
