123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 |
- describe 'WOW', ->
-
- # Supress warnings:
- window.console =
- warn: ->
-
- # 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
|