forked from cadence/out-of-your-element
m->d: Emoji sprite sheet supports APNG
This commit is contained in:
parent
f48c1f3f31
commit
6c3164edd6
5 changed files with 138 additions and 52 deletions
55
m2d/converters/emoji-sheet.test.js
Normal file
55
m2d/converters/emoji-sheet.test.js
Normal file
|
@ -0,0 +1,55 @@
|
|||
const assert = require("assert").strict
|
||||
const {test} = require("supertape")
|
||||
const {_convertImageStream} = require("./emoji-sheet")
|
||||
const fetch = require("node-fetch")
|
||||
const {Transform} = require("stream").Transform
|
||||
|
||||
/* c8 ignore next 7 */
|
||||
function slow() {
|
||||
if (process.argv.includes("--slow")) {
|
||||
return test
|
||||
} else {
|
||||
return test.skip
|
||||
}
|
||||
}
|
||||
|
||||
class Meter extends Transform {
|
||||
bytes = 0
|
||||
|
||||
_transform(chunk, encoding, cb) {
|
||||
this.bytes += chunk.length
|
||||
this.push(chunk)
|
||||
cb()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import("supertape").Test} t
|
||||
* @param {string} url
|
||||
* @param {number} totalSize
|
||||
*/
|
||||
async function runSingleTest(t, url, totalSize) {
|
||||
const abortController = new AbortController()
|
||||
const res = await fetch("https://ezgif.com/images/format-demo/butterfly.png", {agent: false, signal: abortController.signal})
|
||||
const meter = new Meter()
|
||||
const p = res.body.pipe(meter)
|
||||
const result = await _convertImageStream(p, () => {
|
||||
abortController.abort()
|
||||
res.body.pause()
|
||||
res.body.emit("end")
|
||||
})
|
||||
t.equal(result.subarray(1, 4).toString("ascii"), "PNG", `result was not a PNG file: ${result.toString("base64")}`)
|
||||
if (meter.bytes < totalSize / 4) { // should download less than 25% of each file
|
||||
t.pass("intentionally read partial file")
|
||||
} else {
|
||||
t.fail(`read more than 25% of file, read: ${meter.bytes}, total: ${totalSize}`)
|
||||
}
|
||||
}
|
||||
|
||||
slow()("emoji-sheet: only partial file is read for APNG", async t => {
|
||||
await runSingleTest(t, "https://ezgif.com/images/format-demo/butterfly.png", 2438998)
|
||||
})
|
||||
|
||||
slow()("emoji-sheet: only partial file is read for GIF", async t => {
|
||||
await runSingleTest(t, "https://ezgif.com/images/format-demo/butterfly.gif", 781223)
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue