diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index 307ce9ac3752c..7c00cf940c773 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -425,9 +425,9 @@ function hideThemeButtonState() { function handleEscape(ev) { var help = getHelpElement(false); var search = searchState.outputElement(); - if (!hasClass(help, "hidden")) { + if (help && !hasClass(help, "hidden")) { displayHelp(false, ev, help); - } else if (!hasClass(search, "hidden")) { + } else if (search && !hasClass(search, "hidden")) { searchState.clearInputTimeout(); ev.preventDefault(); searchState.hideResults(search); diff --git a/src/test/rustdoc-gui/escape-key.goml b/src/test/rustdoc-gui/escape-key.goml new file mode 100644 index 0000000000000..303dd000ba391 --- /dev/null +++ b/src/test/rustdoc-gui/escape-key.goml @@ -0,0 +1,27 @@ +goto: file://|DOC_PATH|/test_docs/index.html +// First, we check that the search results are hidden when the Escape key is pressed. +write: (".search-input", "test") +wait-for: "#search > h1" // The search element is empty before the first search +assert: ("#search", "class", "content") +assert: ("#main", "class", "content hidden") +press-key: "Escape" +assert: ("#search", "class", "content hidden") +assert: ("#main", "class", "content") + +// Check that focusing the search input brings back the search results +focus: ".search-input" +assert: ("#search", "class", "content") +assert: ("#main", "class", "content hidden") + +// Now let's check that when the help popup is displayed and we press Escape, it doesn't +// hide the search results too. +click: "#help-button" +assert: ("#help", "class", "") +press-key: "Escape" +assert: ("#help", "class", "hidden") +assert: ("#search", "class", "content") +assert: ("#main", "class", "content hidden") + +// FIXME: Once https://github.com/rust-lang/rust/pull/84462 is merged, add check to ensure +// that Escape hides the search results when a result is focused. +// press-key: "ArrowDown"