1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.junit;
16
17 import java.util.ArrayList;
18 import java.util.List;
19 import java.util.Set;
20 import java.util.stream.Stream;
21
22 import org.htmlunit.BrowserVersion;
23 import org.htmlunit.WebDriverTestCase;
24 import org.htmlunit.WebTestCase;
25 import org.junit.jupiter.api.extension.ClassTemplateInvocationContext;
26 import org.junit.jupiter.api.extension.ClassTemplateInvocationContextProvider;
27 import org.junit.jupiter.api.extension.Extension;
28 import org.junit.jupiter.api.extension.ExtensionContext;
29 import org.junit.jupiter.api.extension.TestInstancePostProcessor;
30
31
32
33
34
35
36
37 public class BrowserVersionClassTemplateInvocationContextProvider implements ClassTemplateInvocationContextProvider {
38
39 static final String REAL_CHROME = "chrome";
40 static final String REAL_FIREFOX = "ff";
41 static final String REAL_FIREFOX_ESR = "ff-esr";
42 static final String REAL_EDGE = "edge";
43
44 static final String HTMLUNIT_CHROME = "hu-chrome";
45 static final String HTMLUNIT_FIREFOX = "hu-ff";
46 static final String HTMLUNIT_FIREFOX_ESR = "hu-ff-esr";
47 static final String HTMLUNIT_EDGE = "hu-edge";
48
49 @Override
50 public boolean supportsClassTemplate(final ExtensionContext context) {
51 return true;
52 }
53
54 @Override
55 public Stream<ClassTemplateInvocationContext>
56 provideClassTemplateInvocationContexts(final ExtensionContext context) {
57
58 final ArrayList<ClassTemplateInvocationContext> invocationContexts = new ArrayList<>();
59
60 final Set<String> browsers = WebDriverTestCase.getBrowsersProperties();
61 if (browsers.contains(REAL_CHROME)) {
62 invocationContexts.add(invocationContext(BrowserVersion.CHROME, true));
63 }
64 if (browsers.contains(REAL_FIREFOX_ESR)) {
65 invocationContexts.add(invocationContext(BrowserVersion.FIREFOX_ESR, true));
66 }
67 if (browsers.contains(REAL_FIREFOX)) {
68 invocationContexts.add(invocationContext(BrowserVersion.FIREFOX, true));
69 }
70 if (browsers.contains(REAL_EDGE)) {
71 invocationContexts.add(invocationContext(BrowserVersion.EDGE, true));
72 }
73
74 if (browsers.contains(HTMLUNIT_CHROME)) {
75 invocationContexts.add(invocationContext(BrowserVersion.CHROME, false));
76 }
77 if (browsers.contains(HTMLUNIT_FIREFOX_ESR)) {
78 invocationContexts.add(invocationContext(BrowserVersion.FIREFOX_ESR, false));
79 }
80 if (browsers.contains(HTMLUNIT_FIREFOX)) {
81 invocationContexts.add(invocationContext(BrowserVersion.FIREFOX, false));
82 }
83 if (browsers.contains(HTMLUNIT_EDGE)) {
84 invocationContexts.add(invocationContext(BrowserVersion.EDGE, false));
85 }
86
87
88 return invocationContexts.stream();
89 }
90
91 private static ClassTemplateInvocationContext invocationContext(
92 final BrowserVersion browserVersion, final boolean realBrowser) {
93
94 return new ClassTemplateInvocationContext() {
95 @Override
96 public String getDisplayName(final int invocationIndex) {
97 return (realBrowser ? "Real " : "") + browserVersion.getNickname();
98 }
99
100 @Override
101 public List<Extension> getAdditionalExtensions() {
102 final ArrayList<Extension> extensions = new ArrayList<>();
103
104 extensions.add(new TestInstancePostProcessor() {
105
106 @Override
107 public void postProcessTestInstance(final Object testInstance, final ExtensionContext context) {
108 if (testInstance instanceof WebTestCase) {
109 final WebTestCase webTestCase = (WebTestCase) testInstance;
110
111 webTestCase.setBrowserVersion(browserVersion);
112 }
113 if (testInstance instanceof WebDriverTestCase) {
114 final WebDriverTestCase webDriverTestCase = (WebDriverTestCase) testInstance;
115
116 webDriverTestCase.setUseRealBrowser(realBrowser);
117 }
118 }
119 });
120
121 return extensions;
122 }
123 };
124 }
125 }