import * as l from "../mod.ts"; import { assert } from "./assert.ts"; const cases: readonly [l.Schema, readonly string[], readonly string[]][] = [ [l.did, [ "did:plc:alice", "did:web:example.com", "did:web:example.com%3A3000:users:alice", "did:example:abc%20", ], [ "", "did:plc:", "did:PLC:alice", "did:plc:alice/extra", "did:plc:alice#fragment", "did:plc:abc%zz", "did:plc:abc:", ]], [l.atUri, [ "at://did:plc:alice", "at://alice.example", "at://did:plc:alice/blue.cerulea.app.post/abc", "at://alice.example/blue.cerulea.app.profile/self", ], [ "https://example.com", "at://alice", "at://did:plc:alice/bad/key", "at://did:plc:alice/blue.cerulea.app.post/..", "at://did:plc:alice/blue.cerulea.app.post/key?x=1", "at://did:plc:alice/blue.cerulea.app.post/key/extra", ]], [l.datetime, [ "2024-02-29T23:59:59Z", "2026-09-16T00:00:00.000123Z", "1985-04-12T23:20:50.123+07:30", "0000-01-01T00:00:00Z", ], [ "2023-02-29T00:00:00Z", "2024-02-30T00:00:00Z", "2026-13-01T00:00:00Z", "2026-09-16T24:00:00Z", "2026-09-16T00:00:00", "2026-09-16t00:00:00z", "2026-09-16T00:00:00-00:00", "2026-09-16T00:00:00+24:00", "0000-01-01T00:00:00+01:00", ]], [l.language, [ "en", "pt-BR", "zh-Hant-TW", "de-CH-1901", "sl-rozaj-biske", "en-US-u-ca-gregory", "en-a-foo-b-bar", "x-private", "i-klingon", "en-GB-oed", ], ["", "e", "en_US", "en-", "abcdefghi", "en-a", "x", "en-1901-1901", "en-a-foo-a-bar"]], [l.uri, [ "https://example.com/path?q=a%20b#anchor", "mailto:alice@example.com", "did:plc:alice", "urn:isbn:0451450523", "https://[::1]:8080/path", "file:///tmp/a", "custom://[v1.test]/", ], [ "relative/path", "https://example.com/a b", "https://example.com/%GG", "https://example.com/🙂", "1http://example.com", "https://example.com/#a#b", "https://example.com:abc", "https://[not-ip]/", ]], [l.nsid, ["blue.cerulea.app.post", "com.example.getProfile", "com.example-v2.post"], [ "com.example", "com..post", "com.example.1post", "com.example.post-name", "com.-example.post", "1com.example.post", ]], [l.cid, [ "bafyreiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "bafkreiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ], [ "", "not-a-cid", "bafyreia", "bafyreiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab", "BAFYREIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "QmYwAPJzv5CZsnAzt8auVTLwPjVEhUV9BM1hNnA5mJ7uSY", "f01711220" + "00".repeat(32), ]], ]; for (const [schema, valid, invalid] of cases) { const format = schema.type === "string" ? schema.format : schema.type; Deno.test(`${format} syntax accepts valid values and rejects malformed ones`, () => { const check = l.compile(schema); for (const value of valid) assert(check(value).success, `Rejected valid ${format}: ${value}`); for (const value of invalid) { assert(!check(value).success, `Accepted invalid ${format}: ${value}`); } }); }