Spaces:
Sleeping
Sleeping
| import { describe, it, expect } from "vitest"; | |
| import * as entities from "./index.js"; | |
| describe("Encode->decode test", () => { | |
| const testcases = [ | |
| { | |
| input: "asdf & ÿ ü '", | |
| xml: "asdf & ÿ ü '", | |
| html: "asdf & ÿ ü '", | |
| }, | |
| { | |
| input: "&", | |
| xml: "&", | |
| html: "&", | |
| }, | |
| ]; | |
| for (const { input, xml, html } of testcases) { | |
| const encodedXML = entities.encodeXML(input); | |
| it(`should XML encode ${input}`, () => expect(encodedXML).toBe(xml)); | |
| it(`should default to XML encode ${input}`, () => | |
| expect(entities.encode(input)).toBe(xml)); | |
| it(`should XML decode ${encodedXML}`, () => | |
| expect(entities.decodeXML(encodedXML)).toBe(input)); | |
| it(`should default to XML encode ${encodedXML}`, () => | |
| expect(entities.decode(encodedXML)).toBe(input)); | |
| it(`should default strict to XML encode ${encodedXML}`, () => | |
| expect(entities.decodeStrict(encodedXML)).toBe(input)); | |
| const encodedHTML5 = entities.encodeHTML5(input); | |
| it(`should HTML5 encode ${input}`, () => | |
| expect(encodedHTML5).toBe(html)); | |
| it(`should HTML5 decode ${encodedHTML5}`, () => | |
| expect(entities.decodeHTML(encodedHTML5)).toBe(input)); | |
| it("should encode emojis", () => | |
| expect(entities.encodeHTML5("😄🍾🥳💥😇")).toBe( | |
| "😄🍾🥳💥😇", | |
| )); | |
| } | |
| it("should encode data URIs (issue #16)", () => { | |
| const data = | |
| "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAALAAABAAEAAAIBRAA7"; | |
| expect(entities.decode(entities.encode(data))).toBe(data); | |
| }); | |
| it("should HTML encode all ASCII characters", () => { | |
| for (let index = 0; index < 128; index++) { | |
| const char = String.fromCharCode(index); | |
| const encoded = entities.encodeHTML(char); | |
| const decoded = entities.decodeHTML(encoded); | |
| expect(decoded).toBe(char); | |
| } | |
| }); | |
| it("should encode trailing parts of entities", () => | |
| expect(entities.encodeHTML("\uD835")).toBe("�")); | |
| it("should encode surrogate pair with first surrogate equivalent of entity, without corresponding entity", () => | |
| expect(entities.encodeHTML("\u{1D4A4}")).toBe("𝒤")); | |
| }); | |
| describe("encodeNonAsciiHTML", () => { | |
| it("should encode all non-ASCII characters", () => | |
| expect(entities.encodeNonAsciiHTML("<test> #123! übermaßen")).toBe( | |
| "<test> #123! übermaßen", | |
| )); | |
| it("should encode emojis", () => | |
| expect(entities.encodeNonAsciiHTML("😄🍾🥳💥😇")).toBe( | |
| "😄🍾🥳💥😇", | |
| )); | |
| it("should encode chars above surrogates", () => | |
| expect(entities.encodeNonAsciiHTML("♒️♓️♈️♉️♊️♋️♌️♍️♎️♏️♐️♑️")).toBe( | |
| "♒️♓️♈️♉️♊️♋️♌️♍️♎️♏️♐️♑️", | |
| )); | |
| }); | |