From e59944bd3a571b2f300da9f834c6aa38ba47f455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Sautter?= Date: Wed, 30 Oct 2024 21:22:47 +0100 Subject: [PATCH] [java] deleted the deprecated FormEncodedData --- .../selenium/remote/http/FormEncodedData.java | 95 ----------- .../remote/http/FormEncodedDataTest.java | 150 ------------------ 2 files changed, 245 deletions(-) delete mode 100644 java/src/org/openqa/selenium/remote/http/FormEncodedData.java delete mode 100644 java/test/org/openqa/selenium/remote/http/FormEncodedDataTest.java diff --git a/java/src/org/openqa/selenium/remote/http/FormEncodedData.java b/java/src/org/openqa/selenium/remote/http/FormEncodedData.java deleted file mode 100644 index 7d920e23d4694..0000000000000 --- a/java/src/org/openqa/selenium/remote/http/FormEncodedData.java +++ /dev/null @@ -1,95 +0,0 @@ -// Licensed to the Software Freedom Conservancy (SFC) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The SFC licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. 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 org.openqa.selenium.remote.http; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.UncheckedIOException; -import java.net.URLDecoder; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.concurrent.atomic.AtomicBoolean; - -@Deprecated(forRemoval = true) // should be moved to testing -public class FormEncodedData { - - public static Optional>> getData(HttpRequest request) { - try { - String contentType = request.getHeader("Content-Type"); - if (contentType == null - || !contentType.split(";")[0].trim().equals("application/x-www-form-urlencoded")) { - return Optional.empty(); - } - } catch (IllegalArgumentException | NullPointerException e) { - return Optional.empty(); - } - - // Maintain ordering of keys. - Map> data = new LinkedHashMap<>(); - AtomicBoolean eof = new AtomicBoolean(false); - Charset encoding = request.getContentEncoding(); - try (InputStream is = request.getContent().get(); - Reader reader = new InputStreamReader(is, request.getContentEncoding())) { - - while (!eof.get()) { - String key = read(reader, encoding, '=', eof); - String value = read(reader, encoding, '&', eof); - - data.computeIfAbsent(key, (k) -> new ArrayList<>()).add(value == null ? "" : value); - } - } catch (IOException e) { - throw new UncheckedIOException(e); - } - - // We want to return a Map>, not a Map> so, ugh. - Map> toReturn = new LinkedHashMap<>(); - for (Map.Entry> entry : data.entrySet()) { - toReturn.put(entry.getKey(), List.copyOf(entry.getValue())); - } - return Optional.of(Map.copyOf(toReturn)); - } - - private static String read(Reader reader, Charset charSet, char delimiter, AtomicBoolean eof) - throws IOException { - if (eof.get()) { - return null; - } - - StringBuilder builder = new StringBuilder(); - for (; ; ) { - int i = reader.read(); - if (i == -1) { - eof.set(true); - break; - } - char c = (char) i; - if (c == delimiter) { - break; - } - builder.append(c); - } - - return URLDecoder.decode(builder.toString(), charSet); - } -} diff --git a/java/test/org/openqa/selenium/remote/http/FormEncodedDataTest.java b/java/test/org/openqa/selenium/remote/http/FormEncodedDataTest.java deleted file mode 100644 index 063446a56c624..0000000000000 --- a/java/test/org/openqa/selenium/remote/http/FormEncodedDataTest.java +++ /dev/null @@ -1,150 +0,0 @@ -// Licensed to the Software Freedom Conservancy (SFC) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The SFC licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. 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 org.openqa.selenium.remote.http; - -import static java.nio.charset.StandardCharsets.UTF_8; -import static java.util.Collections.singletonList; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Fail.fail; -import static org.openqa.selenium.remote.http.Contents.bytes; -import static org.openqa.selenium.remote.http.Contents.utf8String; -import static org.openqa.selenium.remote.http.HttpMethod.GET; - -import com.google.common.collect.ImmutableMap; -import com.google.common.net.MediaType; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; - -@Tag("UnitTests") -class FormEncodedDataTest { - - @Test - void shouldRequireCorrectContentType() { - HttpRequest request = createRequest("key", "value").removeHeader("Content-Type"); - Optional>> data = FormEncodedData.getData(request); - - assertThat(data).isNotPresent(); - } - - @Test - void canReadASinglePairOfValues() { - HttpRequest request = createRequest("key", "value"); - - Optional>> data = FormEncodedData.getData(request); - - assertThat(data.get()).isEqualTo(ImmutableMap.of("key", singletonList("value"))); - } - - @Test - void canReadTwoValues() { - HttpRequest request = createRequest("key", "value", "foo", "bar"); - - Optional>> data = FormEncodedData.getData(request); - - assertThat(data.get()) - .isEqualTo(ImmutableMap.of("key", singletonList("value"), "foo", singletonList("bar"))); - } - - @Test - void shouldSetEmptyValuesToTheEmptyString() { - HttpRequest request = createRequest("key", null); - - Optional>> data = FormEncodedData.getData(request); - - assertThat(data.get()).isEqualTo(ImmutableMap.of("key", singletonList(""))); - } - - @Test - void shouldDecodeParameterNames() { - HttpRequest request = createRequest("%foo%", "value"); - - Optional>> data = FormEncodedData.getData(request); - - assertThat(data.get()).isEqualTo(ImmutableMap.of("%foo%", singletonList("value"))); - } - - @Test - void shouldDecodeParameterValues() { - HttpRequest request = createRequest("key", "%bar%"); - - Optional>> data = FormEncodedData.getData(request); - - assertThat(data.get()).isEqualTo(ImmutableMap.of("key", singletonList("%bar%"))); - } - - @Test - void shouldCollectMultipleValuesForTheSameParameterNamePreservingOrder() { - HttpRequest request = createRequest("foo", "bar", "foo", "baz"); - - Optional>> data = FormEncodedData.getData(request); - - assertThat(data.get()).isEqualTo(ImmutableMap.of("foo", Arrays.asList("bar", "baz"))); - } - - @Test - void aSingleParameterNameIsEnough() { - HttpRequest request = - new HttpRequest(GET, "/example") - .addHeader("Content-Type", MediaType.FORM_DATA.toString()) - .setContent(bytes("param".getBytes())); - - Optional>> data = FormEncodedData.getData(request); - - assertThat(data.get()).isEqualTo(ImmutableMap.of("param", singletonList(""))); - } - - private HttpRequest createRequest(String key, String value, String... others) { - if (others.length % 2 != 0) { - fail("Other parameters must be of even length"); - } - - List allStrings = new ArrayList<>(); - allStrings.add(key); - allStrings.add(value); - allStrings.addAll(Arrays.asList(others)); - - StringBuilder content = new StringBuilder(); - Iterator iterator = allStrings.iterator(); - boolean isFirst = true; - while (iterator.hasNext()) { - if (!isFirst) { - content.append("&"); - } - content.append(URLEncoder.encode(iterator.next(), UTF_8)); - - String next = iterator.next(); - if (next != null) { - content.append("=").append(URLEncoder.encode(next, UTF_8)); - } - if (isFirst) { - isFirst = false; - } - } - - return new HttpRequest(GET, "/foo") - .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8") - .setContent(utf8String(content.toString())); - } -}