diff --git a/src/main/java/org/htmlunit/javascript/host/dom/Document.java b/src/main/java/org/htmlunit/javascript/host/dom/Document.java
index c05f1287f0..b3adbc73ea 100644
--- a/src/main/java/org/htmlunit/javascript/host/dom/Document.java
+++ b/src/main/java/org/htmlunit/javascript/host/dom/Document.java
@@ -28,9 +28,11 @@
import java.net.URL;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -1133,10 +1135,23 @@ public String getCookie() {
final StringBuilder builder = new StringBuilder();
final Set cookies = sgmlPage.getWebClient().getCookies(sgmlPage.getUrl());
+ final List visibleCookies = new ArrayList<>();
for (final Cookie cookie : cookies) {
if (cookie.isHttpOnly()) {
continue;
}
+ visibleCookies.add(cookie);
+ }
+
+ visibleCookies.sort((a, b) -> {
+ final String pathA = a.getPath();
+ final String pathB = b.getPath();
+ final int lenA = pathA == null ? 0 : pathA.length();
+ final int lenB = pathB == null ? 0 : pathB.length();
+ return Integer.compare(lenB, lenA);
+ });
+
+ for (final Cookie cookie : visibleCookies) {
if (builder.length() != 0) {
builder.append("; ");
}
diff --git a/src/test/java/org/htmlunit/CookieManagerTest.java b/src/test/java/org/htmlunit/CookieManagerTest.java
index 1961d1c275..070b141a99 100644
--- a/src/test/java/org/htmlunit/CookieManagerTest.java
+++ b/src/test/java/org/htmlunit/CookieManagerTest.java
@@ -94,25 +94,50 @@ public void orderFromServer() throws Exception {
* @throws Exception if the test fails
*/
@Test
+ @Alerts({"b=2; a=1",
+ "c=1; d=2",
+ "lA=2; lB=3; sA=1; sB=4"})
public void orderCookiesByPath_fromJs() throws Exception {
final String html = DOCTYPE_HTML
- + "\n"
+ + "\n"
+ + "\n"
+ "next page\n"
+ "";
+ final URL pageUrl = new URL(URL_FIRST, "testpages/test.html");
+ getMockWebConnection().setResponse(pageUrl, html);
getMockWebConnection().setDefaultResponse("");
final WebDriver webDriver = getWebDriver();
webDriver.manage().deleteAllCookies();
- loadPage2(html);
+ loadPage2(pageUrl, StandardCharsets.ISO_8859_1);
+ verifyTitle2(getWebDriver(), getExpectedAlerts());
+
webDriver.findElement(By.linkText("next page")).click();
final WebRequest lastRequest = getMockWebConnection().getLastWebRequest();
- assertEquals("exampleCookie=currentPath; exampleCookie=rootPath",
+ assertEquals("lA=2; lB=3; sA=1; sB=4",
lastRequest.getAdditionalHeaders().get(HttpHeader.COOKIE));
}