diff --git a/test-remap.js b/test-remap.js new file mode 100644 index 0000000..f5263e3 --- /dev/null +++ b/test-remap.js @@ -0,0 +1,89 @@ +/** + * Test script for the .prproj remapper. + * Run: node test-remap.js + */ + +const fs = require('fs'); +const path = require('path'); +const { remapPrproj, analyzePrproj } = require('./prproj-remapper'); + +async function main() { + const inputFile = process.argv[2]; + if (!inputFile) { + console.error('Usage: node test-remap.js '); + process.exit(1); + } + + console.log(`\n=== .prproj Remapper Test ===\n`); + console.log(`Input: ${inputFile}\n`); + + const buffer = fs.readFileSync(inputFile); + + // Step 1: Analyze + console.log('--- Analysis ---'); + const analysis = await analyzePrproj(buffer); + console.log(` Total media blocks: ${analysis.totalMediaBlocks}`); + console.log(` .gves references: ${analysis.gvesReferences}`); + console.log(` High-res references: ${analysis.hiresReferences}`); + console.log(` Mapped pairs: ${analysis.mappedPairs}`); + console.log(` Unmapped .gves: ${analysis.unmappedGves}`); + console.log(` High-res formats: ${analysis.hiresFormats.join(', ')}`); + console.log(''); + + console.log('--- Mappings ---'); + for (const m of analysis.mappings) { + const gvesShort = m.gvesPath.split('\\').pop(); + const hiresShort = m.hiresPath.split('\\').pop(); + console.log(` ${gvesShort}`); + console.log(` → ${hiresShort} (.${m.hiresExtension})`); + } + console.log(''); + + // Step 2: Remap + console.log('--- Remapping ---'); + const result = await remapPrproj(buffer); + console.log(` Swaps performed: ${result.report.swapsPerformed}`); + for (const s of result.report.swaps) { + console.log(` ${s.oldPath.split('\\').pop()} → ${s.newPath.split('\\').pop()}`); + } + + if (result.report.unmappedGves.length) { + console.log(`\n ⚠ Unmapped .gves files:`); + for (const u of result.report.unmappedGves) { + console.log(` ${u.path}`); + } + } + + // Step 3: Write output for verification + const outputFile = inputFile.replace('.prproj', '_remapped.prproj'); + fs.writeFileSync(outputFile, result.buffer); + console.log(`\n--- Output ---`); + console.log(` Written to: ${outputFile}`); + console.log(` Size: ${(result.buffer.length / 1024).toFixed(1)} KB`); + + // Step 4: Verify by decompressing output and checking for remaining .gves refs + const zlib = require('zlib'); + const outputXml = zlib.gunzipSync(result.buffer).toString('utf-8'); + const remainingGves = (outputXml.match(/\.gves/g) || []).length; + const hiresRefs = (outputXml.match(/\\\\172\.18\.210\.5/g) || []).length; + + console.log(`\n--- Verification ---`); + console.log(` Remaining .gves references in output: ${remainingGves}`); + console.log(` High-res UNC path references in output: ${hiresRefs}`); + + if (remainingGves > 0) { + // Check what still references .gves + const gvesLines = outputXml.split('\n').filter(l => l.includes('.gves')); + console.log(`\n Remaining .gves lines (may be in Name tags only - expected):`); + for (const line of gvesLines.slice(0, 5)) { + console.log(` ${line.trim()}`); + } + } + + console.log(`\n=== Done ===\n`); +} + +main().catch(err => { + console.error('Error:', err); + process.exit(1); +});