diff --git a/playwright/src/main/java/com/microsoft/playwright/Browser.java b/playwright/src/main/java/com/microsoft/playwright/Browser.java index 4684e2cb3..c87963e03 100644 --- a/playwright/src/main/java/com/microsoft/playwright/Browser.java +++ b/playwright/src/main/java/com/microsoft/playwright/Browser.java @@ -1448,7 +1448,7 @@ default Page newPage() { * @param title Title of the browser server, used for identification. * @since v1.59 */ - default Bind bind(String title) { + default BindResult bind(String title) { return bind(title, null); } /** @@ -1457,7 +1457,7 @@ default Bind bind(String title) { * @param title Title of the browser server, used for identification. * @since v1.59 */ - Bind bind(String title, BindOptions options); + BindResult bind(String title, BindOptions options); /** * NOTE: This API controls Chromium Tracing * which is a low-level chromium-specific debugging tool. API to control pausedStateChangedHandlers = new ArrayList<>(); - private PausedDetails pausedDetails; + private DebuggerPausedDetails pausedDetails; DebuggerImpl(ChannelOwner parent, String type, String guid, JsonObject initializer) { super(parent, type, guid, initializer); @@ -38,7 +38,7 @@ class DebuggerImpl extends ChannelOwner implements Debugger { protected void handleEvent(String event, JsonObject params) { if ("pausedStateChanged".equals(event)) { if (params.has("pausedDetails") && !params.get("pausedDetails").isJsonNull()) { - pausedDetails = gson().fromJson(params.get("pausedDetails"), PausedDetails.class); + pausedDetails = gson().fromJson(params.get("pausedDetails"), DebuggerPausedDetails.class); } else { pausedDetails = null; } @@ -59,7 +59,7 @@ public void offPausedStateChanged(Runnable handler) { } @Override - public PausedDetails pausedDetails() { + public DebuggerPausedDetails pausedDetails() { return pausedDetails; } diff --git a/playwright/src/main/java/com/microsoft/playwright/options/Bind.java b/playwright/src/main/java/com/microsoft/playwright/options/BindResult.java similarity index 96% rename from playwright/src/main/java/com/microsoft/playwright/options/Bind.java rename to playwright/src/main/java/com/microsoft/playwright/options/BindResult.java index 51a781810..11e128212 100644 --- a/playwright/src/main/java/com/microsoft/playwright/options/Bind.java +++ b/playwright/src/main/java/com/microsoft/playwright/options/BindResult.java @@ -16,7 +16,7 @@ package com.microsoft.playwright.options; -public class Bind { +public class BindResult { public String endpoint; } \ No newline at end of file diff --git a/playwright/src/main/java/com/microsoft/playwright/options/PausedDetails.java b/playwright/src/main/java/com/microsoft/playwright/options/DebuggerPausedDetails.java similarity index 94% rename from playwright/src/main/java/com/microsoft/playwright/options/PausedDetails.java rename to playwright/src/main/java/com/microsoft/playwright/options/DebuggerPausedDetails.java index 34a2e3986..95a3ff595 100644 --- a/playwright/src/main/java/com/microsoft/playwright/options/PausedDetails.java +++ b/playwright/src/main/java/com/microsoft/playwright/options/DebuggerPausedDetails.java @@ -16,7 +16,7 @@ package com.microsoft.playwright.options; -public class PausedDetails { +public class DebuggerPausedDetails { public Location location; public String title; diff --git a/playwright/src/test/java/com/microsoft/playwright/TestBrowserBind.java b/playwright/src/test/java/com/microsoft/playwright/TestBrowserBind.java index b34b69aa9..b849293ed 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestBrowserBind.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestBrowserBind.java @@ -16,7 +16,7 @@ package com.microsoft.playwright; -import com.microsoft.playwright.options.Bind; +import com.microsoft.playwright.options.BindResult; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@ -24,7 +24,7 @@ public class TestBrowserBind extends TestBase { @Test void shouldBindAndUnbindBrowser() { - Bind serverInfo = browser.bind("default"); + BindResult serverInfo = browser.bind("default"); try { assertNotNull(serverInfo); assertNotNull(serverInfo.endpoint); @@ -36,7 +36,7 @@ void shouldBindAndUnbindBrowser() { @Test void shouldBindWithCustomTitleAndOptions() { - Bind serverInfo = browser.bind("my-title", + BindResult serverInfo = browser.bind("my-title", new Browser.BindOptions().setHost("127.0.0.1").setPort(0)); try { assertNotNull(serverInfo); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestDebugger.java b/playwright/src/test/java/com/microsoft/playwright/TestDebugger.java index 189b6aba5..91961d1c5 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestDebugger.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestDebugger.java @@ -16,7 +16,7 @@ package com.microsoft.playwright; -import com.microsoft.playwright.options.PausedDetails; +import com.microsoft.playwright.options.DebuggerPausedDetails; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@ -40,7 +40,7 @@ void shouldPauseAtNextAndResume() { dbg.onPausedStateChanged(() -> { if (!paused[0]) { paused[0] = true; - PausedDetails details = dbg.pausedDetails(); + DebuggerPausedDetails details = dbg.pausedDetails(); assertNotNull(details); assertTrue(details.title.contains("Click"), "title: " + details.title); dbg.resume(); @@ -63,7 +63,7 @@ void shouldStepWithNext() { dbg.onPausedStateChanged(() -> { if (!paused[0]) { paused[0] = true; - PausedDetails details = dbg.pausedDetails(); + DebuggerPausedDetails details = dbg.pausedDetails(); assertNotNull(details); assertTrue(details.title.contains("Click"), "title: " + details.title); dbg.next(); @@ -88,7 +88,7 @@ void shouldPauseAtPauseCall() { dbg.onPausedStateChanged(() -> { if (!paused[0]) { paused[0] = true; - PausedDetails details = dbg.pausedDetails(); + DebuggerPausedDetails details = dbg.pausedDetails(); assertNotNull(details); assertTrue(details.title.contains("Pause"), "title: " + details.title); dbg.resume(); diff --git a/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java b/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java index 1b8fdfddf..14a860afe 100644 --- a/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java +++ b/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java @@ -283,40 +283,20 @@ private static String wrapText(String text, int maxColumns, String prefix) { class TypeRef extends Element { String customType; - private static final Map customTypeNames = new HashMap<>(); - static { - customTypeNames.put("APIRequest.newContext.options.clientCertificates", "ClientCertificate"); - customTypeNames.put("Browser.newContext.options.clientCertificates", "ClientCertificate"); - customTypeNames.put("Browser.newPage.options.clientCertificates", "ClientCertificate"); - customTypeNames.put("BrowserType.launchPersistentContext.options.clientCertificates", "ClientCertificate"); - - customTypeNames.put("BrowserContext.addCookies.cookies", "Cookie"); - customTypeNames.put("BrowserContext.cookies", "Cookie"); - - customTypeNames.put("Request.headersArray", "HttpHeader"); - customTypeNames.put("Response.headersArray", "HttpHeader"); - customTypeNames.put("APIResponse.headersArray", "HttpHeader"); - - customTypeNames.put("Locator.selectOption.values", "SelectOption"); - customTypeNames.put("ElementHandle.selectOption.values", "SelectOption"); - customTypeNames.put("Frame.selectOption.values", "SelectOption"); - customTypeNames.put("Page.selectOption.values", "SelectOption"); - - customTypeNames.put("Locator.setInputFiles.files", "FilePayload"); - customTypeNames.put("ElementHandle.setInputFiles.files", "FilePayload"); - customTypeNames.put("FileChooser.setFiles.files", "FilePayload"); - customTypeNames.put("Frame.setInputFiles.files", "FilePayload"); - customTypeNames.put("Page.setInputFiles.files", "FilePayload"); - customTypeNames.put("Page.setInputFiles.files", "FilePayload"); - customTypeNames.put("FormData.append.value", "FilePayload"); - customTypeNames.put("FormData.set.value", "FilePayload"); - - customTypeNames.put("Locator.dragTo.options.sourcePosition", "Position"); - customTypeNames.put("Page.dragAndDrop.options.sourcePosition", "Position"); - customTypeNames.put("Frame.dragAndDrop.options.sourcePosition", "Position"); - customTypeNames.put("Locator.dragTo.options.targetPosition", "Position"); - customTypeNames.put("Page.dragAndDrop.options.targetPosition", "Position"); - customTypeNames.put("Frame.dragAndDrop.options.targetPosition", "Position"); + // Returns the Java-specific type alias declared in the api docs (e.g. `alias-java: Cookie`), + // falling back to the language-agnostic `alias` if no Java-specific override is provided. + private static String javaAlias(JsonObject jsonType) { + if (!jsonType.has("langAliases")) { + return null; + } + JsonObject langAliases = jsonType.getAsJsonObject("langAliases"); + if (langAliases.has("java")) { + return langAliases.get("java").getAsString(); + } + if (langAliases.has("default")) { + return langAliases.get("default").getAsString(); + } + return null; } TypeRef(Element parent, JsonElement jsonElement) { @@ -355,8 +335,9 @@ private void createClassesAndEnums(JsonObject jsonObject) { customType = toTitle(parent.parent.jsonName) + toTitle(parent.jsonName); typeScope().createNestedClass(customType, this, jsonObject); } else { - if (customTypeNames.containsKey(jsonPath)) { - customType = customTypeNames.get(jsonPath); + String alias = javaAlias(jsonObject); + if (alias != null) { + customType = alias; } else { customType = toTitle(parent.jsonName); } @@ -534,15 +515,12 @@ private String convertBuiltinType(JsonObject jsonType) { return convertTemplateParams(jsonType); } if ("function".equals(name)) { + String alias = javaAlias(jsonType); + if (alias != null) { + return alias; + } if (!jsonType.has("args")) { - switch (jsonPath) { - case "BrowserContext.exposeBinding.callback": return "BindingCallback"; - case "BrowserContext.exposeFunction.callback": return "FunctionCallback"; - case "Page.exposeBinding.callback": return "BindingCallback"; - case "Page.exposeFunction.callback": return "FunctionCallback"; - default: - throw new RuntimeException("Missing mapping for " + jsonPath); - } + throw new RuntimeException("Missing mapping for " + jsonPath); } if ("WebSocketRoute.onClose.handler".equals(jsonPath)) { return "BiConsumer";