Spaces:
Sleeping
Sleeping
| (function() { | |
| "use strict"; | |
| namespace = "scroll_"; | |
| testCM("bars_hidden", function(cm) { | |
| for (var i = 0;; i++) { | |
| var wrapBox = cm.getWrapperElement().getBoundingClientRect(); | |
| var scrollBox = cm.getScrollerElement().getBoundingClientRect(); | |
| is(wrapBox.bottom < scrollBox.bottom - 10); | |
| is(wrapBox.right < scrollBox.right - 10); | |
| if (i == 1) break; | |
| cm.getWrapperElement().style.height = "auto"; | |
| cm.refresh(); | |
| } | |
| }); | |
| function barH(cm) { return byClassName(cm.getWrapperElement(), "CodeMirror-hscrollbar")[0]; } | |
| function barV(cm) { return byClassName(cm.getWrapperElement(), "CodeMirror-vscrollbar")[0]; } | |
| function displayBottom(cm, scrollbar) { | |
| if (scrollbar && cm.display.scroller.offsetHeight > cm.display.scroller.clientHeight) | |
| return barH(cm).getBoundingClientRect().top; | |
| else | |
| return cm.getWrapperElement().getBoundingClientRect().bottom - 1; | |
| } | |
| function displayRight(cm, scrollbar) { | |
| if (scrollbar && cm.display.scroller.offsetWidth > cm.display.scroller.clientWidth) | |
| return barV(cm).getBoundingClientRect().left; | |
| else | |
| return cm.getWrapperElement().getBoundingClientRect().right - 1; | |
| } | |
| function testMovedownFixed(cm, hScroll) { | |
| cm.setSize("100px", "100px"); | |
| if (hScroll) cm.setValue(new Array(100).join("x")); | |
| var bottom = displayBottom(cm, hScroll); | |
| for (var i = 0; i < 30; i++) { | |
| cm.replaceSelection("x\n"); | |
| var cursorBottom = cm.cursorCoords(null, "window").bottom; | |
| is(cursorBottom <= bottom); | |
| } | |
| is(cursorBottom >= bottom - 5); | |
| } | |
| testCM("movedown_fixed", function(cm) {testMovedownFixed(cm, false);}); | |
| testCM("movedown_hscroll_fixed", function(cm) {testMovedownFixed(cm, true);}); | |
| function testMovedownResize(cm, hScroll) { | |
| cm.getWrapperElement().style.height = "auto"; | |
| if (hScroll) cm.setValue(new Array(100).join("x")); | |
| cm.refresh(); | |
| for (var i = 0; i < 30; i++) { | |
| cm.replaceSelection("x\n"); | |
| var bottom = displayBottom(cm, hScroll); | |
| var cursorBottom = cm.cursorCoords(null, "window").bottom; | |
| is(cursorBottom <= bottom); | |
| is(cursorBottom >= bottom - 5); | |
| } | |
| } | |
| testCM("movedown_resize", function(cm) {testMovedownResize(cm, false);}); | |
| testCM("movedown_hscroll_resize", function(cm) {testMovedownResize(cm, true);}); | |
| function testMoveright(cm, wrap, scroll) { | |
| cm.setSize("100px", "100px"); | |
| if (wrap) cm.setOption("lineWrapping", true); | |
| if (scroll) { | |
| cm.setValue("\n" + new Array(100).join("x\n")); | |
| cm.setCursor(Pos(0, 0)); | |
| } | |
| var right = displayRight(cm, scroll); | |
| for (var i = 0; i < 10; i++) { | |
| cm.replaceSelection("xxxxxxxxxx"); | |
| var cursorRight = cm.cursorCoords(null, "window").right; | |
| is(cursorRight < right); | |
| } | |
| if (!wrap) is(cursorRight > right - 20); | |
| } | |
| testCM("moveright", function(cm) {testMoveright(cm, false, false);}); | |
| testCM("moveright_wrap", function(cm) {testMoveright(cm, true, false);}); | |
| testCM("moveright_scroll", function(cm) {testMoveright(cm, false, true);}); | |
| testCM("moveright_scroll_wrap", function(cm) {testMoveright(cm, true, true);}); | |
| testCM("suddenly_wide", function(cm) { | |
| addDoc(cm, 100, 100); | |
| cm.replaceSelection(new Array(600).join("l ") + "\n"); | |
| cm.execCommand("goLineUp"); | |
| cm.execCommand("goLineEnd"); | |
| is(barH(cm).scrollLeft > cm.getScrollerElement().scrollLeft - 1); | |
| }); | |
| testCM("wrap_changes_height", function(cm) { | |
| var line = new Array(20).join("a ") + "\n"; | |
| cm.setValue(new Array(20).join(line)); | |
| var box = cm.getWrapperElement().getBoundingClientRect(); | |
| cm.setSize(cm.cursorCoords(Pos(0), "window").right - box.left + 2, | |
| cm.cursorCoords(Pos(19, 0), "window").bottom - box.top + 2); | |
| cm.setCursor(Pos(19, 0)); | |
| cm.replaceSelection("\n"); | |
| is(cm.cursorCoords(null, "window").bottom < displayBottom(cm, false)); | |
| }, {lineWrapping: true}); | |
| testCM("height_auto_with_gutter_expect_no_scroll_after_line_delete", function(cm) { | |
| cm.setSize(null, "auto"); | |
| cm.setValue("x\n"); | |
| cm.execCommand("goDocEnd"); | |
| cm.execCommand("delCharBefore"); | |
| eq(cm.getScrollInfo().top, 0); | |
| cm.scrollTo(null, 10); | |
| is(cm.getScrollInfo().top < 5); | |
| }, {lineNumbers: true}); | |
| })(); | |