From af62a4d26092e23e745eb5cc08b310c0a8d3fb48 Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 24 Feb 2025 11:29:52 +0100 Subject: [PATCH 1/4] feat: Allow extension capability keys to contain special characters --- .../remote/options/W3CCapabilityKeys.java | 2 +- .../remote/options/BaseOptionsTest.java | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java diff --git a/src/main/java/io/appium/java_client/remote/options/W3CCapabilityKeys.java b/src/main/java/io/appium/java_client/remote/options/W3CCapabilityKeys.java index b29150311..035a91929 100644 --- a/src/main/java/io/appium/java_client/remote/options/W3CCapabilityKeys.java +++ b/src/main/java/io/appium/java_client/remote/options/W3CCapabilityKeys.java @@ -23,7 +23,7 @@ public class W3CCapabilityKeys implements Predicate { public static final W3CCapabilityKeys INSTANCE = new W3CCapabilityKeys(); private static final Predicate ACCEPTED_W3C_PATTERNS = Stream.of( - "^[\\w-]+:.*$", + "^[^:]+:.*$", "^acceptInsecureCerts$", "^browserName$", "^browserVersion$", diff --git a/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java b/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java new file mode 100644 index 000000000..56e95ab7f --- /dev/null +++ b/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java @@ -0,0 +1,26 @@ +package io.appium.java_client.remote.options; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +class BaseOptionsTest { + + + @ParameterizedTest + @CsvSource({ + "test, appium:test", + "appium:test, appium:test", + "browserName, browserName", + "digital.ai:accessKey, digital.ai:accessKey", + "digital-ai:accessKey, digital-ai:accessKey", + "::, ::", + "digital-ai:my_custom-cap:xyz, digital-ai:my_custom-cap:xyz", + "digital-ai:my_custom-cap?xyz, digital-ai:my_custom-cap?xyz", + }) + void verifyW3CMapping(String capName, String expected) { + var w3cName = BaseOptions.toW3cName(capName); + assertEquals(expected, w3cName); + } +} \ No newline at end of file From 1e5a0837b4e8e0929d9aaaaaf369a68af5781b31 Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 24 Feb 2025 12:28:27 +0100 Subject: [PATCH 2/4] Add explitly only the DOT instead of allowing all characters except the colon --- .../io/appium/java_client/remote/options/W3CCapabilityKeys.java | 2 +- .../io/appium/java_client/remote/options/BaseOptionsTest.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/io/appium/java_client/remote/options/W3CCapabilityKeys.java b/src/main/java/io/appium/java_client/remote/options/W3CCapabilityKeys.java index 035a91929..09ff1680f 100644 --- a/src/main/java/io/appium/java_client/remote/options/W3CCapabilityKeys.java +++ b/src/main/java/io/appium/java_client/remote/options/W3CCapabilityKeys.java @@ -23,7 +23,7 @@ public class W3CCapabilityKeys implements Predicate { public static final W3CCapabilityKeys INSTANCE = new W3CCapabilityKeys(); private static final Predicate ACCEPTED_W3C_PATTERNS = Stream.of( - "^[^:]+:.*$", + "^[\\w-\\.]+:.*$", "^acceptInsecureCerts$", "^browserName$", "^browserVersion$", diff --git a/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java b/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java index 56e95ab7f..d065c0568 100644 --- a/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java +++ b/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java @@ -15,7 +15,6 @@ class BaseOptionsTest { "browserName, browserName", "digital.ai:accessKey, digital.ai:accessKey", "digital-ai:accessKey, digital-ai:accessKey", - "::, ::", "digital-ai:my_custom-cap:xyz, digital-ai:my_custom-cap:xyz", "digital-ai:my_custom-cap?xyz, digital-ai:my_custom-cap?xyz", }) From 338f05383da497f67fc1d2a8a31184f8fd5bd364 Mon Sep 17 00:00:00 2001 From: Alexander <2487708+alexanderkaiser@users.noreply.github.com> Date: Mon, 24 Feb 2025 14:25:17 +0100 Subject: [PATCH 3/4] CheckStyle: re-format new code to comply with appium-style.xml --- .../remote/options/BaseOptionsTest.java | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java b/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java index d065c0568..5ce8f5a93 100644 --- a/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java +++ b/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java @@ -1,25 +1,24 @@ package io.appium.java_client.remote.options; -import static org.junit.jupiter.api.Assertions.*; - import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; -class BaseOptionsTest { +import static org.junit.jupiter.api.Assertions.assertEquals; +class BaseOptionsTest { - @ParameterizedTest - @CsvSource({ - "test, appium:test", - "appium:test, appium:test", - "browserName, browserName", - "digital.ai:accessKey, digital.ai:accessKey", - "digital-ai:accessKey, digital-ai:accessKey", - "digital-ai:my_custom-cap:xyz, digital-ai:my_custom-cap:xyz", - "digital-ai:my_custom-cap?xyz, digital-ai:my_custom-cap?xyz", - }) - void verifyW3CMapping(String capName, String expected) { - var w3cName = BaseOptions.toW3cName(capName); - assertEquals(expected, w3cName); - } + @ParameterizedTest + @CsvSource({ + "test, appium:test", + "appium:test, appium:test", + "browserName, browserName", + "digital.ai:accessKey, digital.ai:accessKey", + "digital-ai:accessKey, digital-ai:accessKey", + "digital-ai:my_custom-cap:xyz, digital-ai:my_custom-cap:xyz", + "digital-ai:my_custom-cap?xyz, digital-ai:my_custom-cap?xyz", + }) + void verifyW3CMapping(String capName, String expected) { + var w3cName = BaseOptions.toW3cName(capName); + assertEquals(expected, w3cName); + } } \ No newline at end of file From 896ffebf88e8062957d5f0ef1be5542534e31826 Mon Sep 17 00:00:00 2001 From: Alexander <2487708+alexanderkaiser@users.noreply.github.com> Date: Tue, 25 Feb 2025 08:59:10 +0100 Subject: [PATCH 4/4] Add licence header to BaseOptionsTest.java --- .../remote/options/BaseOptionsTest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java b/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java index 5ce8f5a93..50e36818d 100644 --- a/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java +++ b/src/test/java/io/appium/java_client/remote/options/BaseOptionsTest.java @@ -1,3 +1,19 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package io.appium.java_client.remote.options; import org.junit.jupiter.params.ParameterizedTest;