Skip to content

Commit b90de26

Browse files
authored
feat: accept PLAYWRIGHT_JAVA_SRC in Playwright.create (#980)
1 parent adfdf92 commit b90de26

File tree

6 files changed

+67
-8
lines changed

6 files changed

+67
-8
lines changed

playwright/src/main/java/com/microsoft/playwright/impl/BrowserTypeImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ private Browser connectImpl(String wsEndpoint, ConnectOptions options) {
8282

8383
JsonObject json = sendMessage("connect", params).getAsJsonObject();
8484
JsonPipe pipe = connection.getExistingObject(json.getAsJsonObject("pipe").get("guid").getAsString());
85-
Connection connection = new Connection(pipe);
85+
Connection connection = new Connection(pipe, this.connection.env);
8686
PlaywrightImpl playwright = connection.initializePlaywright();
8787
if (!playwright.initializer.has("preLaunchedBrowser")) {
8888
try {

playwright/src/main/java/com/microsoft/playwright/impl/Connection.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public class Connection {
6565
isLogging = (debug != null) && debug.contains("pw:channel");
6666
}
6767
LocalUtils localUtils;
68+
final Map<String, String> env;
6869

6970
class Root extends ChannelOwner {
7071
Root(Connection connection) {
@@ -79,13 +80,14 @@ Playwright initialize() {
7980
}
8081
}
8182

82-
Connection(Transport transport) {
83+
Connection(Transport transport, Map<String, String> env) {
84+
this.env = env;
8385
if (isLogging) {
8486
transport = new TransportLogger(transport);
8587
}
8688
this.transport = transport;
8789
root = new Root(this);
88-
stackTraceCollector = StackTraceCollector.createFromEnv();
90+
stackTraceCollector = StackTraceCollector.createFromEnv(env);
8991
}
9092

9193
boolean isCollectingStacks() {

playwright/src/main/java/com/microsoft/playwright/impl/PlaywrightImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public static PlaywrightImpl create(CreateOptions options) {
4343
pb.environment().putAll(env);
4444
Driver.setRequiredEnvironmentVariables(pb);
4545
Process p = pb.start();
46-
Connection connection = new Connection(new PipeTransport(p.getInputStream(), p.getOutputStream()));
46+
Connection connection = new Connection(new PipeTransport(p.getInputStream(), p.getOutputStream()), env);
4747
PlaywrightImpl result = connection.initializePlaywright();
4848
result.driverProcess = p;
4949
result.initSharedSelectors(null);

playwright/src/main/java/com/microsoft/playwright/impl/StackTraceCollector.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,25 @@
2828
import java.util.stream.Collectors;
2929

3030
class StackTraceCollector {
31+
static final String PLAYWRIGHT_JAVA_SRC = "PLAYWRIGHT_JAVA_SRC";
3132
private final List<Path> srcDirs;
3233
private final Map<Path, String> classToSourceCache = new HashMap<>();
3334

34-
static StackTraceCollector createFromEnv() {
35-
String srcRoots = System.getenv("PLAYWRIGHT_JAVA_SRC");
35+
static StackTraceCollector createFromEnv(Map<String, String> env) {
36+
String srcRoots = null;
37+
if (env != null) {
38+
srcRoots = env.get(PLAYWRIGHT_JAVA_SRC);
39+
}
40+
if (srcRoots == null) {
41+
srcRoots = System.getenv(PLAYWRIGHT_JAVA_SRC);
42+
}
3643
if (srcRoots == null) {
3744
return null;
3845
}
3946
List<Path> srcDirs = Arrays.stream(srcRoots.split(File.pathSeparator)).map(p -> Paths.get(p)).collect(Collectors.toList());
4047
for (Path srcDir: srcDirs) {
4148
if (!Files.exists(srcDir.toAbsolutePath())) {
42-
throw new PlaywrightException("Source location specified in PLAYWRIGHT_JAVA_SRC doesn't exist: '" + srcDir.toAbsolutePath() + "'");
49+
throw new PlaywrightException("Source location specified in " + PLAYWRIGHT_JAVA_SRC + " doesn't exist: '" + srcDir.toAbsolutePath() + "'");
4350
}
4451
}
4552
return new StackTraceCollector(srcDirs);

playwright/src/test/java/com/microsoft/playwright/TestBase.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,12 @@ static BrowserType.LaunchOptions createLaunchOptions() {
7272
return options;
7373
}
7474

75+
Playwright.CreateOptions playwrightOptions() {
76+
return null;
77+
}
78+
7579
void initBrowserType() {
76-
playwright = Playwright.create();
80+
playwright = Playwright.create(playwrightOptions());
7781
browserType = Utils.getBrowserTypeFromEnv(playwright);
7882
}
7983

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.microsoft.playwright;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.api.io.TempDir;
5+
6+
import java.io.File;
7+
import java.io.IOException;
8+
import java.nio.file.Files;
9+
import java.nio.file.Path;
10+
import java.nio.file.Paths;
11+
import java.util.Map;
12+
import java.util.stream.Collectors;
13+
14+
import static com.microsoft.playwright.Utils.mapOf;
15+
import static java.nio.charset.StandardCharsets.UTF_8;
16+
import static org.junit.jupiter.api.Assertions.assertEquals;
17+
18+
public class TestJavaSourceLocationInConstructor extends TestBase {
19+
private static final String SRC_DIRS = System.getenv("PLAYWRIGHT_JAVA_SRC") == null ? "src/test/java" : System.getenv("PLAYWRIGHT_JAVA_SRC");
20+
21+
@Override
22+
Playwright.CreateOptions playwrightOptions() {
23+
return new Playwright.CreateOptions().setEnv(mapOf("PLAYWRIGHT_JAVA_SRC", SRC_DIRS));
24+
}
25+
26+
@Test
27+
void shouldSupportSourcesLocationPassedToPlaywrightCreate(@TempDir Path tmpDir) throws IOException {
28+
context.tracing().start(new Tracing.StartOptions().setSources(true));
29+
page.navigate(server.EMPTY_PAGE);
30+
page.setContent("<button>Click</button>");
31+
page.click("'Click'");
32+
Path trace = tmpDir.resolve("trace1.zip");
33+
context.tracing().stop(new Tracing.StopOptions().setPath(trace));
34+
35+
Map<String, byte[]> entries = Utils.parseZip(trace);
36+
Map<String, byte[]> sources = entries.entrySet().stream().filter(e -> e.getKey().endsWith(".txt")).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
37+
assertEquals(1, sources.size());
38+
39+
String path = getClass().getName().replace('.', File.separatorChar);
40+
String[] srcRoots = SRC_DIRS.split(File.pathSeparator);
41+
// Resolve in the last specified source dir.
42+
Path sourceFile = Paths.get(srcRoots[srcRoots.length - 1], path + ".java");
43+
byte[] thisFile = Files.readAllBytes(sourceFile);
44+
assertEquals(new String(thisFile, UTF_8), new String(sources.values().iterator().next(), UTF_8));
45+
}
46+
}

0 commit comments

Comments
 (0)