improvements
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
const assert = require('node:assert/strict');
|
||||
const fs = require('node:fs');
|
||||
const os = require('node:os');
|
||||
const path = require('node:path');
|
||||
const test = require('node:test');
|
||||
const vm = require('node:vm');
|
||||
@@ -83,7 +84,7 @@ function harness() {
|
||||
on(names, listener) { for (const name of names.split(' ')) events.set(name, listener); },
|
||||
addCSS() { return { delete() {} }; },
|
||||
showQuickMessage() {}, showMessageBox(options) { errors.push(options.message); } },
|
||||
console,
|
||||
Buffer, requireNativeModule: require, console,
|
||||
};
|
||||
vm.runInNewContext(source, context);
|
||||
return { ...context.blockTest, context, project, dialogs, exports, errors, edits, events, previewEvents, timers, previewUpdates, menus, Group, Cube };
|
||||
@@ -173,13 +174,15 @@ test('import prefills generator fields, builds guides and retains fields without
|
||||
test('import maps explicit labels before positional fallbacks and updates actor references', () => {
|
||||
const h = harness();
|
||||
const source = { actors: [{ label: 'wolf', injector: 'V', injects_into: 'bottom' },
|
||||
{ label: 'bottom', receiver: true }], stages: [{ stage: 1 }, { stage: 2 }], position_anchor_actor: 'bottom' };
|
||||
{ label: 'bottom', receiver: true }], stages: [{ stage: 1, props: { bottom: { prop_right: 'minecraft:carrot' } } },
|
||||
{ stage: 2 }], position_anchor_actor: 'bottom' };
|
||||
const definition = h.prepareAnimationDefinitionImport(source, importAnalysis());
|
||||
assert.equal(definition.actors[0].label, 'player');
|
||||
assert.equal(definition.actors[0].receiver, true);
|
||||
assert.equal(definition.actors[1].label, 'wolf');
|
||||
assert.deepEqual(Array.from(definition.actors[1].injects_into), ['player']);
|
||||
assert.equal(definition.position_anchor_actor, 'player');
|
||||
assert.equal(definition.stages[0].props.player.prop_right, 'minecraft:carrot');
|
||||
assert.equal(source.actors[1].label, 'bottom', 'Input JSON is not mutated');
|
||||
const positional = h.prepareAnimationDefinitionImport({ actors: [{ receiver: true }, { injector: 'V' }],
|
||||
stages: [{ stage: 1 }, { stage: 2 }] }, importAnalysis());
|
||||
@@ -187,6 +190,25 @@ test('import maps explicit labels before positional fallbacks and updates actor
|
||||
assert.equal(positional.actors[1].label, 'wolf');
|
||||
});
|
||||
|
||||
test('manual definition import embeds item prop previews in the same undoable edit', (t) => {
|
||||
const h = harness(), root = fs.mkdtempSync(path.join(os.tmpdir(),'ad-manual-props-'));
|
||||
t.after(() => fs.rmSync(root,{recursive:true,force:true}));
|
||||
const write=(relative,data)=>{ const file=path.join(root,relative); fs.mkdirSync(path.dirname(file),{recursive:true});
|
||||
fs.writeFileSync(file,typeof data==='string'?data:JSON.stringify(data)); };
|
||||
write('assets/minecraft/items/carrot.json',{model:{type:'minecraft:model',model:'minecraft:item/carrot'}});
|
||||
write('assets/minecraft/models/item/carrot.json',{parent:'minecraft:builtin/generated',textures:{layer0:'minecraft:item/carrot'}});
|
||||
write('assets/minecraft/textures/item/carrot.png','image');
|
||||
h.applyAnimationDefinitionImport({id:'test'},importAnalysis(),{
|
||||
actors:[{label:'player',prop_right:'minecraft:carrot'},{label:'wolf'}],
|
||||
stages:[{stage:1},{stage:2,props:{player:{prop_right:null}}}],
|
||||
},[root]);
|
||||
const previews=JSON.parse(h.project.animationdirector_prop_previews);
|
||||
assert.equal(previews['["test","player","right",0]'].item,'minecraft:carrot');
|
||||
assert.equal(previews['["test","player","right",2]'].mode,'hidden');
|
||||
assert.equal(h.edits.at(-1).aspects.prop_preview_edit,true);
|
||||
assert.equal(h.edits.at(-1).post.prop_preview_edit,true);
|
||||
});
|
||||
|
||||
test('invalid imports leave definitions and guides unchanged', () => {
|
||||
const h = harness();
|
||||
h.rebuildBlockRequirementGuides('test', h.readBlockRequirementForm(wallForm()));
|
||||
|
||||
Reference in New Issue
Block a user