deno.land / std@0.224.0 / regexp / escape_test.ts
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
import { escape } from "./escape.ts";import { assertEquals, assertMatch, assertNotMatch } from "../assert/mod.ts";
const ALL_ASCII = "\x00\x01\x02\x03\x04\x05\x06\x07\b\t\n\v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F";const ALL_REGEXP_FLAGS = "gimsuy";
Deno.test("escape() works with examples", async (t) => { await t.step("`.` matches literal `.`", () => { const re = new RegExp(`^${escape(".")}$`, "u");
assertEquals("^\\.$", re.source); assertMatch(".", re); assertNotMatch("a", re); }); await t.step("`$` matches literal `$`", () => { const re = new RegExp(`^${escape("$")}$`);
assertMatch("$", re); assertNotMatch("", re); }); await t.step("`*` matches literal `*`", () => { const re = new RegExp(`^${escape("a*")}$`);
assertMatch("a*", re); assertNotMatch("", re); assertNotMatch("aaa", re); }); await t.step("escapes works correctly within character class", () => { const re = new RegExp(`^[${escape(".$*+[](){}|\\<>")}]$`);
assertMatch(".", re); assertMatch("$", re); assertMatch("*", re); assertMatch("+", re); assertMatch("[", re); assertMatch("]", re); assertMatch("(", re); assertMatch(")", re); assertMatch("{", re); assertMatch("}", re); assertMatch("|", re); assertMatch("\\", re); assertMatch("<", re); assertMatch(">", re);
assertNotMatch("a", re); });});Deno.test("escape() works with all ASCII", async (t) => { await t.step("interpolates without erroring", async (t) => { await t.step("outside character class", () => { for (const char of ALL_ASCII) { for (const flag of ALL_REGEXP_FLAGS) { new RegExp(escape(char), flag); } } }); await t.step("within character class", () => { for (const char of ALL_ASCII) { for (const flag of ALL_REGEXP_FLAGS) { new RegExp(`[${escape(char)}]`, flag); } } }); await t.step("matches self", () => { for (const char of ALL_ASCII) { for (const flag of ALL_REGEXP_FLAGS) { assertMatch(char, new RegExp(`^${escape(char)}$`, flag)); } } }); await t.step("doesn't match any other chars", () => { for (const char of ALL_ASCII) { for (const flag of ALL_REGEXP_FLAGS) { if (flag === "i") continue;
for (const char2 of ALL_ASCII) { if (char2 === char) continue;
assertNotMatch( char2, new RegExp(`^${escape(char)}$`, flag), ); } } } }); });});
Version Info