UNPKG

wowjs-shadow

Version:

This Fork it's for using HTMLElements instead of string selectors in ScrollContainer property, which that means that you can pass Elements that are not reachable by selectors such as Elements inside Shadow Dom.

333 lines (295 loc) 10.3 kB
WOW = require '../../src/wow.coffee'; describe 'WOW', -> # Time to wait after each scroll event: # (This should be >= the interval used by the plugin.) timeout = 100 # Height of the PhantomJS window: winHeight = 300 describe 'smoke test', -> it 'exists', -> expect WOW .toBeDefined() it "has an 'init' method", -> expect new WOW().init .toBeDefined() describe 'simple test environment', -> beforeEach -> loadFixtures 'simple.html' it 'emulates window height', -> expect document.documentElement.clientHeight .toBe winHeight it 'has boxes set up for testing', -> boxHeight = 200 boxCount = $ '#simple' .children().length # Check each box height expect $('#simple').height() .toBe boxHeight*boxCount expect $('#simple-1').height() .toBe boxHeight expect $('#simple-2').height() .toBe boxHeight expect $('#simple-3').height() .toBe boxHeight expect $('#simple-4').height() .toBe boxHeight expect $('#simple-5').height() .toBe boxHeight # Check each box offset offset = $('#simple').offset().top expect $('#simple-1').offset().top .toBe offset + boxHeight*0 expect $('#simple-2').offset().top .toBe offset + boxHeight*1 expect $('#simple-3').offset().top .toBe offset + boxHeight*2 expect $('#simple-4').offset().top .toBe offset + boxHeight*3 expect $('#simple-5').offset().top .toBe offset + boxHeight*4 style = $('#simple-5')[0].style expect style.background .toBe 'yellow' expect style.color .toBe 'red' describe 'library behaviour', -> wow = null beforeEach (done) -> loadFixtures 'simple.html' (wow = new WOW).init() setTimeout -> done() , timeout it 'animates elements that are fully visible on the page', -> expect $ '#simple-1' .toHaveClass 'animated' expect $('#simple-1').css 'visibility' .toBe 'visible' it "does not touch elements that don't have the marker class", -> expect $ '#simple-2' .not.toHaveClass 'animated' expect $('#simple-2').css 'visibility' .toBe 'visible' it 'does not animate elements not yet visible on the page', -> expect $ '#simple-3' .not.toHaveClass 'animated' expect $('#simple-3').css 'visibility' .not.toBe 'visible' expect $ '#simple-4' .not.toHaveClass 'animated' expect $('#simple-4').css 'visibility' .not.toBe 'visible' it 'animates elements after scrolling down and they become visible', (done) -> # Scroll down so that 150px of #simple-3 becomes visible. window.scrollTo 0, $('#simple-3').offset().top - winHeight + 150 setTimeout -> expect $ '#simple-3' .toHaveClass 'animated' expect $('#simple-3').css 'visibility' .toBe 'visible' expect $ '#simple-4' .not.toHaveClass 'animated' expect $('#simple-4').css 'visibility' .not.toBe 'visible' # Scroll down so that 150px of #simple-4 becomes visible. window.scrollTo 0, $('#simple-4').offset().top - winHeight + 150 setTimeout -> expect $ '#simple-4' .toHaveClass 'animated' expect $('#simple-4').css 'visibility' .toBe 'visible' done() , timeout , timeout it 'does not tamper with the style attribute', (done) -> # Scroll down so that 150px of #simple-5 becomes visible. window.scrollTo 0, $('#simple-5').offset().top - winHeight + 150 setTimeout -> expect $ '#simple-5' .toHaveClass 'animated' expect $('#simple-5').css 'visibility' .toBe 'visible' expect $('#simple-5')[0].style.background .toBe 'yellow' expect $('#simple-5')[0].style.color .toBe 'red' done() , timeout it 'works with asynchronously loaded content', (done) -> $ '#simple' .append $ '<div/>', id: 'simple-6' class: 'wow' wow.sync() # Scroll down so that 150px of #simple-6 becomes visible. window.scrollTo 0, $('#simple-6').offset().top - winHeight + 150 setTimeout -> expect $ '#simple-6' .toHaveClass 'animated' expect $('#simple-6').css 'visibility' .toBe 'visible' done() , timeout it 'works with asynchronously loaded nested content', (done) -> $ '#simple' .append $ '<div/>' .children() .first() .append $ '<div/>', id: 'simple-7' class: 'wow' wow.sync() # Scroll down so that 150px of #simple-7 becomes visible. window.scrollTo 0, $('#simple-7').offset().top - winHeight + 150 setTimeout -> expect $ '#simple-7' .toHaveClass 'animated' expect $('#simple-7').css 'visibility' .toBe 'visible' done() , timeout describe 'custom test environment', -> beforeEach -> loadFixtures 'custom.html' it 'emulates window height', -> expect document.documentElement.clientHeight .toBe winHeight it 'has boxes set up for testing', -> # Check each box height expect $('#custom').height() .toBe 800 expect $('#custom-1').height() .toBe 200 expect $('#custom-2').height() .toBe 200 expect $('#custom-3').height() .toBe 200 expect $('#custom-4').height() .toBe 200 # Check each box offset offset = $('#custom').offset().top expect $('#custom-1').offset().top .toBe offset + 200*0 expect $('#custom-2').offset().top .toBe offset + 200*1 expect $('#custom-3').offset().top .toBe offset + 200*2 expect $('#custom-4').offset().top .toBe offset + 200*3 describe 'library behaviour with custom settings', -> called = false beforeEach (done) -> called = false loadFixtures 'custom.html' new WOW boxClass: 'block' animateClass: 'fancy' offset: 10 callback: -> called = true .init() # Trigger custom event on dom object, event name is boxClass value $('.block').on 'block', -> $(this).addClass('triggered') setTimeout -> done() , timeout it "creates two instances of the WOW.js with different configs", -> wow1 = new WOW boxClass: 'block1' animateClass: 'fancy1' offset: 10 wow2 = new WOW boxClass: 'block2' animateClass: 'fancy2' offset: 20 expect wow1.config.boxClass .toBe "block1" expect wow1.config.animateClass .toBe "fancy1" expect wow1.config.offset .toBe 10 it "does not touch elements that don't have the marker class", (done) -> # Scroll down so that 15px of #custom-1 becomes visible. window.scrollTo 0, $('#custom-1').offset().top - winHeight + 15 setTimeout -> expect $ '#custom-1' .not.toHaveClass 'fancy' done() , timeout it "animates elements that are partially visible on the page based on the 'offset' config", (done) -> setTimeout -> # Scroll down so that 5px of #custom-2 becomes visible. window.scrollTo 0, $('#custom-2').offset().top - winHeight + 5 expect $ '#custom-2' .not.toHaveClass 'fancy' window.scrollTo 0, $('#custom-2').offset().top - winHeight + 15 setTimeout -> # Scroll down so that 15px of #custom-2 becomes visible. expect $ '#custom-2' .toHaveClass 'fancy' expect $('#custom-2').css 'visibility' .toBe 'visible' done() , timeout , timeout it 'does not animate elements not yet visible on the page', -> expect $ '#custom-3' .not.toHaveClass 'fancy' expect $ '#custom-4' .not.toHaveClass 'fancy' it 'animates elements after scrolling down and they become visible', (done) -> # Scroll down so that 150px of #custom-3 becomes visible. window.scrollTo 0, $('#custom-3').offset().top - winHeight + 150 setTimeout -> expect $ '#custom-3' .toHaveClass 'fancy' expect $('#custom-3').css 'visibility' .toBe 'visible' expect $('#custom-3')[0].style.webkitAnimationIterationCount .toBe '2' expect $ '#custom-4' .not.toHaveClass 'fancy' # Scroll down so that 150px of #custom-4 becomes visible. window.scrollTo 0, $('#custom-4').offset().top - winHeight + 150 setTimeout -> expect $ '#custom-4' .toHaveClass 'fancy' expect $('#custom-4').css 'visibility' .toBe 'visible' expect $('#custom-4')[0].style.webkitAnimationIterationCount .toBe 'infinite' expect $('#custom-4')[0].style.webkitAnimationDuration .toBe '2s' expect $('#custom-4')[0].style.webkitAnimationDelay .toBe '1s' done() , timeout , timeout it "fires the callback", (done) -> called = false # reset # Scroll down so that 150px of #custom-3 becomes visible. window.scrollTo 0, $('#custom-3').offset().top - winHeight + 150 setTimeout -> expect called .toBe true done() , timeout it 'fires the callback on the visible element', (done) -> # Scroll down so that 150px of #custom-3 becomes visible. window.scrollTo 0, $('#custom-3').offset().top - winHeight + 150 setTimeout -> expect $ '#custom-3' .toHaveClass 'triggered' expect $ '#custom-4' .not.toHaveClass 'triggered' # Scroll down so that 150px of #custom-4 becomes visible. window.scrollTo 0, $('#custom-4').offset().top - winHeight + 150 setTimeout -> expect $ '#custom-3' .toHaveClass 'triggered' expect $ '#custom-4' .toHaveClass 'triggered' done() , timeout , timeout