Files
feuerwerk/tools/e2e/index.mjs
T
adminandClaude Opus 5.5 cab1c0177f
game-maker / gate (push) Successful in 4m10s
game-maker / suite (push) Failing after 11m53s
Show only the game view in fullscreen, in the editor and the link (#267)
A game is easier to judge and to play without the editor around it.
The Game tab and the game link now both have a button that puts the
game view itself into fullscreen, not just the browser window.

- The Game tab header has a fullscreen button on the right. It hides
  toolbar, panels, tab headers and console and keeps the zoom from the
  picker. A running game keeps running.
- A corner button at the top right, or Esc, leaves fullscreen and puts
  the view back into the tab where it was.
- The game link shows the same corner button. Over a running game it
  hides after 2 s without mouse movement and returns on the next move.
- A click on the corner button never reaches the game.
- Stop ends fullscreen. Stop switches back to the Scene tab, and any
  switch away from the Game tab ends fullscreen, so no empty screen is
  left behind.
- src/viewport/fullscreen.ts wraps the Fullscreen API and holds the
  rule for when the button shows. FullscreenCorner.ts is the button
  used by both pages. Two SVG icons are new.
- Editor.showGameFullscreen moves the GameViewport into the root while
  fullscreen is on.

Tests:
- ./check.sh: 195 files, 2815 tests, exit 0 (3 new unit tests).
- e2e 60: 2 new checks for the corner button on the game link.
- e2e 61 (new): 4 checks for fullscreen in the editor.
- Full e2e run (local): ALL PASSED, 1580 checks.
- Counter-checks fail as expected: rule without "no game running",
  no stopPropagation (60h), no end on tab switch (61c), no reparenting
  of the view (61a).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 14:44:14 +02:00

131 lines
3.9 KiB
JavaScript

/**
* The e2e steps in the order they run. Each step is `async (t) => {}` over the harness
* toolbox; later steps rely on the scene state earlier ones leave behind (names given in
* the parenting step, the container created in the container step, …).
*/
import { hierarchy } from './01-hierarchy.mjs';
import { inspector } from './02-inspector.mjs';
import { play } from './03-play.mjs';
import { assets } from './04-assets.mjs';
import { drawing } from './05-drawing.mjs';
import { graph } from './06-graph.mjs';
import { parenting } from './07-parenting.mjs';
import { colliders } from './08-colliders.mjs';
import { containers } from './09-containers.mjs';
import { textAndEnabled } from './10-text-and-enabled.mjs';
import { menus } from './11-menus.mjs';
import { textures } from './12-textures.mjs';
import { frames } from './13-frames.mjs';
import { overflow } from './14-overflow.mjs';
import { aspect } from './15-aspect.mjs';
import { containerTab } from './16-container.mjs';
import { editorRun } from './17-editor-run.mjs';
import { pause } from './18-pause.mjs';
import { nestedBehavior } from './19-nested-behavior.mjs';
import { keyRepeat } from './20-key-repeat.mjs';
import { listTab } from './21-list.mjs';
import { structVariable } from './22-struct.mjs';
import { variableNodes } from './23-variable-nodes.mjs';
import { propertyNodes } from './24-property-nodes.mjs';
import { animation } from './25-animation.mjs';
import { stateMachine } from './26-state-machine.mjs';
import { consolePanel } from './27-console.mjs';
import { shader } from './28-shader.mjs';
import { transform } from './29-transform.mjs';
import { font } from './30-font.mjs';
import { particles } from './31-particles.mjs';
import { scope } from './32-scope.mjs';
import { renderOnChange } from './33-render-on-change.mjs';
import { sound } from './34-sound.mjs';
import { loadScene } from './35-load-scene.mjs';
import { graphGroups } from './36-graph-groups.mjs';
import { nineSlice } from './37-nine-slice.mjs';
import { plugins } from './38-plugins.mjs';
import { tile } from './39-tile.mjs';
import { tilemap } from './40-tilemap.mjs';
import { physics } from './41-physics.mjs';
import { shapes } from './42-shapes.mjs';
import { queries } from './43-queries.mjs';
import { documents } from './44-documents.mjs';
import { login } from './45-login.mjs';
import { topbar } from './46-topbar.mjs';
import { vectorArt } from './47-vectorart.mjs';
import { pixelArt } from './48-pixelart.mjs';
import { users } from './49-users.mjs';
import { snapshots } from './50-snapshots.mjs';
import { clipboard } from './51-clipboard.mjs';
import { hierarchyGroups } from './52-hierarchy-groups.mjs';
import { curves } from './53-curves.mjs';
import { structTypes } from './54-struct-types.mjs';
import { typedLists } from './55-typed-lists.mjs';
import { privateVariables } from './56-private-variables.mjs';
import { objectReferences } from './57-object-references.mjs';
import { clipAreas } from './58-clip-areas.mjs';
import { whilePlaying } from './59-while-playing.mjs';
import { release } from './60-release.mjs';
import { fullscreen } from './61-fullscreen.mjs';
export const STEPS = [
hierarchy,
inspector,
play,
assets,
drawing,
graph,
parenting,
colliders,
containers,
textAndEnabled,
menus,
textures,
frames,
overflow,
aspect,
containerTab,
editorRun,
pause,
nestedBehavior,
keyRepeat,
listTab,
structVariable,
variableNodes,
propertyNodes,
animation,
stateMachine,
consolePanel,
shader,
transform,
font,
particles,
scope,
renderOnChange,
sound,
loadScene,
graphGroups,
nineSlice,
plugins,
tile,
tilemap,
physics,
shapes,
queries,
documents,
login,
topbar,
vectorArt,
pixelArt,
users,
snapshots,
clipboard,
hierarchyGroups,
curves,
structTypes,
typedLists,
privateVariables,
objectReferences,
clipAreas,
whilePlaying,
release,
fullscreen,
];