Files
SpineViewer/tests/preview-settings.test.js
2026-09-10 13:53:43 +08:00

27 lines
1.5 KiB
JavaScript

'use strict';
const assert = require('node:assert/strict');
const fs = require('fs');
const path = require('path');
const os = require('os');
const { createStore } = require('../js/spine-preview-settings');
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'spine-settings-test-'));
try {
const userData = path.join(root, 'settings');
const source = path.join(root, 'A.library', 'images', 'ITEM.info', 'hero.skel.bytes');
const store = createStore(userData, source);
assert.equal(store.read(), undefined);
assert.equal(fs.existsSync(userData), false, 'opening an item must not create metadata');
store.write(true);
assert.deepEqual(JSON.parse(fs.readFileSync(store.file)), { premultipliedAlpha: true });
assert.equal(createStore(userData, source).read(), true);
// Asset rename preserves the Eagle item identity.
assert.equal(createStore(userData, path.join(path.dirname(source), 'renamed.skel.bytes')).read(), true);
store.write(false);
assert.equal(createStore(userData, source).read(), false, 'false must not be treated as unset');
assert.equal(createStore(userData, source.replace('ITEM.info', 'OTHER.info')).read(), undefined);
assert.equal(createStore(userData, source.replace('A.library', 'B.library')).read(), undefined);
assert.throws(() => store.write('false'), TypeError);
assert.equal(fs.existsSync(path.dirname(source)), false, 'never modify Eagle metadata');
console.log('PASS: no default writes, explicit true/false, reopening, rename and library isolation');
} finally { fs.rmSync(root, { recursive: true, force: true }); }