// This file contains code to be re-used by other tests. define-function: ( "click-settings-button", [], block { store-count: ("rustdoc-topbar", __topbar_count) store-value: (__topbar_display, "none") // The `rustdoc-topbar` element is created with JS when the window size is below a given // size, however if the window size gets bigger again, the element isn't deleted, just // hidden, so we need to check for both that it exists and is visible. if: (|__topbar_count| != 0, block { store-css: ("rustdoc-topbar", {"display": __topbar_display}) }) // Open the settings menu. if: (|__topbar_display| != "none", block { // In mobile mode, this is instead the "topbar" the settings button is located into. click: "rustdoc-topbar .settings-menu" }) else: block { // We're not in mobile mode so clicking on the "normal" sidebar. click: "rustdoc-toolbar .settings-menu" } } ) define-function: ( "open-settings-menu", [], block { store-count: ("#settings", nb_settings_menu) if: (|nb_settings_menu| != 0, block { store-css: ("#settings", {"display": settings_display}) }) else: block { store-value: (settings_display, "none") } if: (|settings_display| != "block", block { call-function: ("click-settings-button", {}) // Wait for the popover to appear... wait-for-css: ("#settings", {"display": "block"}) }) } ) define-function: ( "close-settings-menu", [], block { store-count: ("#settings", nb_settings_menu) if: (|nb_settings_menu| != 0, block { store-css: ("#settings", {"display": settings_display}) }) else: block { store-value: (settings_display, "block") } if: (|settings_display| == "block", block { call-function: ("click-settings-button", {}) // Wait for the popover to disappear... wait-for-css-false: ("#settings", {"display": "block"}) }) } ) define-function: ( "switch-theme", [theme], block { // Set the theme. call-function: ("open-settings-menu", {}) // Change the setting. click: "#theme-"+ |theme| call-function: ("close-settings-menu", {}) // Ensure that the local storage was correctly updated. assert-local-storage: {"rustdoc-theme": |theme|} }, ) define-function: ( "open-search", [], block { store-count: (".search-input", __search_input_count) if: (|__search_input_count| != 0, block { store-css: ("#alternative-display", {"display": __search_input_display}) }) else: block { // Block requests with doubled `//`. // Amazon S3 doesn't support them, but other web hosts do, // and so do file:/// URLs, which means we need to block // it here if we want to avoid breaking the main docs site. // https://github.com/rust-lang/rust/issues/145646 block-network-request: "file://*//*" store-value: (__search_input_display, "none") } if: (|__search_input_display| == "none", block { // Open search click: "#search-button" wait-for: ".search-input" }) } ) define-function: ( "perform-search", [query], block { call-function: ("open-search", {}) // We empty the search input in case it wasn't empty. set-property: (".search-input", {"value": ""}) focus: ".search-input" // We write the actual query. write-into: (".search-input", |query|) press-key: 'Enter' // wait for the search to start wait-for: "#search-tabs" // then wait for it to finish wait-for-false: "#search-tabs .count.loading" } ) define-function: ( "switch-line-numbers-setting", [expected_status], block { call-function: ("open-settings-menu", {}) // We change the line numbers setting. click: "#line-numbers" call-function: ("close-settings-menu", {}) assert-local-storage: {"rustdoc-line-numbers": |expected_status|} } )