tweaks and improvements

This commit is contained in:
2026-09-29 01:58:15 +02:00
parent 61df6bb0d3
commit 53a5c47549
4 changed files with 166 additions and 31 deletions
+39 -1
View File
@@ -13,6 +13,7 @@ function createHarness() {
const dialogs = [];
const exports = [];
const errors = [];
let formResult;
const project = { multiactor_actor_names: JSON.stringify({ 1: 'player', 2: 'wolf' }) };
const context = {
Project: project,
@@ -20,6 +21,7 @@ function createHarness() {
Dialog: class {
constructor(options) { this.options = options; dialogs.push(options); }
show() {}
getFormResult() { return formResult ?? defaults(this.options.form); }
},
Blockbench: {
export(options, callback) { exports.push(JSON.parse(options.content)); callback(); },
@@ -43,7 +45,7 @@ function createHarness() {
context.adTest.showAnimationDefinitionReviewDialog(group, analysis);
return dialogs.at(-1);
}
return { open, exports, errors, project, analysis };
return { open, exports, errors, project, analysis, setFormResult(result) { formResult = result; } };
}
function defaults(form) {
@@ -52,6 +54,42 @@ function defaults(form) {
.map(([key, field]) => [key, field.value]));
}
test('Save retains definition fields in the project without exporting and restores them on reopen', () => {
const h = createHarness(), dialog = h.open(), result = defaults(dialog.form);
assert.deepEqual(Array.from(dialog.buttons), ['Cancel', 'Save', 'Create Animdef']);
assert.equal(dialog.confirmIndex, 2);
result.display_name = 'Saved definition';
result.content_tags = 'saved, tags';
result.weight = '3';
result.stub_stage_1_peaked = true;
result.stub_stage_2_peaked = false;
h.setFormResult(result);
assert.equal(dialog.onButton(1), false);
assert.equal(h.exports.length, 0);
assert.deepEqual(h.errors, []);
assert.equal(h.project.saved, false);
const reopened = h.open();
assert.equal(reopened.form.display_name.value, result.display_name);
assert.equal(reopened.form.content_tags.value, result.content_tags);
assert.equal(reopened.form.weight.value, 3);
assert.equal(reopened.form.stub_stage_1_peaked.value, true);
assert.equal(reopened.form.stub_stage_2_peaked.value, false);
assert.equal(reopened.onConfirm(defaults(reopened.form)), true);
assert.equal(h.exports[0].display_name, result.display_name);
});
test('invalid Save leaves previously saved fields intact', () => {
const h = createHarness(), dialog = h.open(), result = defaults(dialog.form);
result.display_name = 'Original';
h.setFormResult(result); dialog.onButton(1);
const original = h.project.animationdirector_animdef_definitions;
h.setFormResult({ ...result, display_name: 'Invalid', weight: '0' });
dialog.onButton(1);
assert.equal(h.project.animationdirector_animdef_definitions, original);
assert.equal(h.exports.length, 0);
assert.equal(h.errors.length, 1);
});
test('metadata-only playback stages remain editable and survive definition export', () => {
const h = createHarness();
h.analysis.stages = h.analysis.stages.slice(0, 1);