From 3cced515ce64edfb2cd58987932723a7d6500faf Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 30 Sep 2025 12:52:47 -0700 Subject: [PATCH] Remove unused HTML Unit classes Remove `LocalHostWebClient` and `LocalHostWebConnectionHtmlUnitDriver` in favor of `BaseUrl` versions. See gh-46356 See gh-47322 --- .../test/htmlunit/LocalHostWebClient.java | 53 ------- .../server/test/htmlunit/package-info.java | 23 --- .../LocalHostWebConnectionHtmlUnitDriver.java | 69 --------- .../test/htmlunit/webdriver/package-info.java | 23 --- .../htmlunit/LocalHostWebClientTests.java | 87 ----------- ...lHostWebConnectionHtmlUnitDriverTests.java | 144 ------------------ 6 files changed, 399 deletions(-) delete mode 100644 module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/LocalHostWebClient.java delete mode 100644 module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/package-info.java delete mode 100644 module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/webdriver/LocalHostWebConnectionHtmlUnitDriver.java delete mode 100644 module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/webdriver/package-info.java delete mode 100644 module/spring-boot-web-server-test/src/test/java/org/springframework/boot/web/server/test/htmlunit/LocalHostWebClientTests.java delete mode 100644 module/spring-boot-web-server-test/src/test/java/org/springframework/boot/web/server/test/htmlunit/webdriver/LocalHostWebConnectionHtmlUnitDriverTests.java diff --git a/module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/LocalHostWebClient.java b/module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/LocalHostWebClient.java deleted file mode 100644 index 2e9bea7ab03..00000000000 --- a/module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/LocalHostWebClient.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2012-present the original author or authors. - * - * Licensed 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 - * - * https://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.springframework.boot.web.server.test.htmlunit; - -import java.io.IOException; - -import org.htmlunit.FailingHttpStatusCodeException; -import org.htmlunit.Page; -import org.htmlunit.WebClient; - -import org.springframework.core.env.Environment; -import org.springframework.util.Assert; - -/** - * {@link WebClient} will automatically prefix relative URLs with - * localhost:${local.server.port}. - * - * @author Phillip Webb - * @since 4.0.0 - */ -public class LocalHostWebClient extends WebClient { - - private final Environment environment; - - public LocalHostWebClient(Environment environment) { - Assert.notNull(environment, "'environment' must not be null"); - this.environment = environment; - } - - @Override - public

P getPage(String url) throws IOException, FailingHttpStatusCodeException { - if (url.startsWith("/")) { - String port = this.environment.getProperty("local.server.port", "8080"); - url = "http://localhost:" + port + url; - } - return super.getPage(url); - } - -} diff --git a/module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/package-info.java b/module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/package-info.java deleted file mode 100644 index 9136ae6ce0e..00000000000 --- a/module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/package-info.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2012-present the original author or authors. - * - * Licensed 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 - * - * https://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. - */ - -/** - * HtmlUnit support classes. - */ -@NullMarked -package org.springframework.boot.web.server.test.htmlunit; - -import org.jspecify.annotations.NullMarked; diff --git a/module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/webdriver/LocalHostWebConnectionHtmlUnitDriver.java b/module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/webdriver/LocalHostWebConnectionHtmlUnitDriver.java deleted file mode 100644 index 2620fbafd05..00000000000 --- a/module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/webdriver/LocalHostWebConnectionHtmlUnitDriver.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2012-present the original author or authors. - * - * Licensed 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 - * - * https://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.springframework.boot.web.server.test.htmlunit.webdriver; - -import org.htmlunit.BrowserVersion; -import org.openqa.selenium.Capabilities; - -import org.springframework.core.env.Environment; -import org.springframework.test.web.servlet.htmlunit.webdriver.WebConnectionHtmlUnitDriver; -import org.springframework.util.Assert; - -/** - * {@link LocalHostWebConnectionHtmlUnitDriver} will automatically prefix relative URLs - * with localhost:${local.server.port}. - * - * @author Phillip Webb - * @since 4.0.0 - */ -public class LocalHostWebConnectionHtmlUnitDriver extends WebConnectionHtmlUnitDriver { - - private final Environment environment; - - public LocalHostWebConnectionHtmlUnitDriver(Environment environment) { - Assert.notNull(environment, "'environment' must not be null"); - this.environment = environment; - } - - public LocalHostWebConnectionHtmlUnitDriver(Environment environment, boolean enableJavascript) { - super(enableJavascript); - Assert.notNull(environment, "'environment' must not be null"); - this.environment = environment; - } - - public LocalHostWebConnectionHtmlUnitDriver(Environment environment, BrowserVersion browserVersion) { - super(browserVersion); - Assert.notNull(environment, "'environment' must not be null"); - this.environment = environment; - } - - public LocalHostWebConnectionHtmlUnitDriver(Environment environment, Capabilities capabilities) { - super(capabilities); - Assert.notNull(environment, "'environment' must not be null"); - this.environment = environment; - } - - @Override - public void get(String url) { - if (url.startsWith("/")) { - String port = this.environment.getProperty("local.server.port", "8080"); - url = "http://localhost:" + port + url; - } - super.get(url); - } - -} diff --git a/module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/webdriver/package-info.java b/module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/webdriver/package-info.java deleted file mode 100644 index c87752c6279..00000000000 --- a/module/spring-boot-web-server-test/src/main/java/org/springframework/boot/web/server/test/htmlunit/webdriver/package-info.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2012-present the original author or authors. - * - * Licensed 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 - * - * https://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. - */ - -/** - * Selenium support classes. - */ -@NullMarked -package org.springframework.boot.web.server.test.htmlunit.webdriver; - -import org.jspecify.annotations.NullMarked; diff --git a/module/spring-boot-web-server-test/src/test/java/org/springframework/boot/web/server/test/htmlunit/LocalHostWebClientTests.java b/module/spring-boot-web-server-test/src/test/java/org/springframework/boot/web/server/test/htmlunit/LocalHostWebClientTests.java deleted file mode 100644 index 96aa5f51a9c..00000000000 --- a/module/spring-boot-web-server-test/src/test/java/org/springframework/boot/web/server/test/htmlunit/LocalHostWebClientTests.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2012-present the original author or authors. - * - * Licensed 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 - * - * https://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.springframework.boot.web.server.test.htmlunit; - -import java.io.IOException; -import java.net.URL; - -import org.htmlunit.StringWebResponse; -import org.htmlunit.WebClient; -import org.htmlunit.WebConnection; -import org.htmlunit.WebResponse; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.junit.jupiter.MockitoExtension; - -import org.springframework.mock.env.MockEnvironment; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.assertArg; -import static org.mockito.BDDMockito.given; -import static org.mockito.BDDMockito.then; -import static org.mockito.Mockito.mock; - -/** - * Tests for {@link LocalHostWebClient}. - * - * @author Phillip Webb - */ -@SuppressWarnings("resource") -@ExtendWith(MockitoExtension.class) -class LocalHostWebClientTests { - - @Test - void createWhenEnvironmentIsNullWillThrowException() { - assertThatIllegalArgumentException().isThrownBy(() -> new LocalHostWebClient(null)) - .withMessageContaining("'environment' must not be null"); - } - - @Test - void getPageWhenUrlIsRelativeAndNoPortWillUseLocalhost8080() throws Exception { - MockEnvironment environment = new MockEnvironment(); - WebClient client = new LocalHostWebClient(environment); - WebConnection connection = mockConnection(); - client.setWebConnection(connection); - client.getPage("/test"); - URL expectedUrl = new URL("http://localhost:8080/test"); - then(connection).should() - .getResponse(assertArg((request) -> assertThat(request.getUrl()).isEqualTo(expectedUrl))); - } - - @Test - void getPageWhenUrlIsRelativeAndHasPortWillUseLocalhostPort() throws Exception { - MockEnvironment environment = new MockEnvironment(); - environment.setProperty("local.server.port", "8181"); - WebClient client = new LocalHostWebClient(environment); - WebConnection connection = mockConnection(); - client.setWebConnection(connection); - client.getPage("/test"); - URL expectedUrl = new URL("http://localhost:8181/test"); - then(connection).should() - .getResponse(assertArg((request) -> assertThat(request.getUrl()).isEqualTo(expectedUrl))); - } - - private WebConnection mockConnection() throws IOException { - WebConnection connection = mock(WebConnection.class); - WebResponse response = new StringWebResponse("test", new URL("http://localhost")); - given(connection.getResponse(any())).willReturn(response); - return connection; - } - -} diff --git a/module/spring-boot-web-server-test/src/test/java/org/springframework/boot/web/server/test/htmlunit/webdriver/LocalHostWebConnectionHtmlUnitDriverTests.java b/module/spring-boot-web-server-test/src/test/java/org/springframework/boot/web/server/test/htmlunit/webdriver/LocalHostWebConnectionHtmlUnitDriverTests.java deleted file mode 100644 index f6c5d8ad881..00000000000 --- a/module/spring-boot-web-server-test/src/test/java/org/springframework/boot/web/server/test/htmlunit/webdriver/LocalHostWebConnectionHtmlUnitDriverTests.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright 2012-present the original author or authors. - * - * Licensed 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 - * - * https://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.springframework.boot.web.server.test.htmlunit.webdriver; - -import java.net.URL; - -import org.htmlunit.BrowserVersion; -import org.htmlunit.TopLevelWindow; -import org.htmlunit.WebClient; -import org.htmlunit.WebClientOptions; -import org.htmlunit.WebConsole; -import org.htmlunit.WebRequest; -import org.htmlunit.WebWindow; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentMatcher; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.openqa.selenium.Capabilities; - -import org.springframework.core.env.Environment; -import org.springframework.mock.env.MockEnvironment; - -import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.argThat; -import static org.mockito.BDDMockito.given; -import static org.mockito.BDDMockito.then; -import static org.mockito.Mockito.mock; - -/** - * Tests for {@link LocalHostWebConnectionHtmlUnitDriver}. - * - * @author Phillip Webb - */ -@ExtendWith(MockitoExtension.class) -class LocalHostWebConnectionHtmlUnitDriverTests { - - private final WebClient webClient; - - LocalHostWebConnectionHtmlUnitDriverTests(@Mock WebClient webClient) { - this.webClient = webClient; - given(this.webClient.getOptions()).willReturn(new WebClientOptions()); - given(this.webClient.getWebConsole()).willReturn(new WebConsole()); - WebWindow currentWindow = mock(WebWindow.class); - given(currentWindow.isClosed()).willReturn(false); - given(this.webClient.getCurrentWindow()).willReturn(currentWindow); - } - - @Test - void createWhenEnvironmentIsNullWillThrowException() { - assertThatIllegalArgumentException().isThrownBy(() -> new LocalHostWebConnectionHtmlUnitDriver(null)) - .withMessageContaining("'environment' must not be null"); - } - - @Test - void createWithJavascriptFlagWhenEnvironmentIsNullWillThrowException() { - assertThatIllegalArgumentException().isThrownBy(() -> new LocalHostWebConnectionHtmlUnitDriver(null, true)) - .withMessageContaining("'environment' must not be null"); - } - - @Test - void createWithBrowserVersionWhenEnvironmentIsNullWillThrowException() { - assertThatIllegalArgumentException() - .isThrownBy(() -> new LocalHostWebConnectionHtmlUnitDriver(null, BrowserVersion.CHROME)) - .withMessageContaining("'environment' must not be null"); - } - - @Test - void createWithCapabilitiesWhenEnvironmentIsNullWillThrowException() { - Capabilities capabilities = mock(Capabilities.class); - given(capabilities.getBrowserName()).willReturn("htmlunit"); - given(capabilities.getBrowserVersion()).willReturn("chrome"); - assertThatIllegalArgumentException() - .isThrownBy(() -> new LocalHostWebConnectionHtmlUnitDriver(null, capabilities)) - .withMessageContaining("'environment' must not be null"); - } - - @Test - void getWhenUrlIsRelativeAndNoPortWillUseLocalhost8080() throws Exception { - MockEnvironment environment = new MockEnvironment(); - LocalHostWebConnectionHtmlUnitDriver driver = new TestLocalHostWebConnectionHtmlUnitDriver(environment); - driver.get("/test"); - then(this.webClient).should() - .getPage(any(TopLevelWindow.class), requestToUrl(new URL("http://localhost:8080/test"))); - } - - @Test - void getWhenUrlIsRelativeAndHasPortWillUseLocalhostPort() throws Exception { - MockEnvironment environment = new MockEnvironment(); - environment.setProperty("local.server.port", "8181"); - LocalHostWebConnectionHtmlUnitDriver driver = new TestLocalHostWebConnectionHtmlUnitDriver(environment); - driver.get("/test"); - then(this.webClient).should() - .getPage(any(TopLevelWindow.class), requestToUrl(new URL("http://localhost:8181/test"))); - } - - private WebRequest requestToUrl(URL url) { - return argThat(new WebRequestUrlArgumentMatcher(url)); - } - - public class TestLocalHostWebConnectionHtmlUnitDriver extends LocalHostWebConnectionHtmlUnitDriver { - - TestLocalHostWebConnectionHtmlUnitDriver(Environment environment) { - super(environment); - } - - @Override - public WebClient getWebClient() { - return LocalHostWebConnectionHtmlUnitDriverTests.this.webClient; - } - - } - - private static final class WebRequestUrlArgumentMatcher implements ArgumentMatcher { - - private final URL expectedUrl; - - private WebRequestUrlArgumentMatcher(URL expectedUrl) { - this.expectedUrl = expectedUrl; - } - - @Override - public boolean matches(WebRequest argument) { - return argument.getUrl().equals(this.expectedUrl); - } - - } - -}