|
6 | 6 | * https://github.com/Statsify/statsify/blob/main/LICENSE |
7 | 7 | */ |
8 | 8 |
|
| 9 | +import { FontRenderer } from "#font"; |
| 10 | +import { createCanvas } from "../src/canvas.js"; |
9 | 11 | import { createInstructions } from "../src/index.js"; |
10 | 12 | import { expect, it, suite } from "vitest"; |
11 | 13 |
|
@@ -156,3 +158,37 @@ suite("JSX Fragments", () => { |
156 | 158 | expect(instructions.children?.length).toBe(2); |
157 | 159 | }); |
158 | 160 | }); |
| 161 | + |
| 162 | +suite("FontRenderer", () => { |
| 163 | + it("ignores unsupported glyphs with a loaded unicode page", () => { |
| 164 | + const page = createCanvas(256, 256); |
| 165 | + const pageCtx = page.getContext("2d"); |
| 166 | + const target = createCanvas(16, 16).getContext("2d"); |
| 167 | + |
| 168 | + const renderer = new FontRenderer(false); |
| 169 | + |
| 170 | + Object.assign(renderer, { |
| 171 | + images: new Map([["1f", pageCtx]]), |
| 172 | + canvases: new WeakMap([[pageCtx, page]]), |
| 173 | + scales: new WeakMap([[pageCtx, 1]]), |
| 174 | + }); |
| 175 | + |
| 176 | + expect(() => renderer.fillText(target, renderer.lex("🌙"), 0, 0)).not.toThrow(); |
| 177 | + }); |
| 178 | + |
| 179 | + it("ignores zero-width glyph metadata", () => { |
| 180 | + const page = createCanvas(256, 256); |
| 181 | + const pageCtx = page.getContext("2d"); |
| 182 | + const target = createCanvas(16, 16).getContext("2d"); |
| 183 | + |
| 184 | + const renderer = new FontRenderer(false); |
| 185 | + |
| 186 | + Object.assign(renderer, { |
| 187 | + images: new Map([["12", pageCtx]]), |
| 188 | + canvases: new WeakMap([[pageCtx, page]]), |
| 189 | + scales: new WeakMap([[pageCtx, 1]]), |
| 190 | + }); |
| 191 | + |
| 192 | + expect(() => renderer.fillText(target, renderer.lex("\u1249"), 0, 0)).not.toThrow(); |
| 193 | + }); |
| 194 | +}); |
0 commit comments