|
| 1 | +/* eslint-disable @stylistic/max-len */ |
| 2 | +// Import Node.js Dependencies |
| 3 | +import { test } from "node:test"; |
| 4 | +import assert from "node:assert/strict"; |
| 5 | + |
| 6 | +// Import Internal Dependencies |
| 7 | +import { isStringBase64 } from "../src/utils.js"; |
| 8 | + |
| 9 | +test("isBase64", function isBase64() { |
| 10 | + const pngString = "iVBORw0KGgoAAAANSUhEUgAABQAAAALQAQMAAAD1s08VAAAAA1BMVEX/AAAZ4gk3AAAAh0lEQVR42u3BMQEAAADCoPVPbQlPoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4GsTfAAGc95RKAAAAAElFTkSuQmCC"; |
| 11 | + const pngStringWithMime = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQAQMAAAD1s08VAAAAA1BMVEX/AAAZ4gk3AAAAh0lEQVR42u3BMQEAAADCoPVPbQlPoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4GsTfAAGc95RKAAAAAElFTkSuQmCC"; |
| 12 | + const jpgString = "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEACAhITMkM1EwMFFCLy8vQiccHBwcJyIXFxcXFyIRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBIjMzNCY0IhgYIhQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAAYABgMBIgACEQEDEQH/xABVAAEBAAAAAAAAAAAAAAAAAAAAAxAAAQQCAwEAAAAAAAAAAAAAAgABAxQEIxIkMxMBAQAAAAAAAAAAAAAAAAAAAAARAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AIE7MwkbOUJDJWx+ZjXATitx2/h2bEWvX5Y0npQ7aIiD/9k="; |
| 13 | + const jpgStringWithMime = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEACAhITMkM1EwMFFCLy8vQiccHBwcJyIXFxcXFyIRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBIjMzNCY0IhgYIhQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAAYABgMBIgACEQEDEQH/xABVAAEBAAAAAAAAAAAAAAAAAAAAAxAAAQQCAwEAAAAAAAAAAAAAAgABAxQEIxIkMxMBAQAAAAAAAAAAAAAAAAAAAAARAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AIE7MwkbOUJDJWx+ZjXATitx2/h2bEWvX5Y0npQ7aIiD/9k="; |
| 14 | + |
| 15 | + // Test agains real images |
| 16 | + assert.equal(isStringBase64(pngString), true); |
| 17 | + assert.equal(isStringBase64(pngStringWithMime), false); |
| 18 | + assert.equal(isStringBase64(pngStringWithMime, { allowMime: true }), true); |
| 19 | + assert.equal(isStringBase64(pngString, { mimeRequired: true }), false); |
| 20 | + assert.equal(isStringBase64(pngStringWithMime, { mimeRequired: true }), true); |
| 21 | + assert.equal(isStringBase64(jpgString), true); |
| 22 | + assert.equal(isStringBase64(jpgStringWithMime), false); |
| 23 | + assert.equal(isStringBase64(jpgStringWithMime, { allowMime: true }), true); |
| 24 | + |
| 25 | + // helper for creating fake valid mime strings |
| 26 | + function createMimeString(mime: string): string { |
| 27 | + return `data:${mime};base64,${pngString}`; |
| 28 | + } |
| 29 | + |
| 30 | + // Random complex mime types taken from: |
| 31 | + // http://www.freeformatter.com/mime-types-list.html |
| 32 | + assert.equal(isStringBase64(createMimeString("application/vnd.apple.installer+xml"), { allowMime: true }), true); |
| 33 | + assert.equal(isStringBase64(createMimeString("image/svg+xml"), { allowMime: true }), true); |
| 34 | + assert.equal(isStringBase64(createMimeString("application/set-payment-initiation"), { allowMime: true }), true); |
| 35 | + assert.equal(isStringBase64(createMimeString("image/vnd.adobe.photoshop"), { allowMime: true }), true); |
| 36 | + |
| 37 | + assert.equal(isStringBase64("1342234"), false); |
| 38 | + assert.equal(isStringBase64("afQ$%rfew"), false); |
| 39 | + assert.equal(isStringBase64("dfasdfr342"), false); |
| 40 | + assert.equal(isStringBase64("uuLMhh"), false); |
| 41 | + assert.equal(isStringBase64("uuLMhh", { paddingRequired: false }), true); |
| 42 | + assert.equal(isStringBase64("uuLMhh", { paddingRequired: true }), false); |
| 43 | + assert.equal(isStringBase64("uuLMhh=="), true); |
| 44 | + assert.equal(isStringBase64("uuLMhh==", { paddingRequired: false }), true); |
| 45 | + assert.equal(isStringBase64("uuLMhh==", { paddingRequired: true }), true); |
| 46 | + assert.equal(isStringBase64("data:image/png;base64,uuLMhh==", { paddingRequired: true }), false); |
| 47 | + assert.equal(isStringBase64("data:image/png;base64,uuLMhh==", { paddingRequired: true, allowMime: true }), true); |
| 48 | + assert.equal(isStringBase64(""), true); |
| 49 | + assert.equal(isStringBase64("", { allowEmpty: false }), false); |
| 50 | +}); |
0 commit comments