summaryrefslogtreecommitdiffstats
path: root/tests/rustdoc-gui/sidebar-source-code-display.goml
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/rustdoc-gui/sidebar-source-code-display.goml215
1 files changed, 215 insertions, 0 deletions
diff --git a/tests/rustdoc-gui/sidebar-source-code-display.goml b/tests/rustdoc-gui/sidebar-source-code-display.goml
new file mode 100644
index 000000000..f3eb8ff76
--- /dev/null
+++ b/tests/rustdoc-gui/sidebar-source-code-display.goml
@@ -0,0 +1,215 @@
+// This test ensures that the elements in the sidebar are displayed correctly.
+javascript: false
+goto: "file://" + |DOC_PATH| + "/src/test_docs/lib.rs.html"
+// Since the javascript is disabled, there shouldn't be a toggle.
+assert-false: "#src-sidebar-toggle"
+wait-for-css: (".sidebar", {"display": "none"})
+
+// Let's retry with javascript enabled.
+javascript: true
+reload:
+wait-for: "#src-sidebar-toggle"
+assert-css: ("#src-sidebar-toggle", {"visibility": "visible"})
+assert-css: (".sidebar > *:not(#src-sidebar-toggle)", {"visibility": "hidden"})
+// Let's expand the sidebar now.
+click: "#src-sidebar-toggle"
+wait-for-css: ("#src-sidebar-toggle", {"visibility": "visible"})
+
+// We now check that opening the sidebar and clicking a link will leave it open.
+// The behavior here on desktop is different than the behavior on mobile,
+// but since the sidebar doesn't fill the entire screen here, it makes sense to have the
+// sidebar stay resident.
+wait-for-css: (".sidebar", {"width": "300px"})
+assert-local-storage: {"rustdoc-source-sidebar-show": "true"}
+click: ".sidebar a.selected"
+goto: "file://" + |DOC_PATH| + "/src/test_docs/lib.rs.html"
+wait-for-css: (".sidebar", {"width": "300px"})
+assert-local-storage: {"rustdoc-source-sidebar-show": "true"}
+
+// Now we check the display of the sidebar items.
+show-text: true
+
+define-function: (
+ "check-colors",
+ (
+ theme, color, color_hover, background, background_hover, background_toggle,
+ background_toggle_hover,
+ ),
+ block {
+ local-storage: {"rustdoc-theme": |theme|, "rustdoc-use-system-theme": "false"}
+ reload:
+ wait-for-css: ("#src-sidebar-toggle", {"visibility": "visible"})
+ assert-css: (
+ "#source-sidebar details[open] > .files a.selected",
+ {"color": |color_hover|, "background-color": |background|},
+ )
+
+ // Without hover or focus.
+ assert-css: ("#src-sidebar-toggle > button", {"background-color": |background_toggle|})
+ // With focus.
+ focus: "#src-sidebar-toggle > button"
+ assert-css: (
+ "#src-sidebar-toggle > button:focus",
+ {"background-color": |background_toggle_hover|},
+ )
+ focus: ".search-input"
+ // With hover.
+ move-cursor-to: "#src-sidebar-toggle > button"
+ assert-css: (
+ "#src-sidebar-toggle > button:hover",
+ {"background-color": |background_toggle_hover|},
+ )
+
+ // Without hover or focus.
+ assert-css: (
+ "#source-sidebar details[open] > .files a:not(.selected)",
+ {"color": |color|, "background-color": |background_toggle|},
+ )
+ // With focus.
+ focus: "#source-sidebar details[open] > .files a:not(.selected)"
+ wait-for-css: (
+ "#source-sidebar details[open] > .files a:not(.selected):focus",
+ {"color": |color_hover|, "background-color": |background_hover|},
+ )
+ focus: ".search-input"
+ // With hover.
+ move-cursor-to: "#source-sidebar details[open] > .files a:not(.selected)"
+ assert-css: (
+ "#source-sidebar details[open] > .files a:not(.selected):hover",
+ {"color": |color_hover|, "background-color": |background_hover|},
+ )
+
+ // Without hover or focus.
+ assert-css: (
+ "#source-sidebar .dir-entry summary",
+ {"color": |color|, "background-color": |background_toggle|},
+ )
+ // With focus.
+ focus: "#source-sidebar .dir-entry summary"
+ wait-for-css: (
+ "#source-sidebar .dir-entry summary:focus",
+ {"color": |color_hover|, "background-color": |background_hover|},
+ )
+ focus: ".search-input"
+ // With hover.
+ move-cursor-to: "#source-sidebar .dir-entry summary"
+ assert-css: (
+ "#source-sidebar .dir-entry summary:hover",
+ {"color": |color_hover|, "background-color": |background_hover|},
+ )
+
+ // Without hover or focus.
+ assert-css: (
+ "#source-sidebar details[open] > .folders > details > summary",
+ {"color": |color|, "background-color": |background_toggle|},
+ )
+ // With focus.
+ focus: "#source-sidebar details[open] > .folders > details > summary"
+ wait-for-css: (
+ "#source-sidebar details[open] > .folders > details > summary:focus",
+ {"color": |color_hover|, "background-color": |background_hover|},
+ )
+ focus: ".search-input"
+ // With hover.
+ move-cursor-to: "#source-sidebar details[open] > .folders > details > summary"
+ assert-css: (
+ "#source-sidebar details[open] > .folders > details > summary:hover",
+ {"color": |color_hover|, "background-color": |background_hover|},
+ )
+ },
+)
+
+call-function: ("check-colors", {
+ "theme": "light",
+ "color": "rgb(0, 0, 0)",
+ "color_hover": "rgb(0, 0, 0)",
+ "background": "rgb(255, 255, 255)",
+ "background_hover": "rgb(224, 224, 224)",
+ "background_toggle": "rgba(0, 0, 0, 0)",
+ "background_toggle_hover": "rgb(224, 224, 224)",
+})
+call-function: ("check-colors", {
+ "theme": "dark",
+ "color": "rgb(221, 221, 221)",
+ "color_hover": "rgb(221, 221, 221)",
+ "background": "rgb(51, 51, 51)",
+ "background_hover": "rgb(68, 68, 68)",
+ "background_toggle": "rgba(0, 0, 0, 0)",
+ "background_toggle_hover": "rgb(103, 103, 103)",
+})
+call-function: ("check-colors", {
+ "theme": "ayu",
+ "color": "rgb(197, 197, 197)",
+ "color_hover": "rgb(255, 180, 76)",
+ "background": "rgb(20, 25, 31)",
+ "background_hover": "rgb(20, 25, 31)",
+ "background_toggle": "rgba(0, 0, 0, 0)",
+ "background_toggle_hover": "rgba(70, 70, 70, 0.33)",
+})
+
+// Now checking on mobile devices.
+size: (500, 700)
+reload:
+// Waiting for the sidebar to be displayed...
+wait-for-css: ("#src-sidebar-toggle", {"visibility": "visible"})
+
+// We now check it takes the full size of the display.
+assert-property: ("body", {"clientWidth": "500", "clientHeight": "700"})
+assert-property: (".sidebar", {"clientWidth": "500", "clientHeight": "700"})
+
+// We now check the display of the toggle once the sidebar is expanded.
+assert-property: ("#src-sidebar-toggle", {"clientWidth": "500", "clientHeight": "39"})
+assert-css: (
+ "#src-sidebar-toggle",
+ {
+ "border-top-width": "0px",
+ "border-right-width": "0px",
+ "border-left-width": "0px",
+ "border-bottom-width": "1px",
+ },
+)
+
+// We now check that the scroll position is kept when opening the sidebar.
+click: "#src-sidebar-toggle"
+wait-for-css: (".sidebar", {"left": "-1000px"})
+// We scroll to line 117 to change the scroll position.
+scroll-to: '//*[@id="117"]'
+assert-window-property: {"pageYOffset": "2542"}
+// Expanding the sidebar...
+click: "#src-sidebar-toggle"
+wait-for-css: (".sidebar", {"left": "0px"})
+click: "#src-sidebar-toggle"
+wait-for-css: (".sidebar", {"left": "-1000px"})
+// The "scrollTop" property should be the same.
+assert-window-property: {"pageYOffset": "2542"}
+
+// We now check that the scroll position is restored if the window is resized.
+size: (500, 700)
+click: "#src-sidebar-toggle"
+wait-for-css: ("#source-sidebar", {"visibility": "visible"})
+assert-window-property: {"pageYOffset": "0"}
+size: (900, 900)
+assert-window-property: {"pageYOffset": "2542"}
+size: (500, 700)
+click: "#src-sidebar-toggle"
+wait-for-css: ("#source-sidebar", {"visibility": "hidden"})
+
+// We now check that opening the sidebar and clicking a link will close it.
+// The behavior here on mobile is different than the behavior on desktop,
+// but common sense dictates that if you have a list of files that fills the entire screen, and
+// you click one of them, you probably want to actually see the file's contents, and not just
+// make it the current selection.
+click: "#src-sidebar-toggle"
+wait-for-css: ("#source-sidebar", {"visibility": "visible"})
+assert-local-storage: {"rustdoc-source-sidebar-show": "true"}
+click: ".sidebar a.selected"
+goto: "file://" + |DOC_PATH| + "/src/test_docs/lib.rs.html"
+wait-for-css: ("#source-sidebar", {"visibility": "hidden"})
+assert-local-storage: {"rustdoc-source-sidebar-show": "false"}
+// Resize back to desktop size, to check that the sidebar doesn't spontaneously open.
+size: (1000, 1000)
+wait-for-css: ("#source-sidebar", {"visibility": "hidden"})
+assert-local-storage: {"rustdoc-source-sidebar-show": "false"}
+click: "#src-sidebar-toggle"
+wait-for-css: ("#source-sidebar", {"visibility": "visible"})
+assert-local-storage: {"rustdoc-source-sidebar-show": "true"}