Skip to content

Commit

Permalink
Rollup merge of rust-lang#109633 - GuillaumeGomez:fix-go-to-only-sett…
Browse files Browse the repository at this point in the history
…ing, r=notriddle

Fix "Directly go to item in search if there is only one result" setting

Part of rust-lang#66181.

The setting was actually broken, so I fixed it when I added the GUI test.

r? `@notriddle`
  • Loading branch information
matthiaskrgr authored Mar 27, 2023
2 parents 04b8523 + bc9eec0 commit b39db70
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 5 deletions.
6 changes: 1 addition & 5 deletions src/librustdoc/html/static/js/search.js
Original file line number Diff line number Diff line change
Expand Up @@ -1946,11 +1946,7 @@ function initSearch(rawSearchIndex) {
function showResults(results, go_to_first, filterCrates) {
const search = searchState.outputElement();
if (go_to_first || (results.others.length === 1
&& getSettingValue("go-to-only-result") === "true"
// By default, the search DOM element is "empty" (meaning it has no children not
// text content). Once a search has been run, it won't be empty, even if you press
// ESC or empty the search input (which also "cancels" the search).
&& (!search.firstChild || search.firstChild.innerText !== searchState.loadingText))
&& getSettingValue("go-to-only-result") === "true")
) {
const elem = document.createElement("a");
elem.href = results.others[0].href;
Expand Down
63 changes: 63 additions & 0 deletions tests/rustdoc-gui/setting-go-to-only-result.goml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Checks that the setting "Directly go to item in search if there is only one result " is working as expected.

define-function: (
"check-setting",
(storage_value, setting_attribute_value),
block {
assert-local-storage: {"rustdoc-go-to-only-result": |storage_value|}
click: "#settings-menu"
wait-for: "#settings"
assert-property: ("#go-to-only-result", {"checked": |setting_attribute_value|})
}
)

goto: "file://" + |DOC_PATH| + "/lib2/index.html"

call-function: ("check-setting", {
"storage_value": null,
"setting_attribute_value": "false",
})

// By default, the search doesn't automatically go to the page if there is only one result.
goto: "file://" + |DOC_PATH| + "/lib2/index.html?search=HasALongTraitWithParams"
// It will timeout if the setting isn't working.
wait-for: "#search"
assert-document-property: ({"URL": "/lib2/index.html"}, CONTAINS)

// Now we change its value.
click: "#settings-menu"
wait-for: "#settings"
click: "#go-to-only-result"
assert-local-storage: {"rustdoc-go-to-only-result": "true"}

goto: "file://" + |DOC_PATH| + "/lib2/index.html"
// We enter it into the search.
write: (".search-input", "HasALongTraitWithParams")
wait-for-document-property: {"title": "HasALongTraitWithParams in lib2 - Rust"}
assert-document-property: ({"URL": "/lib2/struct.HasALongTraitWithParams.html"}, ENDS_WITH)

// We try again to see if it goes to the only result
goto: "file://" + |DOC_PATH| + "/lib2/index.html?search=HasALongTraitWithParams"
wait-for-document-property: {"title": "HasALongTraitWithParams in lib2 - Rust"}
assert-document-property: ({"URL": "/lib2/struct.HasALongTraitWithParams.html"}, ENDS_WITH)

// We check the settings
call-function: ("check-setting", {
"storage_value": "true",
"setting_attribute_value": "true",
})

// And now we re-disable the setting.
click: "#go-to-only-result"
assert-local-storage: {"rustdoc-go-to-only-result": "false"}

goto: "file://" + |DOC_PATH| + "/lib2/index.html?search=HasALongTraitWithParams"
// It will timeout if the setting isn't working.
wait-for: "#search"
assert-document-property: ({"URL": "/lib2/index.html"}, CONTAINS)

// And we check everything is back the way it was before.
call-function: ("check-setting", {
"storage_value": "false",
"setting_attribute_value": "false",
})

0 comments on commit b39db70

Please sign in to comment.