Add tests
This commit is contained in:
parent
56e1f269cf
commit
6e9d91483e
14
Dockerfile
14
Dockerfile
@ -8,7 +8,7 @@ ARG FFMPEG_ST
|
||||
ARG FFMPEG_MT
|
||||
ENV INSTALL_DIR=/src/build
|
||||
ENV FFMPEG_VERSION=n5.1
|
||||
ENV X264_BRANCH=stable-wasm
|
||||
ENV X264_BRANCH=4-cores
|
||||
ENV CFLAGS="$CFLAGS $EXTRA_CFLAGS"
|
||||
ENV LDFLAGS="$LDFLAGS $CFLAGS $EXTRA_LDFLAGS"
|
||||
ENV EM_PKG_CONFIG_PATH=$EM_PKG_CONFIG_PATH:$INSTALL_DIR/lib/pkgconfig:/emsdk/upstream/emscripten/system/lib/pkgconfig
|
||||
@ -20,7 +20,7 @@ ENV FFMPEG_MT=$FFMPEG_MT
|
||||
FROM emsdk-base AS x264-builder
|
||||
ADD https://github.com/ffmpegwasm/x264.git#$X264_BRANCH /src
|
||||
COPY build/x264.sh /src/build.sh
|
||||
RUN bash /src/build.sh
|
||||
RUN bash -x /src/build.sh
|
||||
|
||||
# Base ffmpeg image with dependencies and source code populated.
|
||||
FROM emsdk-base AS ffmpeg-base
|
||||
@ -33,17 +33,17 @@ COPY --from=x264-builder $INSTALL_DIR $INSTALL_DIR
|
||||
# Build ffmpeg
|
||||
FROM ffmpeg-base AS ffmpeg-builder
|
||||
COPY build/ffmpeg.sh /src/build.sh
|
||||
RUN bash /src/build.sh
|
||||
RUN bash -x /src/build.sh
|
||||
|
||||
# Build ffmpeg.wasm
|
||||
FROM ffmpeg-builder AS ffmpeg-wasm-builder
|
||||
COPY src/bind /src/wasm/bind
|
||||
COPY src/fftools /src/wasm/fftools
|
||||
RUN mkdir -p /src/dist
|
||||
COPY build/ffmpeg-wasm.sh build.sh
|
||||
# FIXME: find a way to export both entry points in one command.
|
||||
RUN bash /src/build.sh -o dist/ffmpeg.cjs
|
||||
RUN bash /src/build.sh -sEXPORT_ES6 -o dist/ffmpeg.js
|
||||
RUN mkdir -p /src/dist/commonjs
|
||||
RUN bash -x /src/build.sh -o dist/commonjs/ffmpeg.js
|
||||
RUN mkdir -p /src/dist/esm
|
||||
RUN bash -x /src/build.sh -sEXPORT_ES6 -o dist/esm/ffmpeg.js
|
||||
|
||||
# Export ffmpeg-core.wasm to dist/, use `docker buildx build -o . .` to get assets
|
||||
FROM scratch AS exportor
|
||||
|
13
Makefile
13
Makefile
@ -1,8 +1,8 @@
|
||||
all: dev
|
||||
|
||||
MT_FLAGS := -sUSE_PTHREADS -pthread
|
||||
MT_LDFLAGS := -sPTHREAD_POOL_SIZE=8
|
||||
|
||||
DEV_ARGS := --progress=plain
|
||||
DEV_CFLAGS := --profiling
|
||||
DEV_MT_CFLAGS := $(DEV_CFLAGS) $(MT_FLAGS)
|
||||
PROD_CFLAGS := -O3 -msimd128
|
||||
@ -17,12 +17,12 @@ build:
|
||||
make clean PKG_SUFFIX="$(PKG_SUFFIX)"
|
||||
cp -r src/types/ffmpeg packages/ffmpeg$(PKG_SUFFIX)/types
|
||||
EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
|
||||
EXTRA_LDLAGS="$(EXTRA_LDLAGS)" \
|
||||
EXTRA_LDFLAGS="$(EXTRA_LDFLAGS)" \
|
||||
FFMPEG_ST="$(FFMPEG_ST)" \
|
||||
FFMPEG_MT="$(FFMPEG_MT)" \
|
||||
docker buildx build \
|
||||
--build-arg EXTRA_CFLAGS \
|
||||
--build-arg EXTRA_LDLAGS \
|
||||
--build-arg EXTRA_LDFLAGS \
|
||||
--build-arg FFMPEG_MT \
|
||||
--build-arg FFMPEG_ST \
|
||||
-o ./packages/ffmpeg$(PKG_SUFFIX) \
|
||||
@ -36,14 +36,13 @@ build-st:
|
||||
build-mt:
|
||||
make build \
|
||||
PKG_SUFFIX=-mt \
|
||||
FFMPEG_MT=yes \
|
||||
EXTRA_LDLAGS="$(MT_LDFLAGS)"
|
||||
FFMPEG_MT=yes
|
||||
|
||||
dev:
|
||||
make build-st EXTRA_CFLAGS="$(DEV_CFLAGS)"
|
||||
make build-st EXTRA_CFLAGS="$(DEV_CFLAGS)" EXTRA_ARGS="$(DEV_ARGS)"
|
||||
|
||||
dev-mt:
|
||||
make build-mt EXTRA_CFLAGS="$(DEV_MT_CFLAGS)"
|
||||
make build-mt EXTRA_CFLAGS="$(DEV_MT_CFLAGS)" EXTRA_ARGS="$(DEV_ARGS)"
|
||||
|
||||
prd:
|
||||
make build-st EXTRA_CFLAGS="$(PROD_CFLAGS)"
|
||||
|
@ -7,13 +7,7 @@ module.exports = {
|
||||
parser: "@typescript-eslint/parser",
|
||||
parserOptions: {
|
||||
tsconfigRootDir: __dirname,
|
||||
project: [
|
||||
"./tsconfig.eslint.json",
|
||||
"./packages/*/tsconfig.json",
|
||||
"./packages/*/tsconfig-*.json",
|
||||
"./apps/*/tsconfig.json",
|
||||
],
|
||||
project: ["./tsconfig.json"],
|
||||
},
|
||||
plugins: ["@typescript-eslint"],
|
||||
root: true,
|
||||
};
|
@ -32,6 +32,7 @@ CONF_FLAGS=(
|
||||
-sUSE_SDL=2 # use emscripten SDL2 lib port
|
||||
-sMODULARIZE # modularized to use as a library
|
||||
${FFMPEG_MT:+ -sINITIAL_MEMORY=1024MB} # ALLOW_MEMORY_GROWTH is not recommended when using threads, thus we use a large initial memory
|
||||
${FFMPEG_MT:+ -sPTHREAD_POOL_SIZE=32} # use 32 threads
|
||||
${FFMPEG_ST:+ -sINITIAL_MEMORY=32MB -sALLOW_MEMORY_GROWTH} # Use just enough memory as memory usage can grow
|
||||
-sEXPORT_NAME="$EXPORT_NAME" # required in browser env, so that user can access this module from window.createFFmpeg
|
||||
-sEXPORTED_FUNCTIONS=$(node wasm/bind/ffmpeg/export.js) # exported functions
|
||||
|
1289
package-lock.json
generated
1289
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
56
packages/ffmpeg-mt/package.json
Normal file
56
packages/ffmpeg-mt/package.json
Normal file
@ -0,0 +1,56 @@
|
||||
{
|
||||
"name": "@ffmpeg/ffmpeg-mt",
|
||||
"version": "0.11.5",
|
||||
"description": "FFmpeg WebAssembly version w/ multi-thread",
|
||||
"main": "./dist/commonjs/ffmpeg.js",
|
||||
"types": "./types/ffmpeg.d.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./types/ffmpeg.d.ts",
|
||||
"import": "./dist/esm/ffmpeg.js",
|
||||
"require": "./dist/commonjs/ffmpeg.js"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "eslint tests types",
|
||||
"test": "npm run test:browser && npm run test:node",
|
||||
"test:node": "mocha --exit --bail --require tests/test-helper.js tests/ffmpeg.test.js",
|
||||
"test:browser": "mocha-headless-chrome -a allow-file-access-from-files -a enable-features=SharedArrayBuffer -f tests/ffmpeg.test.html"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"types/ffmpeg.d.ts"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/ffmpegwasm/ffmpeg.wasm.git"
|
||||
},
|
||||
"keywords": [
|
||||
"ffmpeg",
|
||||
"WebAssembly",
|
||||
"video",
|
||||
"audio",
|
||||
"transcode"
|
||||
],
|
||||
"author": "Jerome Wu <jeromewus@gmail.com>",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/ffmpegwasm/ffmpeg.wasm/issues"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.6.0"
|
||||
},
|
||||
"homepage": "https://github.com/ffmpegwasm/ffmpeg.wasm#readme",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@typescript-eslint/eslint-plugin": "^5.37.0",
|
||||
"@typescript-eslint/parser": "^5.37.0",
|
||||
"chai": "^4.3.6",
|
||||
"eslint": "^8.23.1",
|
||||
"mocha": "^10.0.0",
|
||||
"mocha-headless-chrome": "^4.0.0",
|
||||
"typescript": "^4.8.3"
|
||||
}
|
||||
}
|
14
packages/ffmpeg-mt/tests/.eslintrc.json
Normal file
14
packages/ffmpeg-mt/tests/.eslintrc.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"extends": "eslint:recommended",
|
||||
"globals": {
|
||||
"expect": true,
|
||||
"createFFmpeg": true,
|
||||
"VIDEO_1S_MP4": true
|
||||
},
|
||||
"env": {
|
||||
"node": true,
|
||||
"commonjs": true,
|
||||
"mocha": true,
|
||||
"es2022": true
|
||||
}
|
||||
}
|
7
packages/ffmpeg-mt/tests/constants.js
Normal file
7
packages/ffmpeg-mt/tests/constants.js
Normal file
@ -0,0 +1,7 @@
|
||||
const VIDEO_1S_MP4 =
|
||||
"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";
|
||||
if (typeof module !== "undefined") {
|
||||
module.exports = {
|
||||
VIDEO_1S_MP4,
|
||||
};
|
||||
}
|
21
packages/ffmpeg-mt/tests/ffmpeg.test.html
Normal file
21
packages/ffmpeg-mt/tests/ffmpeg.test.html
Normal file
@ -0,0 +1,21 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>FFmpeg Unit Test</title>
|
||||
<link rel="stylesheet" href="../../../node_modules/mocha/mocha.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="mocha"></div>
|
||||
<script src="../../../node_modules/mocha/mocha.js"></script>
|
||||
<script src="../../../node_modules/chai/chai.js"></script>
|
||||
<script src="../dist/commonjs/ffmpeg.js"></script>
|
||||
<script src="./constants.js"></script>
|
||||
<script>mocha.setup('bdd');</script>
|
||||
<script src="./ffmpeg.test.js"></script>
|
||||
<script>
|
||||
window.expect = chai.expect;
|
||||
mocha.run();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
110
packages/ffmpeg-mt/tests/ffmpeg.test.js
Normal file
110
packages/ffmpeg-mt/tests/ffmpeg.test.js
Normal file
@ -0,0 +1,110 @@
|
||||
let ffmpeg;
|
||||
|
||||
const b64ToUint8Array = (b64) => {
|
||||
const bin = atob(b64);
|
||||
const len = bin.length;
|
||||
const bytes = new Uint8Array(len);
|
||||
for (let i = 0; i < len; i++) {
|
||||
bytes[i] = bin.charCodeAt(i);
|
||||
}
|
||||
return bytes;
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
ffmpeg.reset();
|
||||
ffmpeg.setLogger(() => {});
|
||||
ffmpeg.setProgress(() => {});
|
||||
};
|
||||
|
||||
before(async function () {
|
||||
this.timeout(0);
|
||||
ffmpeg = await createFFmpeg();
|
||||
ffmpeg.FS.writeFile("video.mp4", b64ToUint8Array(VIDEO_1S_MP4));
|
||||
});
|
||||
|
||||
describe("createFFmpeg()", () => {
|
||||
it("should be OK", () => {
|
||||
expect(ffmpeg).to.be.ok;
|
||||
});
|
||||
});
|
||||
|
||||
describe("reset()", () => {
|
||||
beforeEach(reset);
|
||||
|
||||
it("should exist", () => {
|
||||
expect("reset" in ffmpeg).to.be.true;
|
||||
});
|
||||
|
||||
it("should reset ret and timeout", () => {
|
||||
ffmpeg.ret = 1024;
|
||||
ffmpeg.timeout = 1024;
|
||||
|
||||
ffmpeg.reset();
|
||||
|
||||
expect(ffmpeg.ret).to.equal(-1);
|
||||
expect(ffmpeg.timeout).to.equal(-1);
|
||||
});
|
||||
});
|
||||
|
||||
describe("exec()", () => {
|
||||
beforeEach(reset);
|
||||
|
||||
it("should exist", () => {
|
||||
expect("exec" in ffmpeg).to.be.true;
|
||||
});
|
||||
|
||||
it("should output help", () => {
|
||||
expect(ffmpeg.exec(["-h"])).to.equal(0);
|
||||
});
|
||||
|
||||
it("should transcode", () => {
|
||||
expect(ffmpeg.exec(["-i", "video.mp4", "video.avi"])).to.equal(0);
|
||||
const out = ffmpeg.FS.readFile("video.avi");
|
||||
expect(out.length).to.not.equal(0);
|
||||
ffmpeg.FS.unlink("video.avi");
|
||||
});
|
||||
});
|
||||
|
||||
describe("setTimeout()", () => {
|
||||
beforeEach(reset);
|
||||
|
||||
it("should exist", () => {
|
||||
expect("setTimeout" in ffmpeg).to.be.true;
|
||||
});
|
||||
|
||||
it("should timeout", () => {
|
||||
ffmpeg.setTimeout(1); // timeout after 1ms
|
||||
expect(ffmpeg.exec(["-i", "video.mp4", "video.avi"])).to.equal(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe("setLogger()", () => {
|
||||
beforeEach(reset);
|
||||
|
||||
it("should exist", () => {
|
||||
expect("setLogger" in ffmpeg).to.be.true;
|
||||
});
|
||||
|
||||
it("should handle logs", () => {
|
||||
const logs = [];
|
||||
ffmpeg.setLogger(({ message }) => logs.push(message));
|
||||
ffmpeg.exec(["-h"]);
|
||||
expect(logs.length).to.not.equal(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe("setProgress()", () => {
|
||||
beforeEach(reset);
|
||||
|
||||
it("should exist", () => {
|
||||
expect("setProgress" in ffmpeg).to.be.true;
|
||||
});
|
||||
|
||||
it("should handle progress", () => {
|
||||
let progress = 0;
|
||||
ffmpeg.setProgress((_progress) => (progress = _progress));
|
||||
expect(ffmpeg.exec(["-i", "video.mp4", "video.avi"])).to.equal(0);
|
||||
expect(progress).to.equal(1);
|
||||
ffmpeg.FS.unlink("video.avi");
|
||||
});
|
||||
});
|
10
packages/ffmpeg-mt/tests/test-helper.js
Normal file
10
packages/ffmpeg-mt/tests/test-helper.js
Normal file
@ -0,0 +1,10 @@
|
||||
const chai = require("chai");
|
||||
const constants = require("../tests/constants");
|
||||
|
||||
global.expect = chai.expect;
|
||||
global.createFFmpeg = require("..");
|
||||
global.atob = (b64) => Buffer.from(b64, "base64").toString("binary");
|
||||
|
||||
Object.keys(constants).forEach((key) => {
|
||||
global[key] = constants[key];
|
||||
});
|
@ -1,3 +0,0 @@
|
||||
module.exports = {
|
||||
extends: "../../.eslintrc.cjs",
|
||||
};
|
@ -1,5 +0,0 @@
|
||||
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
|
||||
module.exports = {
|
||||
preset: 'ts-jest',
|
||||
testEnvironment: 'node',
|
||||
};
|
@ -2,18 +2,25 @@
|
||||
"name": "@ffmpeg/ffmpeg",
|
||||
"version": "0.11.5",
|
||||
"description": "FFmpeg WebAssembly version",
|
||||
"main": "./dist/ffmpeg.cjs",
|
||||
"main": "./dist/commonjs/ffmpeg.js",
|
||||
"types": "./types/ffmpeg.d.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./types/ffmpeg.d.ts",
|
||||
"import": "./dist/ffmpeg.js",
|
||||
"require": "./dist/ffmpeg.cjs"
|
||||
"import": "./dist/esm/ffmpeg.js",
|
||||
"require": "./dist/commonjs/ffmpeg.js"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jest"
|
||||
"lint": "eslint tests types",
|
||||
"test": "npm run test:browser && npm run test:node",
|
||||
"test:node": "mocha --exit --bail --require tests/test-helper.js tests/ffmpeg.test.js",
|
||||
"test:browser": "mocha-headless-chrome -a allow-file-access-from-files -f tests/ffmpeg.test.html"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"types/ffmpeg.d.ts"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/ffmpegwasm/ffmpeg.wasm.git"
|
||||
@ -31,19 +38,19 @@
|
||||
"url": "https://github.com/ffmpegwasm/ffmpeg.wasm/issues"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12.16.1"
|
||||
"node": ">=16.6.0"
|
||||
},
|
||||
"homepage": "https://github.com/ffmpegwasm/ffmpeg.wasm#readme",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^29.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "^5.37.0",
|
||||
"@typescript-eslint/parser": "^5.37.0",
|
||||
"chai": "^4.3.6",
|
||||
"eslint": "^8.23.1",
|
||||
"jest-puppeteer": "^6.1.1",
|
||||
"ts-jest": "^29.0.1",
|
||||
"mocha": "^10.0.0",
|
||||
"mocha-headless-chrome": "^4.0.0",
|
||||
"typescript": "^4.8.3"
|
||||
}
|
||||
}
|
||||
|
14
packages/ffmpeg/tests/.eslintrc.json
Normal file
14
packages/ffmpeg/tests/.eslintrc.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"extends": "eslint:recommended",
|
||||
"globals": {
|
||||
"expect": true,
|
||||
"createFFmpeg": true,
|
||||
"VIDEO_1S_MP4": true
|
||||
},
|
||||
"env": {
|
||||
"node": true,
|
||||
"commonjs": true,
|
||||
"mocha": true,
|
||||
"es2022": true
|
||||
}
|
||||
}
|
7
packages/ffmpeg/tests/constants.js
Normal file
7
packages/ffmpeg/tests/constants.js
Normal file
@ -0,0 +1,7 @@
|
||||
const VIDEO_1S_MP4 =
|
||||
"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";
|
||||
if (typeof module !== "undefined") {
|
||||
module.exports = {
|
||||
VIDEO_1S_MP4,
|
||||
};
|
||||
}
|
21
packages/ffmpeg/tests/ffmpeg.test.html
Normal file
21
packages/ffmpeg/tests/ffmpeg.test.html
Normal file
@ -0,0 +1,21 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>FFmpeg Unit Test</title>
|
||||
<link rel="stylesheet" href="../../../node_modules/mocha/mocha.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="mocha"></div>
|
||||
<script src="../../../node_modules/mocha/mocha.js"></script>
|
||||
<script src="../../../node_modules/chai/chai.js"></script>
|
||||
<script src="../dist/commonjs/ffmpeg.js"></script>
|
||||
<script src="./constants.js"></script>
|
||||
<script>mocha.setup('bdd');</script>
|
||||
<script src="./ffmpeg.test.js"></script>
|
||||
<script>
|
||||
window.expect = chai.expect;
|
||||
mocha.run();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
109
packages/ffmpeg/tests/ffmpeg.test.js
Normal file
109
packages/ffmpeg/tests/ffmpeg.test.js
Normal file
@ -0,0 +1,109 @@
|
||||
let ffmpeg;
|
||||
|
||||
const b64ToUint8Array = (b64) => {
|
||||
const bin = atob(b64);
|
||||
const len = bin.length;
|
||||
const bytes = new Uint8Array(len);
|
||||
for (let i = 0; i < len; i++) {
|
||||
bytes[i] = bin.charCodeAt(i);
|
||||
}
|
||||
return bytes;
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
ffmpeg.reset();
|
||||
ffmpeg.setLogger(() => {});
|
||||
ffmpeg.setProgress(() => {});
|
||||
};
|
||||
|
||||
before(async () => {
|
||||
ffmpeg = await createFFmpeg();
|
||||
ffmpeg.FS.writeFile("video.mp4", b64ToUint8Array(VIDEO_1S_MP4));
|
||||
});
|
||||
|
||||
describe("createFFmpeg()", () => {
|
||||
it("should be OK", () => {
|
||||
expect(ffmpeg).to.be.ok;
|
||||
});
|
||||
});
|
||||
|
||||
describe("reset()", () => {
|
||||
beforeEach(reset);
|
||||
|
||||
it("should exist", () => {
|
||||
expect("reset" in ffmpeg).to.be.true;
|
||||
});
|
||||
|
||||
it("should reset ret and timeout", () => {
|
||||
ffmpeg.ret = 1024;
|
||||
ffmpeg.timeout = 1024;
|
||||
|
||||
ffmpeg.reset();
|
||||
|
||||
expect(ffmpeg.ret).to.equal(-1);
|
||||
expect(ffmpeg.timeout).to.equal(-1);
|
||||
});
|
||||
});
|
||||
|
||||
describe("exec()", () => {
|
||||
beforeEach(reset);
|
||||
|
||||
it("should exist", () => {
|
||||
expect("exec" in ffmpeg).to.be.true;
|
||||
});
|
||||
|
||||
it("should output help", () => {
|
||||
expect(ffmpeg.exec(["-h"])).to.equal(0);
|
||||
});
|
||||
|
||||
it("should transcode", () => {
|
||||
expect(ffmpeg.exec(["-i", "video.mp4", "video.avi"])).to.equal(0);
|
||||
const out = ffmpeg.FS.readFile("video.avi");
|
||||
expect(out.length).to.not.equal(0);
|
||||
ffmpeg.FS.unlink("video.avi");
|
||||
});
|
||||
});
|
||||
|
||||
describe("setTimeout()", () => {
|
||||
beforeEach(reset);
|
||||
|
||||
it("should exist", () => {
|
||||
expect("setTimeout" in ffmpeg).to.be.true;
|
||||
});
|
||||
|
||||
it("should timeout", () => {
|
||||
ffmpeg.setTimeout(1); // timeout after 1ms
|
||||
expect(ffmpeg.exec(["-i", "video.mp4", "video.avi"])).to.equal(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe("setLogger()", () => {
|
||||
beforeEach(reset);
|
||||
|
||||
it("should exist", () => {
|
||||
expect("setLogger" in ffmpeg).to.be.true;
|
||||
});
|
||||
|
||||
it("should handle logs", () => {
|
||||
const logs = [];
|
||||
ffmpeg.setLogger(({ message }) => logs.push(message));
|
||||
ffmpeg.exec(["-h"]);
|
||||
expect(logs.length).to.not.equal(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe("setProgress()", () => {
|
||||
beforeEach(reset);
|
||||
|
||||
it("should exist", () => {
|
||||
expect("setProgress" in ffmpeg).to.be.true;
|
||||
});
|
||||
|
||||
it("should handle progress", () => {
|
||||
let progress = 0;
|
||||
ffmpeg.setProgress((_progress) => (progress = _progress));
|
||||
expect(ffmpeg.exec(["-i", "video.mp4", "video.avi"])).to.equal(0);
|
||||
expect(progress).to.equal(1);
|
||||
ffmpeg.FS.unlink("video.avi");
|
||||
});
|
||||
});
|
@ -1,34 +0,0 @@
|
||||
import type { FFmpegModule } from "..";
|
||||
import createFFmpeg from "..";
|
||||
|
||||
let core: FFmpegModule;
|
||||
|
||||
beforeAll(async () => {
|
||||
core = await createFFmpeg();
|
||||
});
|
||||
|
||||
describe("core", () => {
|
||||
test("core is ready", () => {
|
||||
expect(core).not.toBeUndefined();
|
||||
});
|
||||
|
||||
test("core functions are exported", () => {
|
||||
expect("NULL" in core).toBeTruthy();
|
||||
expect("SIZE_I32" in core).toBeTruthy();
|
||||
expect("exec" in core).toBeTruthy();
|
||||
expect("stringToPtr" in core).toBeTruthy();
|
||||
expect("stringsToPtr" in core).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
describe("stringToPtr()", () => {
|
||||
test("convert a string to pointer", () => {
|
||||
expect(core.stringToPtr("string")).not.toBe(core.NULL);
|
||||
});
|
||||
});
|
||||
|
||||
describe("stringsToPtr()", () => {
|
||||
test("convert a string array to pointer", () => {
|
||||
expect(core.stringsToPtr(["string"])).not.toBe(core.NULL);
|
||||
});
|
||||
});
|
10
packages/ffmpeg/tests/test-helper.js
Normal file
10
packages/ffmpeg/tests/test-helper.js
Normal file
@ -0,0 +1,10 @@
|
||||
const chai = require("chai");
|
||||
const constants = require("../tests/constants");
|
||||
|
||||
global.expect = chai.expect;
|
||||
global.createFFmpeg = require("..");
|
||||
global.atob = (b64) => Buffer.from(b64, "base64").toString("binary");
|
||||
|
||||
Object.keys(constants).forEach((key) => {
|
||||
global[key] = constants[key];
|
||||
});
|
@ -1,3 +0,0 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json"
|
||||
}
|
13
src/types/ffmpeg/.eslintrc.cjs
Normal file
13
src/types/ffmpeg/.eslintrc.cjs
Normal file
@ -0,0 +1,13 @@
|
||||
module.exports = {
|
||||
extends: [
|
||||
"eslint:recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"plugin:@typescript-eslint/recommended-requiring-type-checking",
|
||||
],
|
||||
parser: "@typescript-eslint/parser",
|
||||
parserOptions: {
|
||||
tsconfigRootDir: __dirname,
|
||||
project: ["../../../tsconfig.json"],
|
||||
},
|
||||
plugins: ["@typescript-eslint"],
|
||||
};
|
4
src/types/ffmpeg/ffmpeg.d.ts
vendored
4
src/types/ffmpeg/ffmpeg.d.ts
vendored
@ -29,10 +29,6 @@ export interface FFmpegModule {
|
||||
setLogger: (logger: (log: Log) => void) => void;
|
||||
setTimeout: (timeout: number) => void;
|
||||
setProgress: (handler: (progress: number) => void) => void;
|
||||
|
||||
_ffmpeg: (args: number, argv: StringArrayPointer) => number;
|
||||
stringToPtr: (str: string) => Pointer;
|
||||
stringsToPtr: (strs: string[]) => Pointer;
|
||||
}
|
||||
|
||||
declare function createFFmpeg(): Promise<FFmpegModule>;
|
||||
|
@ -1,14 +0,0 @@
|
||||
{
|
||||
// extend your base config to share compilerOptions, etc
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
// ensure that nobody can accidentally use this config for a build
|
||||
"noEmit": true
|
||||
},
|
||||
"include": [
|
||||
// whatever paths you intend to lint
|
||||
"packages/**/*",
|
||||
"apps/**/*",
|
||||
"src/bind/**/*"
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue
Block a user