Move tests to root

This commit is contained in:
Jerome Wu 2022-09-26 12:18:01 +08:00
parent c38ab7551b
commit 2f18a2d806
18 changed files with 1337 additions and 360 deletions

View File

@ -9,7 +9,7 @@
<video id="output-video" controls></video><br/>
<input type="file" id="uploader">
<p id="message"></p>
<script type="module">
<script>
const { fetchFile } = FFmpegUtil;
let ffmpeg = null;

1447
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,27 @@
{
"name": "root",
"private": true,
"scripts": {
"lint": "npm-run-all lint:*",
"lint:packages": "lerna run lint",
"lint:root": "eslint tests",
"test": "npm-run-all test:*:*",
"test:browser": "mocha-headless-chrome -a allow-file-access-from-files -a enable-features=SharedArrayBuffer",
"test:browser:mt": "npm run test:browser -- -f tests/*-mt.test.html",
"test:browser:st": "npm run test:browser -- -f tests/*-st.test.html",
"test:node": "mocha --exit --bail",
"test:node:mt": "npm run test:node -- --require tests/test-helper-mt.js tests/*.test.js",
"test:node:st": "npm run test:node -- --require tests/test-helper-st.js tests/*.test.js"
},
"workspaces": [
"packages/*",
"apps/*"
],
"devDependencies": {
"lerna": "^5.4.3"
"chai": "^4.3.6",
"lerna": "^5.4.3",
"mocha": "^10.0.0",
"mocha-headless-chrome": "^4.0.0",
"npm-run-all": "^4.1.5"
}
}

View File

@ -12,10 +12,7 @@
}
},
"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"
"lint": "eslint types"
},
"files": [
"dist",
@ -47,10 +44,7 @@
"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"
}
}

View File

@ -1,110 +0,0 @@
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");
});
});

View File

@ -1,10 +0,0 @@
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];
});

View File

@ -12,10 +12,7 @@
}
},
"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 -f tests/ffmpeg.test.html"
"lint": "eslint types"
},
"files": [
"dist",
@ -47,10 +44,7 @@
"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"
}
}

View File

@ -1,14 +0,0 @@
{
"extends": "eslint:recommended",
"globals": {
"expect": true,
"createFFmpeg": true,
"VIDEO_1S_MP4": true
},
"env": {
"node": true,
"commonjs": true,
"mocha": true,
"es2022": true
}
}

View File

@ -1,7 +0,0 @@
const VIDEO_1S_MP4 =
"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";
if (typeof module !== "undefined") {
module.exports = {
VIDEO_1S_MP4,
};
}

View File

@ -1,10 +0,0 @@
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];
});

View File

@ -3,7 +3,8 @@
"globals": {
"expect": true,
"createFFmpeg": true,
"VIDEO_1S_MP4": true
"VIDEO_1S_MP4": true,
"FFMPEG_TYPE": true
},
"env": {
"node": true,

View File

@ -3,14 +3,17 @@
<head>
<meta charset="UTF-8">
<title>FFmpeg Unit Test</title>
<link rel="stylesheet" href="../../../node_modules/mocha/mocha.css">
<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/umd/ffmpeg.js"></script>
<script src="../node_modules/mocha/mocha.js"></script>
<script src="../node_modules/chai/chai.js"></script>
<script src="../packages/ffmpeg-mt/dist/umd/ffmpeg.js"></script>
<script src="./constants.js"></script>
<script type="text/javascript">
window.FFMPEG_TYPE = "mt";
</script>
<script>mocha.setup('bdd');</script>
<script src="./ffmpeg.test.js"></script>
<script>

View File

@ -3,14 +3,17 @@
<head>
<meta charset="UTF-8">
<title>FFmpeg Unit Test</title>
<link rel="stylesheet" href="../../../node_modules/mocha/mocha.css">
<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/umd/ffmpeg.js"></script>
<script src="../node_modules/mocha/mocha.js"></script>
<script src="../node_modules/chai/chai.js"></script>
<script src="../packages/ffmpeg/dist/umd/ffmpeg.js"></script>
<script src="./constants.js"></script>
<script type="text/javascript">
window.FFMPEG_TYPE = "st";
</script>
<script>mocha.setup('bdd');</script>
<script src="./ffmpeg.test.js"></script>
<script>

View File

@ -1,5 +1,7 @@
let ffmpeg;
const genName = (name) => `[ffmpeg][${FFMPEG_TYPE}] ${name}`;
const b64ToUint8Array = (b64) => {
const bin = atob(b64);
const len = bin.length;
@ -21,19 +23,18 @@ before(async () => {
ffmpeg.FS.writeFile("video.mp4", b64ToUint8Array(VIDEO_1S_MP4));
});
describe("createFFmpeg()", () => {
describe(genName("createFFmpeg()"), () => {
it("should be OK", () => {
expect(ffmpeg).to.be.ok;
});
});
describe("reset()", () => {
describe(genName("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;
@ -45,7 +46,7 @@ describe("reset()", () => {
});
});
describe("exec()", () => {
describe(genName("exec()"), () => {
beforeEach(reset);
it("should exist", () => {
@ -64,7 +65,7 @@ describe("exec()", () => {
});
});
describe("setTimeout()", () => {
describe(genName("setTimeout()"), () => {
beforeEach(reset);
it("should exist", () => {
@ -77,7 +78,7 @@ describe("setTimeout()", () => {
});
});
describe("setLogger()", () => {
describe(genName("setLogger()"), () => {
beforeEach(reset);
it("should exist", () => {
@ -92,7 +93,7 @@ describe("setLogger()", () => {
});
});
describe("setProgress()", () => {
describe(genName("setProgress()"), () => {
beforeEach(reset);
it("should exist", () => {

11
tests/test-helper-mt.js Normal file
View File

@ -0,0 +1,11 @@
const chai = require("chai");
const constants = require("./constants");
global.expect = chai.expect;
global.createFFmpeg = require("../packages/ffmpeg-mt");
global.atob = require("./util").atob;
global.FFMPEG_TYPE = "mt";
Object.keys(constants).forEach((key) => {
global[key] = constants[key];
});

11
tests/test-helper-st.js Normal file
View File

@ -0,0 +1,11 @@
const chai = require("chai");
const constants = require("./constants");
global.expect = chai.expect;
global.createFFmpeg = require("../packages/ffmpeg");
global.atob = require("./util").atob;
global.FFMPEG_TYPE = "st";
Object.keys(constants).forEach((key) => {
global[key] = constants[key];
});

1
tests/util.js Normal file
View File

@ -0,0 +1 @@
exports.atob = (b64) => Buffer.from(b64, "base64").toString("binary");