// This GUI test checks the sidebar scroll position when navigating.

store-value: (windowHeight, 900)
set-window-size: (1200, |windowHeight|)
go-to: |DOC_PATH| + "sidebar-scroll/index.html"
assert-property: (".sidebar-scrollbox", {"scrollTop": 0})

click: ".chapter a[href='chapter_2.html']"
assert-text: ("title", "Chapter 2 - sidebar-scroll")
wait-for-property: (".sidebar-scrollbox", {"scrollTop": 0})

click: ".chapter a[href='chapter_10.html']"
assert-text: ("title", "Chapter 10 - sidebar-scroll")
wait-for-property: (".sidebar-scrollbox", {"scrollTop": 0})

// Check that heading nav of chapter 10 pushes 11 off the bottom.
store-position: (".chapter a[href='chapter_11.html']", {"y": chapter_y})
assert: |chapter_y| > |windowHeight|

// Clicking 11 should scroll back up because it is not possible for it to stay
// in position since there are only a few lines above.
click: ".chapter a[href='chapter_11.html']"
assert-text: ("title", "Chapter 11 - sidebar-scroll")
wait-for-property: (".sidebar-scrollbox", {"scrollTop": 0})

// Scroll down a little, and click on a chapter that can stay in place when
// clicked.
scroll-element-to: (".sidebar-scrollbox", (0, 230))
store-property: (".sidebar-scrollbox", {"scrollTop": sidebarScrollTop})
assert: |sidebarScrollTop| > 0
click: ".chapter a[href='chapter_35.html']"
assert-text: ("title", "Chapter 35 - sidebar-scroll")
wait-for-property: (".sidebar-scrollbox", {"scrollTop": |sidebarScrollTop|})

// Go to the next chapter, and verify that it scrolls to the middle.
press-key: "ArrowRight"
assert-text: ("title", "Chapter 36 - sidebar-scroll")
wait-for: ".chapter a.active"
// The active link should be roughly in the middle of the screen.
store-position: (".chapter a.active", {"y": active_y})
// Approximate check just in case the browser has slight rendering differences.
assert: |active_y| > 400
assert: |active_y| < 450

// Go to something near the top, it shouldn't scroll.
store-property: (".sidebar-scrollbox", {"scrollTop": sidebarScrollTop})
click: ".chapter a[href='chapter_24.html']"
assert-text: ("title", "Chapter 24 - sidebar-scroll")
wait-for-property: (".sidebar-scrollbox", {"scrollTop": |sidebarScrollTop|})

// Go to the last chapter, and verify it is scrolled to the bottom.
go-to: |DOC_PATH| + "sidebar-scroll/chapter_100.html"
store-property: (".sidebar-scrollbox", {"scrollTop": scrollTop, "scrollHeight": scrollHeight, "clientHeight": clientHeight})
// This needs to be approximate since there is a slight difference.
assert: |scrollTop| >= |scrollHeight| - |clientHeight| - 1

// Clicking upwards shouldn't scroll.
store-property: (".sidebar-scrollbox", {"scrollTop": sidebarScrollTop})
click: ".chapter a[href='chapter_97.html']"
assert-text: ("title", "Chapter 97 - sidebar-scroll")
wait-for-property: (".sidebar-scrollbox", {"scrollTop": |sidebarScrollTop|})

store-property: (".sidebar-scrollbox", {"scrollTop": sidebarScrollTop})
click: ".chapter a[href='chapter_76.html']"
assert-text: ("title", "Chapter 76 - sidebar-scroll")
wait-for-property: (".sidebar-scrollbox", {"scrollTop": |sidebarScrollTop|})
