|  | // This test checks the position of the `i` for the notable traits. | 
|  | include: "utils.goml" | 
|  | go-to: "file://" + |DOC_PATH| + "/test_docs/struct.NotableStructWithLongName.html" | 
|  | show-text: true | 
|  |  | 
|  | define-function: ( | 
|  | "check-notable-tooltip-position", | 
|  | [x, i_x], | 
|  | block { | 
|  | // Checking they have the same y position. | 
|  | compare-elements-position-near: ( | 
|  | "//*[@id='method.create_an_iterator_from_read']//a[normalize-space()='NotableStructWithLongName']", | 
|  | "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']", | 
|  | {"y": 1}, | 
|  | ) | 
|  | // Checking they don't have the same x position. | 
|  | compare-elements-position-false: ( | 
|  | "//*[@id='method.create_an_iterator_from_read']//a[normalize-space()='NotableStructWithLongName']", | 
|  | "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']", | 
|  | ["x"], | 
|  | ) | 
|  | // The `i` should be *after* the type. | 
|  | assert-position: ( | 
|  | "//*[@id='method.create_an_iterator_from_read']//a[normalize-space()='NotableStructWithLongName']", | 
|  | {"x": |x|}, | 
|  | ) | 
|  | assert-position: ( | 
|  | "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']", | 
|  | {"x": |i_x|}, | 
|  | ) | 
|  | }, | 
|  | ) | 
|  |  | 
|  | define-function: ( | 
|  | "check-notable-tooltip-position-complete", | 
|  | [x, i_x, popover_x], | 
|  | block { | 
|  | call-function: ("check-notable-tooltip-position", {"x": |x|, "i_x": |i_x|}) | 
|  | assert-count: ("//*[@class='tooltip popover']", 0) | 
|  | click: "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']" | 
|  | assert-count: ("//*[@class='tooltip popover']", 1) | 
|  | compare-elements-position-near: ( | 
|  | "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']", | 
|  | "//*[@class='tooltip popover']", | 
|  | {"y": 30} | 
|  | ) | 
|  | compare-elements-position-false: ( | 
|  | "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']", | 
|  | "//*[@class='tooltip popover']", | 
|  | ["x"] | 
|  | ) | 
|  | assert-position: ( | 
|  | "//*[@class='tooltip popover']", | 
|  | {"x": |popover_x|} | 
|  | ) | 
|  | click: "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']" | 
|  | move-cursor-to: "//h1" | 
|  | assert-count: ("//*[@class='tooltip popover']", 0) | 
|  | }, | 
|  | ) | 
|  |  | 
|  | // We start with a wide screen. | 
|  | set-window-size: (1100, 600) | 
|  | call-function: ("check-notable-tooltip-position-complete", { | 
|  | "x": 682, | 
|  | "i_x": 960, | 
|  | "popover_x": 468, | 
|  | }) | 
|  |  | 
|  | // Now only the `i` should be on the next line. | 
|  | set-window-size: (1055, 600) | 
|  | compare-elements-position-false: ( | 
|  | "//*[@id='method.create_an_iterator_from_read']//a[normalize-space()='NotableStructWithLongName']", | 
|  | "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']", | 
|  | ["y", "x"], | 
|  | ) | 
|  |  | 
|  | // Now both the `i` and the struct name should be on the next line. | 
|  | set-window-size: (980, 600) | 
|  | call-function: ("check-notable-tooltip-position", { | 
|  | "x": 250, | 
|  | "i_x": 528, | 
|  | }) | 
|  |  | 
|  | // Now check the colors. | 
|  | define-function: ( | 
|  | "check-colors", | 
|  | [theme, header_color, content_color, type_color, trait_color, link_color], | 
|  | block { | 
|  | go-to: "file://" + |DOC_PATH| + "/test_docs/struct.NotableStructWithLongName.html" | 
|  | // This is needed to ensure that the text color is computed. | 
|  | show-text: true | 
|  |  | 
|  | call-function: ("switch-theme", {"theme": |theme|}) | 
|  |  | 
|  | assert-css: ( | 
|  | "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']", | 
|  | {"color": |content_color|}, | 
|  | ALL, | 
|  | ) | 
|  |  | 
|  | move-cursor-to: "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']" | 
|  | wait-for-count: (".tooltip.popover", 1) | 
|  |  | 
|  | assert-css: ( | 
|  | "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']", | 
|  | {"color": |link_color|}, | 
|  | ALL, | 
|  | ) | 
|  |  | 
|  | assert-css: ( | 
|  | ".tooltip.popover h3", | 
|  | {"color": |header_color|}, | 
|  | ALL, | 
|  | ) | 
|  | assert-css: ( | 
|  | ".tooltip.popover pre", | 
|  | {"color": |content_color|}, | 
|  | ALL, | 
|  | ) | 
|  | assert-css: ( | 
|  | ".tooltip.popover pre a.struct", | 
|  | {"color": |type_color|}, | 
|  | ALL, | 
|  | ) | 
|  | assert-css: ( | 
|  | ".tooltip.popover pre a.trait", | 
|  | {"color": |trait_color|}, | 
|  | ALL, | 
|  | ) | 
|  | }, | 
|  | ) | 
|  |  | 
|  | call-function: ( | 
|  | "check-colors", | 
|  | { | 
|  | "theme": "ayu", | 
|  | "link_color": "#39afd7", | 
|  | "content_color": "#e6e1cf", | 
|  | "header_color": "#fff", | 
|  | "type_color": "#ffa0a5", | 
|  | "trait_color": "#39afd7", | 
|  | }, | 
|  | ) | 
|  |  | 
|  | call-function: ( | 
|  | "check-colors", | 
|  | { | 
|  | "theme": "dark", | 
|  | "link_color": "#d2991d", | 
|  | "content_color": "#ddd", | 
|  | "header_color": "#ddd", | 
|  | "type_color": "#2dbfb8", | 
|  | "trait_color": "#b78cf2", | 
|  | }, | 
|  | ) | 
|  |  | 
|  | call-function: ( | 
|  | "check-colors", | 
|  | { | 
|  | "theme": "light", | 
|  | "link_color": "#3873ad", | 
|  | "content_color": "black", | 
|  | "header_color": "black", | 
|  | "type_color": "#ad378a", | 
|  | "trait_color": "#6e4fc9", | 
|  | }, | 
|  | ) | 
|  |  | 
|  | // Checking on mobile now. | 
|  | set-window-size: (650, 600) | 
|  | wait-for-size: ("body", {"width": 650}) | 
|  | call-function: ("check-notable-tooltip-position-complete", { | 
|  | "x": 26, | 
|  | "i_x": 305, | 
|  | "popover_x": 0, | 
|  | }) | 
|  |  | 
|  | reload: | 
|  |  | 
|  | // Check that pressing escape works | 
|  | click: "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']" | 
|  | move-cursor-to: "//*[@class='tooltip popover']" | 
|  | assert-count: ("//*[@class='tooltip popover']", 1) | 
|  | press-key: "Escape" | 
|  | assert-count: ("//*[@class='tooltip popover']", 0) | 
|  | assert: "#method\.create_an_iterator_from_read .tooltip:focus" | 
|  |  | 
|  | // Check that clicking outside works. | 
|  | click: "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']" | 
|  | assert-count: ("//*[@class='tooltip popover']", 1) | 
|  | click: ".main-heading h1" | 
|  | assert-count: ("//*[@class='tooltip popover']", 0) | 
|  | assert-false: "#method\.create_an_iterator_from_read .tooltip:focus" | 
|  |  | 
|  | // Check that pressing tab over and over works. | 
|  | click: "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']" | 
|  | move-cursor-to: "//*[@class='tooltip popover']" | 
|  | assert-count: ("//*[@class='tooltip popover']", 1) | 
|  | press-key: "Tab" | 
|  | press-key: "Tab" | 
|  | press-key: "Tab" | 
|  | press-key: "Tab" | 
|  | press-key: "Tab" | 
|  | press-key: "Tab" | 
|  | press-key: "Tab" | 
|  | assert-count: ("//*[@class='tooltip popover']", 0) | 
|  | assert: "#method\.create_an_iterator_from_read .tooltip:focus" | 
|  |  | 
|  | define-function: ( | 
|  | "setup-popup", | 
|  | [], | 
|  | block { | 
|  | store-window-property: {"scrollY": scroll} | 
|  | click: "#method\.create_an_iterator_from_read .fn" | 
|  | // We ensure that the scroll position changed. | 
|  | assert-window-property-false: {"scrollY": |scroll|} | 
|  | // Store the new position. | 
|  | store-window-property: {"scrollY": scroll} | 
|  | click: "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']" | 
|  | wait-for: "//*[@class='tooltip popover']" | 
|  | click: ".main-heading h1" | 
|  | } | 
|  | ) | 
|  |  | 
|  | // Now we check that the focus isn't given back to the wrong item when opening | 
|  | // another popover. | 
|  | call-function: ("setup-popup", {}) | 
|  | click: ".main-heading h1" | 
|  | // We ensure we didn't come back to the previous focused item. | 
|  | assert-window-property-false: {"scrollY": |scroll|} | 
|  |  | 
|  | // Same but with Escape handling. | 
|  | call-function: ("setup-popup", {}) | 
|  | press-key: "Escape" | 
|  | // We ensure we didn't come back to the previous focused item. | 
|  | assert-window-property-false: {"scrollY": |scroll|} | 
|  |  | 
|  | // Opening the mobile sidebar should close the popover. | 
|  | set-window-size: (650, 600) | 
|  | click: "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']" | 
|  | assert-count: ("//*[@class='tooltip popover']", 1) | 
|  | click: ".sidebar-menu-toggle" | 
|  | assert: "//*[@class='sidebar shown']" | 
|  | assert-count: ("//*[@class='tooltip popover']", 0) | 
|  | assert-false: "#method\.create_an_iterator_from_read .tooltip:focus" | 
|  |  | 
|  | // Also check the focus handling for the settings button. | 
|  | set-window-size: (1100, 600) | 
|  | reload: | 
|  | assert-count: ("//*[@class='tooltip popover']", 0) | 
|  | click: "//*[@id='method.create_an_iterator_from_read']//*[@class='tooltip']" | 
|  | assert-count: ("//*[@class='tooltip popover']", 1) | 
|  | click: "rustdoc-toolbar .settings-menu a" | 
|  | wait-for: "#settings" | 
|  | assert-count: ("//*[@class='tooltip popover']", 0) | 
|  | assert-false: "#method\.create_an_iterator_from_read .tooltip:focus" |