Files
feuerwerk/tests/editor/open-asset.test.ts
T
rootandClaude Fable 5.1 4d9c4982eb
game-maker / suite (push) Failing after 8m11s
Asset panel: double-click opens the tab, single click only selects (#71)
One rule for every asset type: a click on an asset row selects it, a
double-click (or Enter, or creating it via +) opens its tab. Selection
alone still switches tabs only for nodes, frames and template objects.

- state.openAsset(id) = select + 'open' event; the editor maps the asset
  type to its tab via TAB_OF_ASSET. The two special clauses for state
  machine and shader assets in the selection handler are gone.
- Creating via + and importing a texture from the picker open the tab;
  paste/drop of an image only selects.
- 3 unit tests (event order, re-open of a selected asset, selection never
  fires open), 14 e2e checks in step 4.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-13 12:10:21 +02:00

44 lines
1.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Opening an asset (double-click, Enter, creating one) is selecting it plus a request for its tab.
* The editor switches on `open`, never on `selection` alone – so the order and the "already
* selected" case are what matter here.
*/
import { describe, expect, it } from 'vitest';
import { CreateAssetCommand } from '../../src/core/commands/assetCommands';
import { createEmptyProject } from '../../src/core/model/Project';
import { EditorState } from '../../src/editor/state';
function setup(): { state: EditorState; assetId: string; events: string[] } {
const state = new EditorState();
state.loadProject(createEmptyProject('p', 'P'), 1);
const create = new CreateAssetCommand('behavior', 'B');
expect(state.execute(create)).toBe(true);
const events: string[] = [];
state.on('selection', () => events.push('selection'));
state.on('open', () => events.push('open'));
return { state, assetId: create.asset.id, events };
}
describe('opening an asset', () => {
it('selects it first and asks for the tab after, so the tab finds the selection in place', () => {
const { state, assetId, events } = setup();
state.openAsset(assetId);
expect(state.selection).toEqual({ kind: 'asset', assetId });
expect(events).toEqual(['selection', 'open']);
});
it('still asks for the tab when the asset was selected already – a click did not open it', () => {
const { state, assetId, events } = setup();
state.select({ kind: 'asset', assetId });
events.length = 0;
state.openAsset(assetId);
expect(events).toEqual(['open']);
});
it('never fires on a plain selection', () => {
const { state, assetId, events } = setup();
state.select({ kind: 'asset', assetId });
expect(events).toEqual(['selection']);
});
});