From e545829bf5a13dc2e0cd5defb39dd308e32eb179 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Mon, 25 Jan 2021 15:11:05 -0800 Subject: [PATCH] fix(api): make Dialog.type() return string (#233) --- .../java/com/microsoft/playwright/Dialog.java | 4 +--- .../microsoft/playwright/impl/DialogImpl.java | 10 ++------- .../com/microsoft/playwright/TestDialog.java | 21 ++++++++++++------- .../microsoft/playwright/TestPageBasic.java | 2 +- .../playwright/tools/ApiGenerator.java | 5 ----- .../com/microsoft/playwright/tools/Types.java | 1 - 6 files changed, 17 insertions(+), 26 deletions(-) diff --git a/playwright/src/main/java/com/microsoft/playwright/Dialog.java b/playwright/src/main/java/com/microsoft/playwright/Dialog.java index f8d0eb44..c08e6418 100644 --- a/playwright/src/main/java/com/microsoft/playwright/Dialog.java +++ b/playwright/src/main/java/com/microsoft/playwright/Dialog.java @@ -22,8 +22,6 @@ import java.util.*; * {@code Dialog} objects are dispatched by page via the [{@code event: Page.dialog}] event. */ public interface Dialog { - enum Type { ALERT, BEFOREUNLOAD, CONFIRM, PROMPT } - default void accept() { accept(null); } @@ -48,6 +46,6 @@ public interface Dialog { /** * Returns dialog's type, can be one of {@code alert}, {@code beforeunload}, {@code confirm} or {@code prompt}. */ - Type type(); + String type(); } diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/DialogImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/DialogImpl.java index a1213daa..ba97d56c 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/DialogImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/DialogImpl.java @@ -52,13 +52,7 @@ class DialogImpl extends ChannelOwner implements Dialog { } @Override - public Type type() { - switch (initializer.get("type").getAsString()) { - case "alert": return Type.ALERT; - case "beforeunload": return Type.BEFOREUNLOAD; - case "confirm": return Type.CONFIRM; - case "prompt": return Type.PROMPT; - default: throw new PlaywrightException("Unexpected dialog type: " + initializer.get("type").getAsString()); - } + public String type() { + return initializer.get("type").getAsString(); } } diff --git a/playwright/src/test/java/com/microsoft/playwright/TestDialog.java b/playwright/src/test/java/com/microsoft/playwright/TestDialog.java index 6e4681d2..22b65fe9 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestDialog.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestDialog.java @@ -19,17 +19,17 @@ package com.microsoft.playwright; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledIf; -import static com.microsoft.playwright.Dialog.Type.ALERT; -import static com.microsoft.playwright.Dialog.Type.PROMPT; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; +import java.time.Duration; +import java.time.Instant; + +import static org.junit.jupiter.api.Assertions.*; public class TestDialog extends TestBase { @Test void shouldFire() { page.onDialog(dialog -> { - assertEquals(ALERT, dialog.type()); + assertEquals("alert", dialog.type()); assertEquals( "", dialog.defaultValue()); assertEquals( "yo", dialog.message()); dialog.accept(); @@ -40,7 +40,7 @@ public class TestDialog extends TestBase { @Test void shouldAllowAcceptingPrompts() { page.onDialog(dialog -> { - assertEquals(PROMPT, dialog.type()); + assertEquals("prompt", dialog.type()); assertEquals("yes.", dialog.defaultValue()); assertEquals("question?", dialog.message()); dialog.accept("answer!"); @@ -85,11 +85,16 @@ public class TestDialog extends TestBase { void shouldBeAbleToCloseContextWithOpenAlert() { BrowserContext context = browser.newContext(); Page page = context.newPage(); -// const alertPromise = page.futureEvent("dialog"); + boolean[] didShowDialog = {false}; + page.onDialog(dialog -> didShowDialog[0] = true); page.evaluate("() => {\n" + " setTimeout(() => alert('hello'), 0);\n" + "}"); -// alertPromise; + Instant start = Instant.now(); + while (!didShowDialog[0]) { + page.waitForTimeout(100); + assertTrue(Duration.between(start, Instant.now()).getSeconds() < 30, "Timed out"); + } context.close(); } } diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java b/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java index 2cf5fae4..7809d05c 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java @@ -61,7 +61,7 @@ public class TestPageBasic extends TestBase { boolean[] didShowDialog = {false}; newPage.onDialog(dialog -> { didShowDialog[0] = true; - assertEquals(Dialog.Type.BEFOREUNLOAD, dialog.type()); + assertEquals("beforeunload", dialog.type()); assertEquals("", dialog.defaultValue()); if (isChromium()) { assertEquals("", dialog.message()); 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 5be3d003..f73f874e 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 @@ -1112,11 +1112,6 @@ class Interface extends TypeDefinition { private void writeSharedTypes(List output, String offset) { switch (jsonName) { - case "Dialog": { - output.add(offset + "enum Type { ALERT, BEFOREUNLOAD, CONFIRM, PROMPT }"); - output.add(""); - break; - } case "Mouse": { output.add(offset + "enum Button { LEFT, MIDDLE, RIGHT }"); output.add(""); diff --git a/tools/api-generator/src/main/java/com/microsoft/playwright/tools/Types.java b/tools/api-generator/src/main/java/com/microsoft/playwright/tools/Types.java index 58c49a69..f87267ae 100644 --- a/tools/api-generator/src/main/java/com/microsoft/playwright/tools/Types.java +++ b/tools/api-generator/src/main/java/com/microsoft/playwright/tools/Types.java @@ -152,7 +152,6 @@ class Types { add("WebSocket.waitForEvent.optionsOrPredicate", "Function|Object", "String"); // Return structures - add("Dialog.type", "string", "Type", new Empty()); add("ConsoleMessage.location", "Object", "Location"); add("ElementHandle.boundingBox", "Object|null", "BoundingBox", new Empty()); add("Accessibility.snapshot", "Object|null", "AccessibilityNode", new Empty());