| // Checks that the interactions with the source code pages are working as expected. | |
| include: "utils.goml" | |
| go-to: "file://" + |DOC_PATH| + "/src/test_docs/lib.rs.html" | |
| show-text: true | |
| // Check that we can click on the line number. | |
| click: "//a[@data-nosnippet and text()='4']" // This is the anchor for line 4. | |
| // Ensure that the page URL was updated. | |
| assert-document-property: ({"URL": "lib.rs.html#4"}, ENDS_WITH) | |
| assert-attribute: ("//*[@id='4']", {"class": "line-highlighted"}) | |
| // Ensure that the default style, with the right border, isn't used. | |
| assert-css: ("//*[@id='4']", {"border-right-width": "0px"}) | |
| reload: | |
| assert-attribute: ("//*[@id='4']", {"class": "line-highlighted"}) | |
| assert-css: ("//*[@id='4']", {"border-right-width": "0px"}) | |
| // We now check that the good anchors are highlighted | |
| go-to: "file://" + |DOC_PATH| + "/src/test_docs/lib.rs.html#4-6" | |
| assert-attribute-false: ("//a[@data-nosnippet and text()='3']", {"class": "line-highlighted"}) | |
| assert-attribute: ("//a[@data-nosnippet and text()='4']", {"class": "line-highlighted"}) | |
| assert-attribute: ("//a[@data-nosnippet and text()='5']", {"class": "line-highlighted"}) | |
| assert-attribute: ("//a[@data-nosnippet and text()='6']", {"class": "line-highlighted"}) | |
| assert-attribute-false: ("//a[@data-nosnippet and text()='7']", {"class": "line-highlighted"}) | |
| define-function: ( | |
| "check-colors", | |
| [theme, color, background_color, highlight_color, highlight_background_color], | |
| block { | |
| call-function: ("switch-theme", {"theme": |theme|}) | |
| assert-css: ( | |
| "a[data-nosnippet]:not(.line-highlighted)", | |
| {"color": |color|, "background-color": |background_color|}, | |
| ALL, | |
| ) | |
| assert-css: ( | |
| "a[data-nosnippet].line-highlighted", | |
| {"color": |highlight_color|, "background-color": |highlight_background_color|}, | |
| ALL, | |
| ) | |
| }, | |
| ) | |
| call-function: ("check-colors", { | |
| "theme": "ayu", | |
| "color": "#5c6773", | |
| "background_color": "transparent", | |
| "highlight_color": "#708090", | |
| "highlight_background_color": "rgba(255, 236, 164, 0.06)", | |
| }) | |
| call-function: ("check-colors", { | |
| "theme": "dark", | |
| "color": "#3b91e2", | |
| "background_color": "transparent", | |
| "highlight_color": "#3b91e2", | |
| "highlight_background_color": "#0a042f", | |
| }) | |
| call-function: ("check-colors", { | |
| "theme": "light", | |
| "color": "#c67e2d", | |
| "background_color": "transparent", | |
| "highlight_color": "#c67e2d", | |
| "highlight_background_color": "#fdffd3", | |
| }) | |
| // This is to ensure that the content is correctly align with the line numbers. | |
| compare-elements-position-near: ("//*[@id='1']", ".rust > code > span", {"y": 2}) | |
| // Check the `href` property so that users can treat anchors as links. | |
| assert-property: ("//a[@data-nosnippet and text()='1']", { | |
| "href": |DOC_PATH| + "/src/test_docs/lib.rs.html#1" | |
| }, ENDS_WITH) | |
| assert-property: ("//a[@data-nosnippet and text()='2']", { | |
| "href": |DOC_PATH| + "/src/test_docs/lib.rs.html#2" | |
| }, ENDS_WITH) | |
| assert-property: ("//a[@data-nosnippet and text()='3']", { | |
| "href": |DOC_PATH| + "/src/test_docs/lib.rs.html#3" | |
| }, ENDS_WITH) | |
| assert-property: ("//a[@data-nosnippet and text()='4']", { | |
| "href": |DOC_PATH| + "/src/test_docs/lib.rs.html#4" | |
| }, ENDS_WITH) | |
| assert-property: ("//a[@data-nosnippet and text()='5']", { | |
| "href": |DOC_PATH| + "/src/test_docs/lib.rs.html#5" | |
| }, ENDS_WITH) | |
| assert-property: ("//a[@data-nosnippet and text()='6']", { | |
| "href": |DOC_PATH| + "/src/test_docs/lib.rs.html#6" | |
| }, ENDS_WITH) | |
| // Assert that the line numbers text is aligned to the right. | |
| assert-css: ("a[data-nosnippet]", {"text-align": "right"}, ALL) | |
| // Now let's check that clicking on something else than the line number doesn't | |
| // do anything (and certainly not add a `#NaN` to the URL!). | |
| go-to: "file://" + |DOC_PATH| + "/src/test_docs/lib.rs.html" | |
| // We use this assert-position to know where we will click. | |
| assert-position: ("//*[@id='1']", {"x": 81, "y": 141}) | |
| // We click on the left of the "1" anchor but still in the "src-line-number" `<pre>`. | |
| click: (135, 77) | |
| assert-document-property: ({"URL": "/lib.rs.html"}, ENDS_WITH) | |
| // Checking the source code sidebar. | |
| // First we "open" it. | |
| click: "#sidebar-button" | |
| assert: ".src-sidebar-expanded" | |
| // We check that the first entry of the sidebar is collapsed | |
| assert-property: ("#src-sidebar details:first-of-type", {"open": "false"}) | |
| assert-text: ("#src-sidebar details:first-of-type > summary", "extend_css") | |
| // We now click on it. | |
| click: "#src-sidebar details:first-of-type > summary" | |
| assert-property: ("#src-sidebar details:first-of-type", {"open": "true"}) | |
| // And now we collapse it again. | |
| click: "#src-sidebar details:first-of-type > summary" | |
| assert-property: ("#src-sidebar details:first-of-type", {"open": "false"}) | |
| // And open it again, since it'll be the reference we use to check positions. | |
| click: "#src-sidebar details:first-of-type > summary" | |
| assert-property: ("#src-sidebar details:first-of-type", {"open": "true"}) | |
| // Check the sidebar directory entries have a marker and spacing (desktop). | |
| store-property: ( | |
| "#src-sidebar > details:first-of-type.dir-entry[open] > .files > a", | |
| {"offsetHeight": link_height}, | |
| ) | |
| define-function: ( | |
| "check-sidebar-dir-entry", | |
| [x, y], | |
| block { | |
| assert: "details:first-of-type.dir-entry[open] > summary::marker" | |
| assert-css: ("#src-sidebar > details:first-of-type.dir-entry", {"padding-left": "4px"}) | |
| // This check ensures that the summary is only one line. | |
| assert-property: ( | |
| "#src-sidebar > details:first-of-type.dir-entry[open] > summary", | |
| {"offsetHeight": |link_height|} | |
| ) | |
| assert-position: ( | |
| "#src-sidebar > details:first-of-type.dir-entry[open] > summary", | |
| {"x": |x|, "y": |y|} | |
| ) | |
| assert-property: ( | |
| "#src-sidebar > details:first-of-type.dir-entry[open] > .files > a", | |
| {"offsetHeight": |link_height|} | |
| ) | |
| assert-position: ( | |
| "#src-sidebar > details:first-of-type.dir-entry[open] > .files > a", | |
| // left margin | |
| {"x": |x| + 27, "y": |y| + |link_height|} | |
| ) | |
| } | |
| ) | |
| store-property: (".src-sidebar-title", { | |
| "offsetHeight": source_sidebar_title_height, | |
| "offsetTop": source_sidebar_title_y, | |
| }) | |
| call-function: ("check-sidebar-dir-entry", { | |
| "x": 0, | |
| // margin = 7px | |
| "y": |source_sidebar_title_y| + |source_sidebar_title_height| + 7, | |
| }) | |
| // Check the sidebar directory entries have a marker and spacing (tablet). | |
| set-window-size: (700, 700) | |
| store-property: (".src-sidebar-title", { | |
| "offsetHeight": source_sidebar_title_height, | |
| "offsetTop": source_sidebar_title_y, | |
| }) | |
| call-function: ("check-sidebar-dir-entry", { | |
| "x": 0, | |
| // margin = 7px | |
| "y": |source_sidebar_title_y| + |source_sidebar_title_height| + 7, | |
| }) | |
| // Check the sidebar directory entries have a marker and spacing (phone). | |
| set-window-size: (450, 700) | |
| store-property: (".src-sidebar-title", { | |
| "offsetHeight": source_sidebar_title_height, | |
| "offsetTop": source_sidebar_title_y, | |
| }) | |
| call-function: ("check-sidebar-dir-entry", { | |
| "x": 0, | |
| // margin = 7px | |
| "y": |source_sidebar_title_y| + |source_sidebar_title_height| + 7, | |
| }) |