Add tests
This commit is contained in:
171
tests/ffmpeg.test.js
Normal file
171
tests/ffmpeg.test.js
Normal file
@@ -0,0 +1,171 @@
|
||||
const { FFmpeg } = FFmpegWASM;
|
||||
|
||||
const genName = (name) => `[ffmpeg][${FFMPEG_TYPE}] ${name}`;
|
||||
|
||||
const createFFmpeg = async () => {
|
||||
const ffmpeg = new FFmpeg();
|
||||
await ffmpeg.load({
|
||||
coreURL: CORE_URL,
|
||||
thread: FFMPEG_TYPE === "mt",
|
||||
});
|
||||
return ffmpeg;
|
||||
};
|
||||
|
||||
describe(genName("new FFmpeg()"), () => {
|
||||
it("should be OK", () => {
|
||||
expect(new FFmpeg()).to.be.ok;
|
||||
});
|
||||
});
|
||||
|
||||
describe(genName("FFmpeg.load()"), function () {
|
||||
// it("should work without any args", async () => {
|
||||
// const ffmpeg = new FFmpeg();
|
||||
// await ffmpeg.load();
|
||||
// expect(ffmpeg).to.be.ok;
|
||||
// });
|
||||
|
||||
it("should work when blob is false", async () => {
|
||||
const ffmpeg = new FFmpeg();
|
||||
await ffmpeg.load({
|
||||
coreURL: CORE_URL,
|
||||
blob: false,
|
||||
thread: FFMPEG_TYPE === "mt",
|
||||
});
|
||||
expect(ffmpeg).to.be.ok;
|
||||
ffmpeg.terminate();
|
||||
});
|
||||
|
||||
it("should receive download progress events", async () => {
|
||||
const ffmpeg = new FFmpeg();
|
||||
let done = false;
|
||||
ffmpeg.on(FFmpeg.DOWNLOAD, ({ done: _done }) => {
|
||||
done = _done;
|
||||
});
|
||||
await ffmpeg.load({
|
||||
coreURL: CORE_URL,
|
||||
thread: FFMPEG_TYPE === "mt",
|
||||
});
|
||||
expect(done).to.be.true;
|
||||
ffmpeg.terminate();
|
||||
});
|
||||
});
|
||||
|
||||
describe(
|
||||
genName(
|
||||
"FFmpeg directory APIs (createDir(), listDir(), deleteDir(), rename())"
|
||||
),
|
||||
function () {
|
||||
let ffmpeg;
|
||||
|
||||
before(async () => {
|
||||
ffmpeg = await createFFmpeg();
|
||||
});
|
||||
|
||||
after(() => {
|
||||
ffmpeg.terminate();
|
||||
});
|
||||
|
||||
it("should list root dir", async () => {
|
||||
const files = await ffmpeg.listDir("/");
|
||||
expect(files).to.have.lengthOf(6);
|
||||
});
|
||||
|
||||
it("should create a dir", async () => {
|
||||
await ffmpeg.createDir("/dir1");
|
||||
const files = await ffmpeg.listDir("/");
|
||||
expect(files).to.include("dir1");
|
||||
});
|
||||
|
||||
it("should delete a dir", async () => {
|
||||
await ffmpeg.createDir("/dir2");
|
||||
await ffmpeg.deleteDir("/dir2");
|
||||
const files = await ffmpeg.listDir("/");
|
||||
expect(files).to.not.include("dir2");
|
||||
});
|
||||
|
||||
it("should rename a dir", async () => {
|
||||
await ffmpeg.createDir("/dir3");
|
||||
await ffmpeg.rename("/dir3", "/dir4");
|
||||
const files = await ffmpeg.listDir("/");
|
||||
expect(files).to.not.include("dir3");
|
||||
expect(files).to.include("dir4");
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
describe(
|
||||
genName(
|
||||
"FFmpeg files APIs (readFile(), writeFile(), deleteFile(), rename())"
|
||||
),
|
||||
function () {
|
||||
let ffmpeg;
|
||||
|
||||
before(async () => {
|
||||
ffmpeg = await createFFmpeg();
|
||||
});
|
||||
|
||||
after(() => {
|
||||
ffmpeg.terminate();
|
||||
});
|
||||
|
||||
it("should write/read a text file", async () => {
|
||||
const text = "foo";
|
||||
await ffmpeg.writeFile("/file1", text);
|
||||
const data = await ffmpeg.readFile("/file1", "utf8");
|
||||
const files = await ffmpeg.listDir("/");
|
||||
expect(files).to.include("file1");
|
||||
expect(data).to.equal(text);
|
||||
});
|
||||
|
||||
it("should write a binary file", async () => {
|
||||
const bin = [1, 2, 3];
|
||||
await ffmpeg.writeFile("/file2", Uint8Array.from(bin));
|
||||
const data = await ffmpeg.readFile("/file2");
|
||||
const files = await ffmpeg.listDir("/");
|
||||
expect(files).to.include("file2");
|
||||
expect(data).to.deep.equal(Uint8Array.from(bin));
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
describe(genName("FFmpeg.exec()"), function () {
|
||||
let ffmpeg;
|
||||
|
||||
before(async () => {
|
||||
ffmpeg = await createFFmpeg();
|
||||
await ffmpeg.writeFile("video.mp4", b64ToUint8Array(VIDEO_1S_MP4));
|
||||
});
|
||||
|
||||
after(() => {
|
||||
ffmpeg.terminate();
|
||||
});
|
||||
|
||||
it("should output help with exit code 0", async () => {
|
||||
let m;
|
||||
const listener = ({ message }) => {
|
||||
m = message;
|
||||
};
|
||||
ffmpeg.on(FFmpeg.LOG, listener);
|
||||
const ret = await ffmpeg.exec(["-h"]);
|
||||
expect(ret).to.equal(0);
|
||||
expect(m).to.be.a("string");
|
||||
ffmpeg.removeListener(FFmpeg.LOG, listener);
|
||||
});
|
||||
|
||||
it("should transcode mp4 to avi", async () => {
|
||||
let p;
|
||||
const listener = ({ progress }) => {
|
||||
p = progress;
|
||||
};
|
||||
ffmpeg.on(FFmpeg.PROGRESS, listener);
|
||||
const ret = await ffmpeg.exec(["-i", "video.mp4", "video.avi"]);
|
||||
expect(ret).to.equal(0);
|
||||
expect(p).to.equal(1);
|
||||
ffmpeg.removeListener(FFmpeg.PROGRESS, listener);
|
||||
});
|
||||
|
||||
it("should stop if timeout", async () => {
|
||||
const ret = await ffmpeg.exec(["-i", "video.mp4", "video.avi"], 1);
|
||||
expect(ret).to.equal(1);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user