55 lines
2.2 KiB
JavaScript
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;
|
|
});
|