fakeWindow = scroll: sinon.spy() scrollTop: sinon.stub().returns(0) height: sinon.stub().returns(40) element = jQuery('
') log = jQuery('
') tail = new Travis.Tailing(fakeWindow, '#specTail', '#specLog') tail.tail = -> element tail.log = -> log module "Travis.Tailing", setup: -> jQuery('body').append(element) jQuery('body').append(log) teardown: -> element.remove() log.remove() tail.stop() test "toggle", -> equal(element.hasClass('active'), false) tail.toggle() equal(element.hasClass('active'), true) tail.toggle() stop() Ember.run.later -> start() equal(element.hasClass('active'), false) , 300 test "active", -> equal(tail.active(), false) element.addClass('active') equal(tail.active(), true) test "autoscroll when inactive", -> tail.scrollTo = sinon.spy() equal(tail.active(), false) equal(tail.autoScroll(), false) equal(tail.scrollTo.called, false) test "autoscroll", -> element.addClass('active') log.offset = -> {top: 1} log.outerHeight = -> 1 equal(tail.active(), true) equal(tail.autoScroll(), true) equal(fakeWindow.scrollTop.calledWith(2), true) test "autoscroll when we're at the bottom", -> element.addClass('active') log.offset = -> {top: 0} log.outerHeight = -> 0 equal(tail.active(), true) equal(tail.autoScroll(), false) equal(fakeWindow.scrollTop.calledWith(0), false) test 'should stop scrolling if the position changed', -> element.addClass('active') tail.position = 100 tail.onScroll() equal(element.hasClass('active'), false) test 'positionButton adds the scrolling class', -> log.offset = -> {top: -1} tail.positionButton() equal(element.hasClass('scrolling'), true) equal(element.hasClass('bottom'), false) test 'positionButton removes the scrolling class', -> log.offset = -> {top: 1} tail.positionButton() equal(element.hasClass('scrolling'), false) equal(element.hasClass('bottom'), false) test 'positionButton sets the button as bottom', -> log.offset = -> {top: -100} log.height = -> 50 tail.height = -> 1 tail.positionButton() equal(element.hasClass('scrolling'), false) equal(element.hasClass('bottom'), true)