$(window).on('load', function() { //Initialize skrollr and save the instance. var s = skrollr.init({ edgeStrategy: 'set', constants: { myconst: 300, my500: function() { return 500; } }, easing: { half1: function() { return 0.5 } } }); //Counts how many assertions will be needed for the tests. var countAssertions = function(tests) { var counter = 0; for(var i = 0; i < tests.length; i++) { var curTest = tests[i]; if(curTest.styles) { $.each(curTest.styles, function() { counter++; }); } if(curTest.attributes) { $.each(curTest.attributes, function() { counter++; }); } counter += !!curTest.selector; } return counter; }; //A meta-test which runs common tests //which need synchronization of scrolling and rendering. var scrollTests = function(offset, tests) { module('at scroll position ' + offset); asyncTest('rendering', function() { //We can't run them in parallel, //because they would interfere with each others scroll top offset. stop(); expect(countAssertions(tests)); //Scroll to offset, which will cause rendering (sooner or later) s.setScrollTop(offset, true); s.on('render', function(info) { //Prevent another render event. Only need one for test. s.off('render'); for(var i = 0; i < tests.length; i++) { var curTest = tests[i]; if(curTest.styles) { $.each(curTest.styles, function(k) { QUnit.numericCSSPropertyEquals(curTest.element.css(k), curTest.styles[k], curTest.message || 'element\'s (#' + curTest.element[0].id + ') "' + k + '" CSS property is correct'); }); } if(curTest.attributes) { $.each(curTest.attributes, function(k, value) { console.log(curTest.element.prop(k)); QUnit.numericCSSPropertyEquals(curTest.element.attr(k), curTest.attributes[k], curTest.message || 'element\'s (#' + curTest.element[0].id + ') "' + k + '" attribute is correct'); }); } if(curTest.selector) { ok(curTest.element.is(curTest.selector), 'element matches "' + curTest.selector + '"'); } } start(2); }); }); }; // // Now the actual tests. // //Add one element dynamically var newElement = $('
TEST
').appendTo('body'); s.refresh(newElement[0]); module('basic stuff'); test('CSS classes present', function() { strictEqual($('.skrollable').length, 23, 'All elements have the .skrollable class'); ok($('html').is('.skrollr'), 'HTML element has skrollr class'); ok($('html').is(':not(.no-skrollr)'), 'HTML element does not have no-skrollr class'); }); scrollTests(500, [ { message: 'colons inside urls are preserved (#73)', element: $('#colon-url'), styles: { backgroundImage: 'url(https://secure.travis-ci.org/Prinzhorn/skrollr.png)' } }, { message: 'a single period is no number (#74)', element: $('#period-number'), styles: { backgroundImage: 'url(https://secure.travis-ci.org/Prinzhorn/skrollr.png?1337)' } }, { element: $('#simple-numeric'), styles: { left: '100px', top: '50px' } }, { element: $('#easing'), styles: { left: '25px' } }, { element: $('#compound-numeric'), styles: { marginTop: '30px', marginRight: '20px', marginBottom: '10px', marginLeft: '0px' } }, { element: $('#rgb-color'), styles: { color: 'rgb(50, 100, 150)' } }, { element: $('#rgba-color'), styles: { color: 'rgba(50, 100, 150, 0.5)' } }, { element: $('#hsl-color'), styles: { color: 'rgb(191, 63, 63)' } }, { element: $('#no-interpolation'), styles: { right: '100px' } }, { element: $('#anchor-2'), styles: { right: '200px' } }, { element: $('#foreign-anchor'), styles: { paddingTop: '100px', paddingRight: '100px', paddingBottom: '100px', paddingLeft: '100px' } }, { element: $('#float'), styles: { float: 'left' } }, { message: 'z-index "auto" is no converted to a number (#351)', element: $('#auto-z-index'), styles: { zIndex: 'auto' } }, { message: 'attribute interpolation', element: $('#attr'), attributes: { title: '0' } } ]); scrollTests(0, [ { element: $('#simple-numeric'), styles: { left: '-100px', top: '0px' } }, { element: $('#easing'), styles: { left: '25px' } }, { element: $('#compound-numeric'), styles: { marginTop: '0px', marginRight: '10px', marginBottom: '20px', marginLeft: '30px' } }, { element: $('#rgb-color'), styles: { color: 'rgb(0, 0, 0)' } }, { element: $('#rgba-color'), styles: { color: 'rgba(0, 0, 0, 0.2)' } }, { element: $('#hsl-color'), styles: { color: 'rgb(0, 0, 0)' } }, { element: $('#no-interpolation'), styles: { right: '0px' } }, { element: $('#end'), styles: { fontSize: '10px' } }, { element: newElement, styles: { bottom: '0px' } }, { element: $('#float'), styles: { float: 'none' } }, { message: 'z-index "auto" is no converted to a number (#351)', element: $('#auto-z-index'), styles: { zIndex: '1' } }, { message: 'attribute interpolation', element: $('#attr'), attributes: { title: '500', 'data-test': 'skrollr' } } ]); scrollTests(250, [ { element: $('#simple-numeric'), styles: { left: '0px', top: '25px' } }, { element: $('#easing'), styles: { left: '25px' } }, { element: $('#compound-numeric'), styles: { marginTop: '15px', marginRight: '15px', marginBottom: '15px', marginLeft: '15px' } }, { element: $('#rgb-color'), styles: { color: 'rgb(25, 50, 75)' } }, { element: $('#rgba-color'), styles: { color: 'rgba(25, 50, 75, 0.35)' } }, { element: $('#hsl-color'), styles: { color: 'rgb(79, 47, 47)' } }, { element: $('#no-interpolation'), styles: { right: '0px' } }, { element: $('#anchor-2'), styles: { right: '100px' } }, { element: newElement, styles: { bottom: '100px' } }, { element: $('#foreign-anchor'), styles: { paddingTop: '150px', paddingRight: '150px', paddingBottom: '150px', paddingLeft: '150px' } }, { element: $('#float'), styles: { float: 'none' } }, { message: 'attribute interpolation', element: $('#attr'), attributes: { title: '250', 'data-test': 'skrollr' } } ]); //bottom-top + 50% scrollTests(150, [ { element: $('#relative-percentage-offset'), styles: { left: '250px' } } ]); //200% scrollTests(600, [ { element: $('#percentage-offset'), styles: { left: '500px' } }, { message: 'attribute interpolation', element: $('#attr'), attributes: { 'data-test': 'skrollr-test' } } ]); //100% scrollTests(300, [ { element: $('#percentage-offset'), styles: { left: '250px' } } ]); //We scroll to a ridiculous large position so that the browser cuts it at the actual position. var maxScrollHeight = s.setScrollTop(1e5) && s.getScrollTop(); scrollTests(maxScrollHeight, [ { element: $('#anchor-1'), styles: { right: '100px' } }, { element: $('#easing'), styles: { left: '50px' } }, { element: $('#easing_with_easing_strategy'), styles: { left: '25px' } }, { element: $('#reset-strategy'), styles: { left: '1337px' } } ]); });//DOM ready