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 return invocationContexts.stream();
88 }
89
90 private static ClassTemplateInvocationContext invocationContext(
91 final BrowserVersion browserVersion, final boolean realBrowser) {
92
93 return new ClassTemplateInvocationContext() {
94 @Override
95 public String getDisplayName(final int invocationIndex) {
96 return (realBrowser ? "Real " : "") + browserVersion.getNickname();
97 }
98
99 @Override
100 public List<Extension> getAdditionalExtensions() {
101 final ArrayList<Extension> extensions = new ArrayList<>();
102
103 extensions.add(new TestInstancePostProcessor() {
104
105 @Override
106 public void postProcessTestInstance(final Object testInstance, final ExtensionContext context) {
107 if (testInstance instanceof WebTestCase) {
108 final WebTestCase webTestCase = (WebTestCase) testInstance;
109
110 webTestCase.setBrowserVersion(browserVersion);
111 }
112 if (testInstance instanceof WebDriverTestCase) {
113 final WebDriverTestCase webDriverTestCase = (WebDriverTestCase) testInstance;
114
115 webDriverTestCase.setUseRealBrowser(realBrowser);
116 }
117 }
118 });
119
120 return extensions;
121 }
122 };
123 }
124 }