mirror of
https://github.com/microsoft/playwright-java.git
synced 2025-12-29 02:40:42 +00:00
fix(api): make all event listeners accept one parameter (#225)
This commit is contained in:
parent
d1f1287e77
commit
808f666399
@ -18,6 +18,7 @@ package com.microsoft.playwright;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* - extends: [EventEmitter]
|
||||
@ -44,8 +45,8 @@ public interface Browser {
|
||||
}
|
||||
|
||||
|
||||
void onDisconnected(Runnable handler);
|
||||
void offDisconnected(Runnable handler);
|
||||
void onDisconnected(Consumer<Browser> handler);
|
||||
void offDisconnected(Consumer<Browser> handler);
|
||||
|
||||
|
||||
class NewContextOptions {
|
||||
|
||||
@ -95,8 +95,8 @@ public interface BrowserContext {
|
||||
}
|
||||
|
||||
|
||||
void onClose(Runnable handler);
|
||||
void offClose(Runnable handler);
|
||||
void onClose(Consumer<BrowserContext> handler);
|
||||
void offClose(Consumer<BrowserContext> handler);
|
||||
|
||||
void onPage(Consumer<Page> handler);
|
||||
void offPage(Consumer<Page> handler);
|
||||
|
||||
@ -75,20 +75,20 @@ public interface Page {
|
||||
}
|
||||
|
||||
|
||||
void onClose(Runnable handler);
|
||||
void offClose(Runnable handler);
|
||||
void onClose(Consumer<Page> handler);
|
||||
void offClose(Consumer<Page> handler);
|
||||
|
||||
void onConsole(Consumer<ConsoleMessage> handler);
|
||||
void offConsole(Consumer<ConsoleMessage> handler);
|
||||
|
||||
void onCrash(Runnable handler);
|
||||
void offCrash(Runnable handler);
|
||||
void onCrash(Consumer<Page> handler);
|
||||
void offCrash(Consumer<Page> handler);
|
||||
|
||||
void onDialog(Consumer<Dialog> handler);
|
||||
void offDialog(Consumer<Dialog> handler);
|
||||
|
||||
void onDomContentLoaded(Runnable handler);
|
||||
void offDomContentLoaded(Runnable handler);
|
||||
void onDOMContentLoaded(Consumer<Page> handler);
|
||||
void offDOMContentLoaded(Consumer<Page> handler);
|
||||
|
||||
void onDownload(Consumer<Download> handler);
|
||||
void offDownload(Consumer<Download> handler);
|
||||
@ -105,8 +105,8 @@ public interface Page {
|
||||
void onFrameNavigated(Consumer<Frame> handler);
|
||||
void offFrameNavigated(Consumer<Frame> handler);
|
||||
|
||||
void onLoad(Runnable handler);
|
||||
void offLoad(Runnable handler);
|
||||
void onLoad(Consumer<Page> handler);
|
||||
void offLoad(Consumer<Page> handler);
|
||||
|
||||
void onPageError(Consumer<Error> handler);
|
||||
void offPageError(Consumer<Error> handler);
|
||||
|
||||
@ -30,8 +30,8 @@ public interface WebSocket {
|
||||
}
|
||||
|
||||
|
||||
void onClose(Runnable handler);
|
||||
void offClose(Runnable handler);
|
||||
void onClose(Consumer<WebSocket> handler);
|
||||
void offClose(Consumer<WebSocket> handler);
|
||||
|
||||
void onFrameReceived(Consumer<FrameData> handler);
|
||||
void offFrameReceived(Consumer<FrameData> handler);
|
||||
|
||||
@ -60,12 +60,12 @@ class BrowserContextImpl extends ChannelOwner implements BrowserContext {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose(Runnable handler) {
|
||||
public void onClose(Consumer<BrowserContext> handler) {
|
||||
listeners.add(EventType.CLOSE, handler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void offClose(Runnable handler) {
|
||||
public void offClose(Consumer<BrowserContext> handler) {
|
||||
listeners.remove(EventType.CLOSE, handler);
|
||||
}
|
||||
|
||||
@ -416,7 +416,7 @@ class BrowserContextImpl extends ChannelOwner implements BrowserContext {
|
||||
if (browser != null) {
|
||||
browser.contexts.remove(this);
|
||||
}
|
||||
listeners.notify(EventType.CLOSE, null);
|
||||
listeners.notify(EventType.CLOSE, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,6 +27,7 @@ import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import static com.microsoft.playwright.impl.Serialization.gson;
|
||||
import static com.microsoft.playwright.impl.Utils.convertViaJson;
|
||||
@ -46,12 +47,12 @@ class BrowserImpl extends ChannelOwner implements Browser {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnected(Runnable handler) {
|
||||
public void onDisconnected(Consumer<Browser> handler) {
|
||||
listeners.add(EventType.DISCONNECTED, handler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void offDisconnected(Runnable handler) {
|
||||
public void offDisconnected(Consumer<Browser> handler) {
|
||||
listeners.remove(EventType.DISCONNECTED, handler);
|
||||
}
|
||||
|
||||
@ -136,7 +137,7 @@ class BrowserImpl extends ChannelOwner implements Browser {
|
||||
void handleEvent(String event, JsonObject parameters) {
|
||||
if ("close".equals(event)) {
|
||||
isConnected = false;
|
||||
listeners.notify(EventType.DISCONNECTED, null);
|
||||
listeners.notify(EventType.DISCONNECTED, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,32 +47,6 @@ class ListenerCollection <EventType> {
|
||||
}
|
||||
}
|
||||
|
||||
private static class RunnableWrapper<EventType> implements Listener<EventType> {
|
||||
final Runnable callback;
|
||||
|
||||
private RunnableWrapper(Runnable callback) {
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(Event<EventType> event) {
|
||||
callback.run();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
RunnableWrapper<?> that = (RunnableWrapper<?>) o;
|
||||
return Objects.equals(callback, that.callback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(callback);
|
||||
}
|
||||
}
|
||||
|
||||
private static class ConsumerWrapper<EventType> implements Listener<EventType> {
|
||||
final Consumer<?> callback;
|
||||
|
||||
@ -98,13 +72,6 @@ class ListenerCollection <EventType> {
|
||||
}
|
||||
}
|
||||
|
||||
void add(EventType type, Runnable listener) {
|
||||
add(type, new RunnableWrapper<>(listener));
|
||||
}
|
||||
void remove(EventType type, Runnable listener) {
|
||||
remove(type, new RunnableWrapper<>(listener));
|
||||
}
|
||||
|
||||
void add(EventType type, Consumer listener) {
|
||||
add(type, new ConsumerWrapper<>(listener));
|
||||
}
|
||||
|
||||
@ -155,9 +155,9 @@ public class PageImpl extends ChannelOwner implements Page {
|
||||
}
|
||||
}
|
||||
} else if ("load".equals(event)) {
|
||||
listeners.notify(EventType.LOAD, null);
|
||||
listeners.notify(EventType.LOAD, this);
|
||||
} else if ("domcontentloaded".equals(event)) {
|
||||
listeners.notify(EventType.DOMCONTENTLOADED, null);
|
||||
listeners.notify(EventType.DOMCONTENTLOADED, this);
|
||||
} else if ("request".equals(event)) {
|
||||
String guid = params.getAsJsonObject("request").get("guid").getAsString();
|
||||
Request request = connection.getExistingObject(guid);
|
||||
@ -210,11 +210,11 @@ public class PageImpl extends ChannelOwner implements Page {
|
||||
SerializedError error = gson().fromJson(params.getAsJsonObject("error"), SerializedError.class);
|
||||
listeners.notify(EventType.PAGEERROR, new ErrorImpl(error));
|
||||
} else if ("crash".equals(event)) {
|
||||
listeners.notify(EventType.CRASH, null);
|
||||
listeners.notify(EventType.CRASH, this);
|
||||
} else if ("close".equals(event)) {
|
||||
isClosed = true;
|
||||
browserContext.pages.remove(this);
|
||||
listeners.notify(EventType.CLOSE, null);
|
||||
listeners.notify(EventType.CLOSE, this);
|
||||
}
|
||||
}
|
||||
|
||||
@ -237,12 +237,12 @@ public class PageImpl extends ChannelOwner implements Page {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose(Runnable handler) {
|
||||
public void onClose(Consumer<Page> handler) {
|
||||
listeners.add(EventType.CLOSE, handler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void offClose(Runnable handler) {
|
||||
public void offClose(Consumer<Page> handler) {
|
||||
listeners.remove(EventType.CLOSE, handler);
|
||||
}
|
||||
|
||||
@ -257,12 +257,12 @@ public class PageImpl extends ChannelOwner implements Page {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCrash(Runnable handler) {
|
||||
public void onCrash(Consumer<Page> handler) {
|
||||
listeners.add(EventType.CRASH, handler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void offCrash(Runnable handler) {
|
||||
public void offCrash(Consumer<Page> handler) {
|
||||
listeners.remove(EventType.CRASH, handler);
|
||||
}
|
||||
|
||||
@ -277,12 +277,12 @@ public class PageImpl extends ChannelOwner implements Page {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDomContentLoaded(Runnable handler) {
|
||||
public void onDOMContentLoaded(Consumer<Page> handler) {
|
||||
listeners.add(EventType.DOMCONTENTLOADED, handler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void offDomContentLoaded(Runnable handler) {
|
||||
public void offDOMContentLoaded(Consumer<Page> handler) {
|
||||
listeners.remove(EventType.DOMCONTENTLOADED, handler);
|
||||
}
|
||||
|
||||
@ -337,12 +337,12 @@ public class PageImpl extends ChannelOwner implements Page {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad(Runnable handler) {
|
||||
public void onLoad(Consumer<Page> handler) {
|
||||
listeners.add(EventType.LOAD, handler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void offLoad(Runnable handler) {
|
||||
public void offLoad(Consumer<Page> handler) {
|
||||
listeners.remove(EventType.LOAD, handler);
|
||||
}
|
||||
|
||||
|
||||
@ -44,12 +44,12 @@ class WebSocketImpl extends ChannelOwner implements WebSocket {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose(Runnable handler) {
|
||||
public void onClose(Consumer<WebSocket> handler) {
|
||||
listeners.add(EventType.CLOSE, handler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void offClose(Runnable handler) {
|
||||
public void offClose(Consumer<WebSocket> handler) {
|
||||
listeners.remove(EventType.CLOSE, handler);
|
||||
}
|
||||
|
||||
@ -212,7 +212,7 @@ class WebSocketImpl extends ChannelOwner implements WebSocket {
|
||||
}
|
||||
case "close": {
|
||||
isClosed = true;
|
||||
listeners.notify(EventType.CLOSE, null);
|
||||
listeners.notify(EventType.CLOSE, this);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
|
||||
@ -223,7 +223,7 @@ public class TestDefaultBrowserContext2 extends TestBase {
|
||||
void shouldFireCloseEventForAPersistentContext() {
|
||||
launchPersistent();
|
||||
boolean[] closed = {false};
|
||||
persistentContext.onClose(() -> closed[0] = true);
|
||||
persistentContext.onClose(context -> closed[0] = true);
|
||||
closePersistentContext();
|
||||
assertTrue(closed[0]);
|
||||
}
|
||||
|
||||
@ -101,7 +101,7 @@ public class TestWebSocket extends TestBase {
|
||||
page.onWebSocket(ws -> {
|
||||
log.add("open<" + ws.url() + ">");
|
||||
webSocket[0] = ws;
|
||||
ws.onClose(() -> {
|
||||
ws.onClose(ws1 -> {
|
||||
log.add("close");
|
||||
socketClosed[0] = true;
|
||||
});
|
||||
@ -123,7 +123,7 @@ public class TestWebSocket extends TestBase {
|
||||
log.add("open");
|
||||
ws.onFrameSent(frameData -> log.add("sent<" + frameData.text() + ">"));
|
||||
ws.onFrameReceived(frameData -> log.add("received<" + frameData.text() + ">"));
|
||||
ws.onClose(() -> { log.add("close"); socketClosed[0] = true; });
|
||||
ws.onClose(ws1 -> { log.add("close"); socketClosed[0] = true; });
|
||||
});
|
||||
page.evaluate("port => {\n" +
|
||||
" const ws = new WebSocket('ws://localhost:' + port + '/ws');\n" +
|
||||
@ -146,7 +146,7 @@ public class TestWebSocket extends TestBase {
|
||||
boolean[] socketClosed = {false};
|
||||
List<com.microsoft.playwright.WebSocket.FrameData> sent = new ArrayList<>();
|
||||
page.onWebSocket(ws -> {
|
||||
ws.onClose(() -> { socketClosed[0] = true; });
|
||||
ws.onClose(ws1 -> socketClosed[0] = true);
|
||||
ws.onFrameSent(frameData -> sent.add(frameData));
|
||||
});
|
||||
page.evaluate("port => {\n" +
|
||||
|
||||
@ -375,7 +375,7 @@ class Event extends Element {
|
||||
eventNames.put("Page.console", "Console");
|
||||
eventNames.put("Page.crash", "Crash");
|
||||
eventNames.put("Page.dialog", "Dialog");
|
||||
eventNames.put("Page.domcontentloaded", "DomContentLoaded");
|
||||
eventNames.put("Page.domcontentloaded", "DOMContentLoaded");
|
||||
eventNames.put("Page.download", "Download");
|
||||
eventNames.put("Page.filechooser", "FileChooser");
|
||||
eventNames.put("Page.frameattached", "FrameAttached");
|
||||
@ -438,7 +438,12 @@ class Event extends Element {
|
||||
throw new RuntimeException("Unknown event: " + jsonPath);
|
||||
}
|
||||
String name = eventNames.get(jsonPath);
|
||||
String listenerType = "void".equals(type.toJava()) ? "Runnable" : "Consumer<" + type.toJava() + ">";
|
||||
String paramType = type.toJava();
|
||||
// TODO: remove once fixed upstream
|
||||
if (paramType.equals("void")) {
|
||||
paramType = parent.jsonName;
|
||||
}
|
||||
String listenerType = "Consumer<" + paramType + ">";
|
||||
output.add(offset + "void on" + name + "(" + listenerType + " handler);");
|
||||
output.add(offset + "void off" + name + "(" + listenerType + " handler);");
|
||||
}
|
||||
@ -1050,7 +1055,7 @@ class Interface extends TypeDefinition {
|
||||
output.add("import java.nio.file.Path;");
|
||||
}
|
||||
output.add("import java.util.*;");
|
||||
if (asList("Page", "BrowserContext", "WebSocket", "Worker").contains(jsonName)) {
|
||||
if (asList("Page", "Browser", "BrowserContext", "WebSocket", "Worker").contains(jsonName)) {
|
||||
output.add("import java.util.function.Consumer;");
|
||||
}
|
||||
if (asList("Page", "Frame", "BrowserContext", "WebSocket").contains(jsonName)) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user