35 lines
1,011 B
JavaScript
35 lines
1,011 B
JavaScript
// @ts-check
|
|
|
|
const fs = require("fs")
|
|
const stream = require("stream")
|
|
const {test} = require("supertape")
|
|
const {convert} = require("./lottie")
|
|
|
|
const WRITE_PNG = false
|
|
|
|
test("lottie: can convert and save PNG", async t => {
|
|
const input = await fs.promises.readFile("test/res/lottie-bee.json", "utf8")
|
|
const resultStream = await convert(input)
|
|
/* c8 ignore next 3 */
|
|
if (WRITE_PNG) {
|
|
resultStream.pipe(fs.createWriteStream("test/res/lottie-bee.png"))
|
|
t.fail("PNG written to /test/res/lottie-bee.png, please manually check it")
|
|
} else {
|
|
const expected = await fs.promises.readFile("test/res/lottie-bee.png")
|
|
const actual = Buffer.alloc(expected.length)
|
|
let i = 0
|
|
await stream.promises.pipeline(
|
|
resultStream,
|
|
async function* (source) {
|
|
for await (const chunk of source) {
|
|
chunk.copy(actual, i)
|
|
i += chunk.length
|
|
}
|
|
},
|
|
new stream.PassThrough()
|
|
)
|
|
t.equal(i, actual.length, `allocated ${actual.length} bytes, but wrote ${i}`)
|
|
t.deepEqual(actual, expected)
|
|
}
|
|
})
|