Skip to content

feat: add reload() DSL simulating a browser refresh (F5) - #158

Draft
Artur- wants to merge 3 commits into
mainfrom
feature/reload-api
Draft

feat: add reload() DSL simulating a browser refresh (F5)#158
Artur- wants to merge 3 commits into
mainfrom
feature/reload-api

Conversation

@Artur-

@Artur- Artur- commented Aug 14, 2026

Copy link
Copy Markdown
Member

Adds reload() and reload(Class) to BaseBrowserlessTest, AbstractBrowserlessExtension and BrowserlessUIContext, delegating to a new BrowserlessDSL.reload(UI). A reload detaches the current UI and creates a fresh one in the same Vaadin session, then re-renders the current location; session-scoped state (attributes, security context) survives.

Crucially this makes @PreserveOnRefresh work. Flow keys its preserved- component cache on window.name, but the mock never set ExtendedClientDetails, so the window name was always null and the cache was never populated. MockVaadin.createUI now assigns every UI complete ExtendedClientDetails with a stable, non-null window name (carried across a reload via a new lastWindowName ThreadLocal, fresh unique name per new window) and a real screenWidth so retrieveExtendedClientDetails resolves synchronously. Preserved views now keep their instance and state across a reload; plain views are recreated.

Tests cover preserve-reuse, plain-reset, session survival and multi-window isolation.

Adds reload() and reload(Class) to BaseBrowserlessTest,
AbstractBrowserlessExtension and BrowserlessUIContext, delegating to a
new BrowserlessDSL.reload(UI). A reload detaches the current UI and
creates a fresh one in the same Vaadin session, then re-renders the
current location; session-scoped state (attributes, security context)
survives.

Crucially this makes @PreserveOnRefresh work. Flow keys its preserved-
component cache on window.name, but the mock never set
ExtendedClientDetails, so the window name was always null and the cache
was never populated. MockVaadin.createUI now assigns every UI complete
ExtendedClientDetails with a stable, non-null window name (carried
across a reload via a new lastWindowName ThreadLocal, fresh unique name
per new window) and a real screenWidth so retrieveExtendedClientDetails
resolves synchronously. Preserved views now keep their instance and
state across a reload; plain views are recreated.

Tests cover preserve-reuse, plain-reset, session survival and
multi-window isolation.
@Artur-

Artur- commented Aug 14, 2026

Copy link
Copy Markdown
Member Author

/format

@github-actions

This comment has been minimized.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: 🔎Iteration reviews

Development

Successfully merging this pull request may close these issues.

3 participants