Skip to content

Commit

Permalink
[java] remove excessive warnings about invalid capabilities
Browse files Browse the repository at this point in the history
  • Loading branch information
titusfortner committed Jun 6, 2022
1 parent 307673b commit a7f03fa
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 30 deletions.
36 changes: 18 additions & 18 deletions java/src/org/openqa/selenium/ImmutableCapabilities.java
Expand Up @@ -23,7 +23,7 @@
import java.util.Map;
import java.util.TreeMap;

import static org.openqa.selenium.SharedCapabilitiesMethods.setCapability;
import static org.openqa.selenium.SharedCapabilitiesMethods.setCapabilityNoValidation;

public class ImmutableCapabilities implements Capabilities {

Expand All @@ -40,7 +40,7 @@ public ImmutableCapabilities(String k, Object v) {
Require.nonNull("Value", v);

Map<String, Object> delegate = new TreeMap<>();
setCapability(delegate, k, v);
setCapabilityNoValidation(delegate, k, v);

this.delegate = Collections.unmodifiableMap(delegate);
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
Expand All @@ -54,8 +54,8 @@ public ImmutableCapabilities(String k1, Object v1, String k2, Object v2) {

Map<String, Object> delegate = new TreeMap<>();

setCapability(delegate, k1, v1);
setCapability(delegate, k2, v2);
setCapabilityNoValidation(delegate, k1, v1);
setCapabilityNoValidation(delegate, k2, v2);

this.delegate = Collections.unmodifiableMap(delegate);
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
Expand All @@ -71,9 +71,9 @@ public ImmutableCapabilities(String k1, Object v1, String k2, Object v2, String

Map<String, Object> delegate = new TreeMap<>();

setCapability(delegate, k1, v1);
setCapability(delegate, k2, v2);
setCapability(delegate, k3, v3);
setCapabilityNoValidation(delegate, k1, v1);
setCapabilityNoValidation(delegate, k2, v2);
setCapabilityNoValidation(delegate, k3, v3);

this.delegate = Collections.unmodifiableMap(delegate);
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
Expand All @@ -95,10 +95,10 @@ public ImmutableCapabilities(

Map<String, Object> delegate = new TreeMap<>();

setCapability(delegate, k1, v1);
setCapability(delegate, k2, v2);
setCapability(delegate, k3, v3);
setCapability(delegate, k4, v4);
setCapabilityNoValidation(delegate, k1, v1);
setCapabilityNoValidation(delegate, k2, v2);
setCapabilityNoValidation(delegate, k3, v3);
setCapabilityNoValidation(delegate, k4, v4);

this.delegate = Collections.unmodifiableMap(delegate);
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
Expand All @@ -123,11 +123,11 @@ public ImmutableCapabilities(

Map<String, Object> delegate = new TreeMap<>();

setCapability(delegate, k1, v1);
setCapability(delegate, k2, v2);
setCapability(delegate, k3, v3);
setCapability(delegate, k4, v4);
setCapability(delegate, k5, v5);
setCapabilityNoValidation(delegate, k1, v1);
setCapabilityNoValidation(delegate, k2, v2);
setCapabilityNoValidation(delegate, k3, v3);
setCapabilityNoValidation(delegate, k4, v4);
setCapabilityNoValidation(delegate, k5, v5);

this.delegate = Collections.unmodifiableMap(delegate);
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
Expand All @@ -142,7 +142,7 @@ public ImmutableCapabilities(Capabilities other) {
Object value = other.getCapability(name);
Require.nonNull("Capability value", value);

setCapability(delegate, name, value);
setCapabilityNoValidation(delegate, name, value);
});

this.delegate = Collections.unmodifiableMap(delegate);
Expand All @@ -158,7 +158,7 @@ public ImmutableCapabilities(Map<?, ?> capabilities) {
Object v = capabilities.get(key);
Require.nonNull("Capability value", value);

setCapability(delegate, (String) key, v);
setCapabilityNoValidation(delegate, (String) key, v);
});

this.delegate = Collections.unmodifiableMap(delegate);
Expand Down
16 changes: 16 additions & 0 deletions java/src/org/openqa/selenium/MutableCapabilities.java
Expand Up @@ -101,6 +101,22 @@ public void setCapability(String key, Object value) {
SharedCapabilitiesMethods.setCapability(caps, key, value);
}

protected void setCapabilityWithoutValidation(String key, Object value) {
Require.nonNull("Capability name", key);

if (OPTION_KEYS.contains(key) && value instanceof Capabilities) {
((Capabilities) value).asMap().forEach(this::setCapability);
return;
}

if (value == null) {
caps.remove(key);
return;
}

SharedCapabilitiesMethods.setCapabilityNoValidation(caps, key, value);
}

@Override
public Map<String, Object> asMap() {
return Collections.unmodifiableMap(caps);
Expand Down
7 changes: 7 additions & 0 deletions java/src/org/openqa/selenium/SharedCapabilitiesMethods.java
Expand Up @@ -47,7 +47,14 @@ static boolean equals(Capabilities left, Capabilities right) {

static void setCapability(Map<String, Object> caps, String key, Object value) {
W3CCapabilityKeysValidator.validateCapability(key);
setCapabilityNoValidation(caps, key, value);
}

/**
* This method is temporary and intended to be used privately by other Selenium classes that are known to be
* compliant and do not need to be validated.
*/
static void setCapabilityNoValidation(Map<String, Object> caps, String key, Object value) {
if ("loggingPrefs".equals(key) && value instanceof Map) {
LoggingPreferences prefs = new LoggingPreferences();
@SuppressWarnings("unchecked") Map<String, String> prefsMap = (Map<String, String>) value;
Expand Down
4 changes: 2 additions & 2 deletions java/src/org/openqa/selenium/firefox/FirefoxOptions.java
Expand Up @@ -371,8 +371,8 @@ protected Object getExtraCapability(String capabilityName) {
public FirefoxOptions merge(Capabilities capabilities) {
Require.nonNull("Capabilities to merge", capabilities);
FirefoxOptions newInstance = new FirefoxOptions();
getCapabilityNames().forEach(name -> newInstance.setCapability(name, getCapability(name)));
capabilities.getCapabilityNames().forEach(name -> newInstance.setCapability(name, capabilities.getCapability(name)));
getCapabilityNames().forEach(name -> newInstance.setCapabilityWithoutValidation(name, getCapability(name)));
capabilities.getCapabilityNames().forEach(name -> newInstance.setCapabilityWithoutValidation(name, capabilities.getCapability(name)));
newInstance.mirror(this);
if (capabilities instanceof FirefoxOptions) {
newInstance.mirror((FirefoxOptions) capabilities);
Expand Down
23 changes: 15 additions & 8 deletions java/src/org/openqa/selenium/ie/InternetExplorerOptions.java
Expand Up @@ -237,18 +237,25 @@ private InternetExplorerOptions amend(String optionName, Object value) {

@Override
public void setCapability(String key, Object value) {
super.setCapability(key, value);

if (IE_SWITCHES.equals(key)) {
if (value instanceof List) {
value = ((List<?>) value).stream().map(Object::toString).collect(Collectors.joining(" "));
}
}

// This puts IE specific values inside se:options map
if (CAPABILITY_NAMES.contains(key)) {
// TODO - stop putting IE specific values at the top level of capabilities
// These should only be added to ieOptions to be w3c compliant
// Regardless, these are known valid for inside se:w3c so shouldn't throw warnings
super.setCapabilityWithoutValidation(key, value);

// Switches are a String for w3c instead of a List for jwp
if (IE_SWITCHES.equals(key)) {
if (value instanceof List) {
value = ((List<?>) value).stream().map(Object::toString).collect(Collectors.joining(" "));
}
}
ieOptions.put(key, value);
} else {
super.setCapability(key, value);
}

// This replaces se:options map with what is provided
if (IE_OPTIONS.equals(key)) {
ieOptions.clear();
Map<String, Object> streamFrom;
Expand Down
4 changes: 2 additions & 2 deletions java/src/org/openqa/selenium/safari/SafariOptions.java
Expand Up @@ -80,9 +80,9 @@ public SafariOptions merge(Capabilities extraCapabilities) {

SafariOptions newInstance = new SafariOptions();

getCapabilityNames().forEach(name -> newInstance.setCapability(name, getCapability(name)));
getCapabilityNames().forEach(name -> newInstance.setCapabilityWithoutValidation(name, getCapability(name)));
extraCapabilities.getCapabilityNames()
.forEach(name -> newInstance.setCapability(name, extraCapabilities.getCapability(name)));
.forEach(name -> newInstance.setCapabilityWithoutValidation(name, extraCapabilities.getCapability(name)));

return newInstance;
}
Expand Down

0 comments on commit a7f03fa

Please sign in to comment.