Files
chimera-Public/test/y2jb-generator.test.js
T

55 lines
2.2 KiB
JavaScript

'use strict';
const assert = require('assert');
const fs = require('fs');
const os = require('os');
const path = require('path');
const { buildY2jbUpdate } = require('../src/y2jb-generator');
(async () => {
const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'porkfolio-y2jb-test-'));
const templateDir = path.join(tempRoot, 'template');
const workspaceDir = path.join(tempRoot, 'workspace');
const outputZip = path.join(tempRoot, 'y2jb_update.zip');
fs.mkdirSync(path.join(templateDir, 'ps5_autoloader'), { recursive: true });
fs.writeFileSync(path.join(templateDir, 'main.js'), 'console.log("template");\n');
fs.writeFileSync(path.join(templateDir, 'update.js'), 'console.log("update");\n');
fs.writeFileSync(path.join(templateDir, 'icon0.png'), Buffer.from([0x89, 0x50, 0x4e, 0x47]));
fs.writeFileSync(path.join(templateDir, 'ps5_autoloader', 'autoload.txt'), '# template\n');
const result = await buildY2jbUpdate({
templateDir,
workspaceDir,
outputZip,
entries: [
{ type: 'message', value: 'Starting test queue' },
{ type: 'delay', value: '750' },
{ type: 'payload', value: 'test-payload.elf' },
],
payloadFiles: [{ name: 'test-payload.elf', data: Buffer.from('test payload') }],
});
assert(fs.existsSync(outputZip), 'expected output ZIP');
assert.strictEqual(result.entryCount > 0, true, 'expected ZIP entries');
assert.deepStrictEqual(result.entries, [
'icon0.png',
'main.js',
'ps5_autoloader/',
'ps5_autoloader/autoload.txt',
'ps5_autoloader/test-payload.elf',
'update-info.txt',
'update.js',
]);
const archive = fs.readFileSync(outputZip);
assert(archive.includes(Buffer.from('ps5_autoloader/autoload.txt')), 'missing autoload manifest');
assert(!archive.includes(Buffer.from('ps5_autoloader\\autoload.txt')), 'ZIP must use forward slashes');
const manifest = result.updateInfo;
assert(manifest.includes('ps5_autoloader/test-payload.elf|12'));
assert.strictEqual(fs.readFileSync(path.join(workspaceDir, 'ps5_autoloader', 'autoload.txt'), 'utf8').includes('!750'), true);
console.log('y2jb generator test passed');
})().catch((error) => {
console.error(error);
process.exitCode = 1;
});