mirror of https://github.com/nodejs/node.git
103 lines
2.6 KiB
JavaScript
103 lines
2.6 KiB
JavaScript
'use strict';
|
|
|
|
const { isSea, getAsset, getAssetAsBlob } = require('node:sea');
|
|
const { readFileSync } = require('node:fs');
|
|
const assert = require('node:assert');
|
|
|
|
assert(isSea());
|
|
|
|
// Test invalid getAsset() calls.
|
|
{
|
|
assert.throws(() => getAsset('utf8_test_text.txt', 'invalid'), {
|
|
code: 'ERR_ENCODING_NOT_SUPPORTED'
|
|
});
|
|
|
|
[
|
|
1,
|
|
1n,
|
|
Symbol(),
|
|
false,
|
|
() => {},
|
|
{},
|
|
[],
|
|
null,
|
|
undefined,
|
|
].forEach(arg => assert.throws(() => getAsset(arg), {
|
|
code: 'ERR_INVALID_ARG_TYPE'
|
|
}));
|
|
|
|
assert.throws(() => getAsset('nonexistent'), {
|
|
code: 'ERR_SINGLE_EXECUTABLE_APPLICATION_ASSET_NOT_FOUND'
|
|
});
|
|
}
|
|
|
|
// Test invalid getAssetAsBlob() calls.
|
|
{
|
|
// Invalid options argument.
|
|
[
|
|
123,
|
|
123n,
|
|
Symbol(),
|
|
'',
|
|
true,
|
|
].forEach(arg => assert.throws(() => {
|
|
getAssetAsBlob('utf8_test_text.txt', arg)
|
|
}, {
|
|
code: 'ERR_INVALID_ARG_TYPE'
|
|
}));
|
|
|
|
assert.throws(() => getAssetAsBlob('nonexistent'), {
|
|
code: 'ERR_SINGLE_EXECUTABLE_APPLICATION_ASSET_NOT_FOUND'
|
|
});
|
|
}
|
|
|
|
const textAssetOnDisk = readFileSync(process.env.__TEST_UTF8_TEXT_PATH, 'utf8');
|
|
const binaryAssetOnDisk = readFileSync(process.env.__TEST_PERSON_JPG);
|
|
|
|
// Check getAsset() buffer copies.
|
|
{
|
|
// Check that the asset embedded is the same as the original.
|
|
const assetCopy1 = getAsset('person.jpg')
|
|
const assetCopyBuffer1 = Buffer.from(assetCopy1);
|
|
assert.deepStrictEqual(assetCopyBuffer1, binaryAssetOnDisk);
|
|
|
|
const assetCopy2 = getAsset('person.jpg');
|
|
const assetCopyBuffer2 = Buffer.from(assetCopy2);
|
|
assert.deepStrictEqual(assetCopyBuffer2, binaryAssetOnDisk);
|
|
|
|
// Zero-fill copy1.
|
|
assetCopyBuffer1.fill(0);
|
|
|
|
// Test that getAsset() returns an immutable copy.
|
|
assert.deepStrictEqual(assetCopyBuffer2, binaryAssetOnDisk);
|
|
assert.notDeepStrictEqual(assetCopyBuffer1, binaryAssetOnDisk);
|
|
}
|
|
|
|
// Check getAsset() with encoding.
|
|
{
|
|
const actualAsset = getAsset('utf8_test_text.txt', 'utf8')
|
|
assert.strictEqual(actualAsset, textAssetOnDisk);
|
|
// Log it out so that the test could compare it and see if
|
|
// it's encoded/decoded correctly in the SEA.
|
|
console.log(actualAsset);
|
|
}
|
|
|
|
// Check getAssetAsBlob().
|
|
{
|
|
let called = false;
|
|
async function test() {
|
|
const blob = getAssetAsBlob('person.jpg');
|
|
const buffer = await blob.arrayBuffer();
|
|
assert.deepStrictEqual(Buffer.from(buffer), binaryAssetOnDisk);
|
|
const blob2 = getAssetAsBlob('utf8_test_text.txt');
|
|
const text = await blob2.text();
|
|
assert.strictEqual(text, textAssetOnDisk);
|
|
}
|
|
test().then(() => {
|
|
called = true;
|
|
});
|
|
process.on('exit', () => {
|
|
assert(called);
|
|
});
|
|
}
|