Skip to content

Commit 32d9e42

Browse files
committed
Added test fixture for Browser.NewContextOptions
1 parent fddb146 commit 32d9e42

File tree

5 files changed

+83
-35
lines changed

5 files changed

+83
-35
lines changed

playwright/src/main/java/com/microsoft/playwright/impl/junit/BrowserContextExtension.java

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package com.microsoft.playwright.impl.junit;
1818

1919
import com.microsoft.playwright.*;
20-
import com.microsoft.playwright.impl.Utils;
2120
import com.microsoft.playwright.junit.Options;
2221
import org.junit.jupiter.api.extension.*;
2322

@@ -26,6 +25,7 @@
2625
import java.nio.file.Path;
2726
import java.nio.file.Paths;
2827

28+
import static com.microsoft.playwright.impl.junit.BrowserNewContextOptionsExtension.getBrowserContextOptions;
2929
import static com.microsoft.playwright.impl.junit.ExtensionUtils.*;
3030
import static com.microsoft.playwright.impl.junit.PageExtension.cleanUpPage;
3131

@@ -59,7 +59,7 @@ public static BrowserContext getOrCreateBrowserContext(ExtensionContext extensio
5959
Playwright playwright = PlaywrightExtension.getOrCreatePlaywright(extensionContext);
6060
setTestIdAttribute(playwright, options);
6161
Browser browser = BrowserExtension.getOrCreateBrowser(extensionContext);
62-
Browser.NewContextOptions contextOptions = getContextOptions(playwright, options);
62+
Browser.NewContextOptions contextOptions = getBrowserContextOptions(playwright, options);
6363
browserContext = browser.newContext(contextOptions);
6464
if (shouldRecordTrace(options)) {
6565
Tracing.StartOptions startOptions = new Tracing.StartOptions().setSnapshots(true).setScreenshots(true).setTitle(extensionContext.getDisplayName());
@@ -152,34 +152,5 @@ private static boolean shouldRecordTrace(Options options) {
152152
return options.trace.equals(Options.Trace.ON) || options.trace.equals(Options.Trace.RETAIN_ON_FAILURE);
153153
}
154154

155-
private static Browser.NewContextOptions getContextOptions(Playwright playwright, Options options) {
156-
Browser.NewContextOptions contextOptions = Utils.clone(options.contextOptions);
157-
if (contextOptions == null) {
158-
contextOptions = new Browser.NewContextOptions();
159-
}
160-
161-
if (options.baseUrl != null) {
162-
contextOptions.setBaseURL(options.baseUrl);
163-
}
164-
165-
if (options.deviceName != null) {
166-
DeviceDescriptor deviceDescriptor = DeviceDescriptor.findByName(playwright, options.deviceName);
167-
if (deviceDescriptor == null) {
168-
throw new PlaywrightException("Unknown device name: " + options.deviceName);
169-
}
170-
contextOptions.userAgent = deviceDescriptor.userAgent;
171-
if (deviceDescriptor.viewport != null) {
172-
contextOptions.setViewportSize(deviceDescriptor.viewport.width, deviceDescriptor.viewport.height);
173-
}
174-
contextOptions.deviceScaleFactor = deviceDescriptor.deviceScaleFactor;
175-
contextOptions.isMobile = deviceDescriptor.isMobile;
176-
contextOptions.hasTouch = deviceDescriptor.hasTouch;
177-
}
178155

179-
if (options.ignoreHTTPSErrors != null) {
180-
contextOptions.setIgnoreHTTPSErrors(options.ignoreHTTPSErrors);
181-
}
182-
183-
return contextOptions;
184-
}
185156
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.microsoft.playwright.impl.junit;
2+
3+
import com.microsoft.playwright.Browser;
4+
import com.microsoft.playwright.Playwright;
5+
import com.microsoft.playwright.PlaywrightException;
6+
import com.microsoft.playwright.impl.Utils;
7+
import com.microsoft.playwright.junit.Options;
8+
import org.junit.jupiter.api.extension.ExtensionContext;
9+
import org.junit.jupiter.api.extension.ParameterContext;
10+
import org.junit.jupiter.api.extension.ParameterResolutionException;
11+
import org.junit.jupiter.api.extension.ParameterResolver;
12+
13+
import static com.microsoft.playwright.impl.junit.ExtensionUtils.isParameterSupported;
14+
15+
public class BrowserNewContextOptionsExtension implements ParameterResolver {
16+
private static final ThreadLocal<Browser.NewContextOptions> threadLocalBrowserNewContextOptions = new ThreadLocal<>();
17+
18+
@Override
19+
public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
20+
return isParameterSupported(parameterContext, extensionContext, Browser.NewContextOptions.class);
21+
}
22+
23+
@Override
24+
public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
25+
Options options = OptionsExtension.getOptions(extensionContext);
26+
Playwright playwright = PlaywrightExtension.getOrCreatePlaywright(extensionContext);
27+
return getBrowserContextOptions(playwright, options);
28+
}
29+
30+
static Browser.NewContextOptions getBrowserContextOptions(Playwright playwright, Options options) {
31+
Browser.NewContextOptions contextOptions = threadLocalBrowserNewContextOptions.get();
32+
if (contextOptions != null) {
33+
return contextOptions;
34+
}
35+
36+
contextOptions = Utils.clone(options.contextOptions);
37+
38+
if (contextOptions == null) {
39+
contextOptions = new Browser.NewContextOptions();
40+
}
41+
42+
if (options.baseUrl != null) {
43+
contextOptions.setBaseURL(options.baseUrl);
44+
}
45+
46+
if (options.deviceName != null) {
47+
DeviceDescriptor deviceDescriptor = DeviceDescriptor.findByName(playwright, options.deviceName);
48+
if (deviceDescriptor == null) {
49+
throw new PlaywrightException("Unknown device name: " + options.deviceName);
50+
}
51+
contextOptions.userAgent = deviceDescriptor.userAgent;
52+
if (deviceDescriptor.viewport != null) {
53+
contextOptions.setViewportSize(deviceDescriptor.viewport.width, deviceDescriptor.viewport.height);
54+
}
55+
contextOptions.deviceScaleFactor = deviceDescriptor.deviceScaleFactor;
56+
contextOptions.isMobile = deviceDescriptor.isMobile;
57+
contextOptions.hasTouch = deviceDescriptor.hasTouch;
58+
}
59+
60+
if (options.ignoreHTTPSErrors != null) {
61+
contextOptions.setIgnoreHTTPSErrors(options.ignoreHTTPSErrors);
62+
}
63+
64+
threadLocalBrowserNewContextOptions.set(contextOptions);
65+
return contextOptions;
66+
}
67+
}

playwright/src/main/java/com/microsoft/playwright/junit/UsePlaywright.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
* <a href="https://playwright.dev/java/docs/junit">JUnit guide</a>.
7474
*/
7575
@ExtendWith({OptionsExtension.class, PlaywrightExtension.class, BrowserExtension.class, BrowserContextExtension.class,
76-
PageExtension.class, APIRequestContextExtension.class})
76+
PageExtension.class, APIRequestContextExtension.class, BrowserNewContextOptionsExtension.class})
7777
@Retention(RetentionPolicy.RUNTIME)
7878
@Target(ElementType.TYPE)
7979
@Inherited

playwright/src/test/java/com/microsoft/playwright/junit/TestFixtureOptions.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ public Options getOptions() {
4040
}
4141
}
4242

43+
@Test
44+
public void newBrowserContextOptionsShouldBeConfiguredFromOptionsFactory(Browser.NewContextOptions newContextOptions) {
45+
assertEquals(newContextOptions.baseURL, serverMap.get(TestFixtureOptions.class).EMPTY_PAGE);
46+
}
47+
4348
@Test
4449
public void testCustomBrowser(Browser browser) {
4550
assertEquals(browser.browserType().name(), "webkit");

playwright/src/test/java/com/microsoft/playwright/junit/TestFixtures.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,26 @@ public class TestFixtures {
3131
private Page pageFromBeforeEach;
3232
private static APIRequestContext apiRequestContextFromBeforeAll;
3333
private APIRequestContext apiRequestContextFromBeforeEach;
34+
private static Browser.NewContextOptions newBrowserContextOptionsFromBeforeAll;
3435

3536
@BeforeAll
36-
public static void beforeAll(Playwright playwright, Browser browser, APIRequestContext apiRequestContext) {
37+
public static void beforeAll(Playwright playwright, Browser browser, APIRequestContext apiRequestContext, Browser.NewContextOptions newBrowserContextOptions) {
3738
assertNotNull(playwright);
3839
assertNotNull(browser);
3940
assertNotNull(apiRequestContext);
41+
assertNotNull(newBrowserContextOptions);
4042

4143
playwrightFromBeforeAll = playwright;
4244
browserFromBeforeAll = browser;
4345
apiRequestContextFromBeforeAll = apiRequestContext;
46+
newBrowserContextOptionsFromBeforeAll = newBrowserContextOptions;
4447
}
4548

4649
@BeforeEach
47-
public void beforeEach(Playwright playwright, Browser browser, BrowserContext browserContext, Page page, APIRequestContext apiRequestContext) {
50+
public void beforeEach(Playwright playwright, Browser browser, BrowserContext browserContext, Page page, APIRequestContext apiRequestContext, Browser.NewContextOptions newBrowserContextOptions) {
4851
assertEquals(playwrightFromBeforeAll, playwright);
4952
assertEquals(browserFromBeforeAll, browser);
53+
assertEquals(newBrowserContextOptionsFromBeforeAll, newBrowserContextOptions);
5054
assertNotEquals(apiRequestContextFromBeforeAll, apiRequestContext);
5155

5256
assertNotNull(browserContext);
@@ -57,9 +61,10 @@ public void beforeEach(Playwright playwright, Browser browser, BrowserContext br
5761
}
5862

5963
@Test
60-
public void objectShouldBeSameAsBeforeAll(Playwright playwright, Browser browser) {
64+
public void objectShouldBeSameAsBeforeAll(Playwright playwright, Browser browser, Browser.NewContextOptions browserNextContextOptions) {
6165
assertEquals(playwrightFromBeforeAll, playwright);
6266
assertEquals(browserFromBeforeAll, browser);
67+
assertEquals(newBrowserContextOptionsFromBeforeAll, browserNextContextOptions);
6368
}
6469

6570
@Test

0 commit comments

Comments
 (0)