const fs = require("fs");
const path = require("path");
const assert = require("assert");
const pconvert = require("../../pkg/pconvert_rust.js");
const TEST_ASSETS = path.resolve("assets/test");
describe("NodeJS WASM", async function() {
this.timeout(30000);
describe("#getModuleConstants", function() {
it("should have known module constants", () => {
const constants = pconvert.getModuleConstants();
const mandatoryKeys = [
"ALGORITHMS",
"COMPILATION_DATE",
"COMPILATION_TIME",
"COMPILER",
"COMPILER_VERSION",
"COMPRESSION_TYPES",
"FEATURES",
"FILTER_TYPES",
"LIBPNG_VERSION",
"PLATFORM_CPU_BITS",
"VERSION"
];
assert.deepStrictEqual(mandatoryKeys, Object.keys(constants));
});
});
describe("#blendMultipleFs", function() {
it("should blend multiple files from local file system", () => {
const paths = [
path.resolve(`${TEST_ASSETS}/sole.png`),
path.resolve(`${TEST_ASSETS}/back.png`),
path.resolve(`${TEST_ASSETS}/front.png`),
path.resolve(`${TEST_ASSETS}/shoelace.png`),
path.resolve(`${TEST_ASSETS}/background_alpha.png`)
];
const out = path.resolve(`${TEST_ASSETS}/result_alpha_alpha_Fast_NoFilter.png`);
const algorithm = "alpha";
const algorithms = ["alpha", "multiplicative", "destination_over", "source_over"];
pconvert.blendMultipleFs(paths, out, algorithm, algorithms, true);
assert(fs.existsSync(out));
});
it("should blend multiple files from local file system with no algorithm specified", () => {
const paths = [
path.resolve(`${TEST_ASSETS}/sole.png`),
path.resolve(`${TEST_ASSETS}/back.png`),
path.resolve(`${TEST_ASSETS}/front.png`),
path.resolve(`${TEST_ASSETS}/shoelace.png`),
path.resolve(`${TEST_ASSETS}/background_alpha.png`)
];
const out = path.resolve(`${TEST_ASSETS}/result_alpha_alpha_Fast_NoFilter.png`);
const algorithm = null;
const algorithms = null;
pconvert.blendMultipleFs(paths, out, algorithm, algorithms, true);
assert(fs.existsSync(out));
});
});
describe("#blendMultipleFsAsync", function() {
it("should asynchronously blend multiple files from local file system", async () => {
const paths = [
path.resolve(`${TEST_ASSETS}/sole.png`),
path.resolve(`${TEST_ASSETS}/back.png`),
path.resolve(`${TEST_ASSETS}/front.png`),
path.resolve(`${TEST_ASSETS}/shoelace.png`),
path.resolve(`${TEST_ASSETS}/background_alpha.png`)
];
const out = path.resolve(`${TEST_ASSETS}/result_alpha_alpha_Fast_NoFilter.png`);
const algorithm = "alpha";
const algorithms = ["alpha", "multiplicative", "destination_over", "source_over"];
await pconvert.blendMultipleFsAsync(paths, out, algorithm, algorithms, true);
assert(fs.existsSync(out), `Expected final composition to be at ${out}`);
});
it("should asynchronously blend multiple files from local file system with no algorithm specified", async () => {
const paths = [
path.resolve(`${TEST_ASSETS}/sole.png`),
path.resolve(`${TEST_ASSETS}/back.png`),
path.resolve(`${TEST_ASSETS}/front.png`),
path.resolve(`${TEST_ASSETS}/shoelace.png`),
path.resolve(`${TEST_ASSETS}/background_alpha.png`)
];
const out = path.resolve(`${TEST_ASSETS}/result_alpha_alpha_Fast_NoFilter.png`);
const algorithm = null;
const algorithms = null;
await pconvert.blendMultipleFsAsync(paths, out, algorithm, algorithms, true);
assert(fs.existsSync(out), `Expected final composition to be at ${out}`);
});
});
});