// ========================================================================== // Project: SC
.MenuScrollView Unit Test // Copyright: ©2006-2011 Strobe Inc. and contributors. // License: Licensed under MIT license (see license.js) // ========================================================================== /*globals SC
, module, test, ok, equals */
var view, pane; module(“Menu Scroll View”, {
setup: function () { SC.RunLoop.begin(); var content = ['Dogfish Head', 'Delerium', 'Smuttynose', 'Harpoon', 'Bitburger', 'Goose Island', 'Old Speckled Hen', 'Fuller\'s', 'Anchor', 'Brooklyn', 'Lagunitas', 'Coney Island']; view = SC.MenuScrollView.create({ layout: { top: 100, left: 20, height: 100, width: 100 }, contentView: SC.SourceListView.design({ content: content }) }); pane = SC.MainPane.create(); pane.appendChild(view); pane.append(); SC.RunLoop.end(); }, teardown: function () { SC.RunLoop.begin(); pane.remove(); pane.destroy(); SC.RunLoop.end(); }
});
test(“menu scroll views cannot scroll horizontally”, function () {
ok(!view.get('hasHorizontalScroller'), "the horizontal scroller doesn't exist"); ok(!view.get('canScrollHorizontal'), "The view cannot scroll horizontally.");
});
test(“menu scrollers not visible when content doesn't fill the container”, function () {
SC.RunLoop.begin(); view.setPath('contentView.content', []); SC.RunLoop.end(); ok(view.get('hasVerticalScroller'), "the vertical scrollers should exist"); equals(view.getPath('topScrollerView.isVisible'), NO, "the top vertical scroller shouldn't be visible"); equals(view.getPath('bottomScrollerView.isVisible'), NO, "the bottom vertical scroller shouldn't be visible");
});
test(“initially, only the bottom menu scroller should be visible”, function () {
equals(view.getPath('topScrollerView.isVisible'), NO, "the top scroller shouldn't be visible"); equals(view.getPath('bottomScrollerView.isVisible'), YES, "the bottom scroller should be visible");
});
// .….….….….….….….….….….….….….….. // autohidesVerticalScrollers => YES //
// Top scroller visibility test(“when setting `verticalScrollOffset` to anywhere before the scroller thickness, the top scroller will become invisible”, function () {
SC.run(function () { view.scrollTo(0, 50); }); ok(view.getPath('topScrollerView.isVisible'), "top scroller should be visible 1"); SC.run(function () { view.scrollTo(0, view.getPath('topScrollerView.scrollerThickness')); }); equals(view.get('verticalScrollOffset'), 0, "view should be at 0px scroll offset"); ok(!view.getPath('topScrollerView.isVisible'), "top scroller should NOT be visible"); SC.run(function () { view.scrollTo(0, 50); }); ok(view.getPath('topScrollerView.isVisible'), "top scroller should be visible 2"); SC.run(function () { view.scrollTo(0, view.getPath('topScrollerView.scrollerThickness') + 1); }); ok(view.getPath('topScrollerView.isVisible'), "top scroller should be visible 3"); SC.run(function () { view.scrollTo(0, 50); }); ok(view.getPath('topScrollerView.isVisible'), "top scroller should be visible 4"); SC.run(function () { view.scrollTo(0, view.getPath('topScrollerView.scrollerThickness') - 1); }); ok(!view.getPath('topScrollerView.isVisible'), "top scroller should NOT be visible");
});
// Bottom scroller visibility test(“when setting `verticalScrollOffset` to anywhere before the scroller thickness, the bottom scroller will become invisible”, function () {
var max = view.get('maximumVerticalScrollOffset'); ok(view.getPath('bottomScrollerView.isVisible'), "bottom scroller should be visible 1"); // @ bottom SC.run(function () { view.scrollTo(0, max); }); ok(!view.getPath('bottomScrollerView.isVisible'), "bottom scroller should NOT be visible"); SC.run(function () { view.scrollTo(0, 0); }); ok(view.getPath('bottomScrollerView.isVisible'), "bottom scroller should be visible 2"); // just enough so bottom is invisible SC.run(function () { view.scrollTo(0, max - view.getPath('bottomScrollerView.scrollerThickness') - 1); }); ok(view.getPath('bottomScrollerView.isVisible'), "bottom scroller should be visible 3"); SC.run(function () { view.scrollTo(0, 0); }); ok(view.getPath('bottomScrollerView.isVisible'), "bottom scroller should be visible 4"); // exactly enough for bottom to be invisible SC.run(function () { view.scrollTo(0, max - view.getPath('bottomScrollerView.scrollerThickness')); }); ok(!view.getPath('bottomScrollerView.isVisible'), "bottom scroller should NOT be visible"); SC.run(function () { view.scrollTo(0, 0); }); ok(view.getPath('bottomScrollerView.isVisible'), "bottom scroller should be visible 5"); // more than enough for bottom to be invisible SC.run(function () { view.scrollTo(0, max - view.getPath('bottomScrollerView.scrollerThickness') + 1); }); ok(!view.getPath('bottomScrollerView.isVisible'), "bottom scroller should NOT be visible");
});
test(“when the top scroller becomes visible, the vertical scroll offset is adjusted by the scroller thickness”, function () {
SC.run(function () { view.scrollBy(0, 1); }); var thickness = view.getPath('topScrollerView.scrollerThickness'); // check for adjustment equals(view.get('verticalScrollOffset'), 1 + thickness, "the offset should be the scroller thickness + 1"); // shouldn't adjust this time SC.run(function () { view.scrollBy(0, 1); }); equals(view.get('verticalScrollOffset'), 2 + thickness, "the offset should be the scroller thickness + 2"); // shouldn't adjust this time SC.run(function () { view.scrollBy(0, -1); }); equals(view.get('verticalScrollOffset'), 1 + thickness, "the offset should be the scroller thickness + 1"); // check for adjustment SC.run(function () { view.scrollBy(0, -1); }); equals(view.get('verticalScrollOffset'), 0, "the offset should be 0px");
});