diff options
Diffstat (limited to 'tests/rustdoc-gui/sidebar-source-code-display.goml')
-rw-r--r-- | tests/rustdoc-gui/sidebar-source-code-display.goml | 215 |
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"} |