diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/BrowserImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/BrowserImpl.java index a6c36e662..9f5f0604b 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/BrowserImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/BrowserImpl.java @@ -33,7 +33,8 @@ import static com.microsoft.playwright.impl.Utils.*; class BrowserImpl extends ChannelOwner implements Browser { - final Set contexts = new HashSet<>(); + // Insertion order, so that browser.contexts() lists the contexts in creation order like the other clients. + final Set contexts = new LinkedHashSet<>(); private final ListenerCollection listeners = new ListenerCollection<>(); boolean isConnectedOverWebSocket; private boolean isConnected = true; diff --git a/playwright/src/test/java/com/microsoft/playwright/TestBrowser1.java b/playwright/src/test/java/com/microsoft/playwright/TestBrowser1.java index 1ae59b41e..bc1acd1b5 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestBrowser1.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestBrowser1.java @@ -22,6 +22,8 @@ import com.microsoft.playwright.fixtures.PlaywrightTest; import org.junit.jupiter.api.Tag; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Pattern; @@ -46,6 +48,21 @@ void shouldCreateNewPage(Browser browser) { assertEquals(0, browser.contexts().size()); } + @PlaywrightTest + void shouldListContextsInCreationOrder(Browser browser) { + List contexts = new ArrayList<>(); + for (int i = 0; i < 5; i++) { + contexts.add(browser.newContext()); + } + assertEquals(contexts, browser.contexts()); + contexts.remove(2).close(); + assertEquals(contexts, browser.contexts()); + for (BrowserContext context : contexts) { + context.close(); + } + assertEquals(0, browser.contexts().size()); + } + @PlaywrightTest void shouldThrowUponSecondCreateNewPage(Browser browser) { Page page = browser.newPage();