| /* jshint ignore:start */ | 
| /* eslint-disable */ | 
|   | 
| /* Original QUnit test: https://github.com/cowboy/jquery-throttle-debounce/blob/master/unit/unit.js */ | 
|   | 
| var module = require('qunitjs').module; | 
| var test = require('qunitjs').test; | 
| var expect = require('qunitjs').expect; | 
| var ok = require('qunitjs').ok; | 
| var equals = require('qunitjs').equal; | 
| var start = require('qunitjs').start; | 
| var stop = require('qunitjs').stop; | 
|   | 
| var throttle = require('../throttle'); | 
| var debounce = require('../debounce'); | 
|   | 
| QUnit.config.autostart = false; | 
|   | 
| var pause = 500, | 
|     delay = 100; | 
|   | 
| function exec_many_times( each, complete ) { | 
|     var i = 0, | 
|         repeated, | 
|         id; | 
|   | 
|     function start(){ | 
|         id = setInterval(function(){ | 
|             each(); | 
|             if ( ++i === 50 ) { | 
|                 clearInterval( id ); | 
|                 complete( repeated ? null : function(){ | 
|                     i = 0; | 
|                     repeated = true; | 
|                     setTimeout( start, pause ); | 
|                 }); | 
|             } | 
|         }, 20); | 
|     } | 
|   | 
|     setTimeout( start, pause ); | 
| }; | 
|   | 
| module( 'throttle' ); | 
|   | 
| test( 'delay, callback', function() { | 
|     expect( 7 ); | 
|     stop(); | 
|   | 
|     var start_time, | 
|         i = 0, | 
|         arr = [], | 
|         fn = function( now ){ | 
|             arr.push( now - this ) | 
|         }, | 
|         throttled = throttle( delay, fn ); | 
|   | 
|     equals( throttled.guid, fn.guid, 'throttled-callback and callback should have the same .guid' ); | 
|   | 
|     exec_many_times( function(){ | 
|         var now = +new Date(); | 
|         start_time = start_time || now; | 
|         i++; | 
|         throttled.call( start_time, now ); | 
|     }, function( callback ){ | 
|         var len = arr.length; | 
|   | 
|         setTimeout(function(){ | 
|             //console.log( arr, arr.length, len, i ); | 
|             ok( arr.length < i, 'callback should be executed less # of times than throttled-callback' ); | 
|             equals( arr[0], 0, 'callback should be executed immediately' ); | 
|             equals( arr.length - len, 1, 'callback should be executed one more time after finish' ); | 
|   | 
|             start_time = null; | 
|             arr = []; | 
|             i = 0; | 
|   | 
|             callback ? callback() : start(); | 
|   | 
|         }, delay * 2); | 
|     }) | 
| }); | 
|   | 
| test( 'delay, false, callback', function() { | 
|     expect( 7 ); | 
|     stop(); | 
|   | 
|     var start_time, | 
|         i = 0, | 
|         arr = [], | 
|         fn = function( now ){ | 
|             arr.push( now - this ) | 
|         }, | 
|         throttled = throttle( delay, false, fn ); | 
|   | 
|     equals( throttled.guid, fn.guid, 'throttled-callback and callback should have the same .guid' ); | 
|   | 
|     exec_many_times( function(){ | 
|         var now = +new Date(); | 
|         start_time = start_time || now; | 
|         i++; | 
|         throttled.call( start_time, now ); | 
|     }, function( callback ){ | 
|         var len = arr.length; | 
|   | 
|         setTimeout(function(){ | 
|             //console.log( arr, arr.length, len, i ); | 
|             ok( arr.length < i, 'callback should be executed less # of times than throttled-callback' ); | 
|             equals( arr[0], 0, 'callback should be executed immediately' ); | 
|             equals( arr.length - len, 1, 'callback should be executed one more time after finish' ); | 
|   | 
|             start_time = null; | 
|             arr = []; | 
|             i = 0; | 
|   | 
|             callback ? callback() : start(); | 
|   | 
|         }, delay * 2); | 
|     }) | 
| }); | 
|   | 
| test( 'delay, true, callback', function() { | 
|     expect( 7 ); | 
|     stop(); | 
|   | 
|     var start_time, | 
|         i = 0, | 
|         arr = [], | 
|         fn = function( now ){ | 
|             arr.push( now - this ) | 
|         }, | 
|         throttled = throttle( delay, true, fn ); | 
|   | 
|     equals( throttled.guid, fn.guid, 'throttled-callback and callback should have the same .guid' ); | 
|   | 
|     exec_many_times( function(){ | 
|         var now = +new Date(); | 
|         start_time = start_time || now; | 
|         i++; | 
|         throttled.call( start_time, now ); | 
|     }, function( callback ){ | 
|         var len = arr.length; | 
|   | 
|         setTimeout(function(){ | 
|             //console.log( arr, arr.length, len, i ); | 
|             ok( arr.length < i, 'callback should be executed less # of times than throttled-callback' ); | 
|             equals( arr[0], 0, 'callback should be executed immediately' ); | 
|             equals( arr.length - len, 0, 'callback should NOT be executed one more time after finish' ); | 
|   | 
|             start_time = null; | 
|             arr = []; | 
|             i = 0; | 
|   | 
|             callback ? callback() : start(); | 
|   | 
|         }, delay * 2); | 
|     }) | 
| }); | 
|   | 
|   | 
| module( 'debounce' ); | 
|   | 
| test( 'delay, callback', function() { | 
|     expect( 5 ); | 
|     stop(); | 
|   | 
|     var start_time, | 
|         i = 0, | 
|         arr = [], | 
|         fn = function(){ | 
|             arr.push( +new Date() ) | 
|         }, | 
|         debounced = debounce( delay, fn ); | 
|   | 
|     equals( debounced.guid, fn.guid, 'throttled-callback and callback should have the same .guid' ); | 
|   | 
|     exec_many_times( function(){ | 
|         start_time = start_time || +new Date(); | 
|         i++; | 
|         debounced.call(); | 
|     }, function( callback ){ | 
|         var len = arr.length, | 
|             done_time = +new Date(); | 
|   | 
|         setTimeout(function(){ | 
|             //console.log( arr[0] - done_time ); | 
|             equals( arr.length, 1, 'callback was executed once' ); | 
|             ok( arr[0] >= done_time, 'callback should be executed after the finish' ); | 
|   | 
|             start_time = null; | 
|             arr = []; | 
|             i = 0; | 
|   | 
|             callback ? callback() : start(); | 
|   | 
|         }, delay * 2); | 
|     }) | 
| }); | 
|   | 
| test( 'delay, false, callback', function() { | 
|     expect( 5 ); | 
|     stop(); | 
|   | 
|     var start_time, | 
|         i = 0, | 
|         arr = [], | 
|         fn = function(){ | 
|             arr.push( +new Date() ) | 
|         }, | 
|         debounced = debounce( delay, false, fn ); | 
|   | 
|     equals( debounced.guid, fn.guid, 'throttled-callback and callback should have the same .guid' ); | 
|   | 
|     exec_many_times( function(){ | 
|         start_time = start_time || +new Date(); | 
|         i++; | 
|         debounced.call(); | 
|     }, function( callback ){ | 
|         var len = arr.length, | 
|             done_time = +new Date(); | 
|   | 
|         setTimeout(function(){ | 
|             //console.log( arr[0] - done_time ); | 
|             equals( arr.length, 1, 'callback was executed once' ); | 
|             ok( arr[0] >= done_time, 'callback should be executed after the finish' ); | 
|   | 
|             start_time = null; | 
|             arr = []; | 
|             i = 0; | 
|   | 
|             callback ? callback() : start(); | 
|   | 
|         }, delay * 2); | 
|     }) | 
| }); | 
|   | 
| test( 'delay, true, callback', function() { | 
|     expect( 5 ); | 
|     stop(); | 
|   | 
|     var start_time, | 
|         i = 0, | 
|         arr = [], | 
|         fn = function(){ | 
|             arr.push( +new Date() ) | 
|         }, | 
|         debounced = debounce( delay, true, fn ); | 
|   | 
|     equals( debounced.guid, fn.guid, 'throttled-callback and callback should have the same .guid' ); | 
|   | 
|     exec_many_times( function(){ | 
|         start_time = start_time || +new Date(); | 
|         i++; | 
|         debounced.call(); | 
|     }, function( callback ){ | 
|         var len = arr.length; | 
|   | 
|         setTimeout(function(){ | 
|             //console.log( arr[0] - start_time ); | 
|             equals( arr.length, 1, 'callback was executed once' ); | 
|             ok( arr[0] - start_time <= 5, 'callback should be executed at the start' ); | 
|   | 
|             start_time = null; | 
|             arr = []; | 
|             i = 0; | 
|   | 
|             callback ? callback() : start(); | 
|   | 
|         }, delay * 2); | 
|     }) | 
| }); |