UNPKG

@fusioncharts/core

Version:

JavaScript Data Visualisation Library

1 lines 8.83 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _index=_interopRequireDefault(require("./index"));var result=[],callback=function callback(v){result.push(v)},job0=function job0(){return callback(0)},job1=function job1(){return callback(1)},job2=function job2(){return callback(2)},job3=function job3(){return callback(3)},job4=function job4(){return callback(4)},job5=function job5(){return callback(5)},job6=function job6(){return callback(6)},job7=function job7(){return callback(7)},job8=function job8(){return callback(8)},frameCallTap=[],sampleJobs=[job0,job1,job2,job3,job4,job5,job6,job7,job8],longRunningJob=function longRunningJob(){var a=0;for(var i=0;i<1e8;i++){a+=i}};describe("testing addJob function",(function(){beforeEach((function(){result=[];frameCallTap=[]}));it("top priority job executes first",(function(done){var jobOrder=[1,2,3,5,6,4,7,8,9,0],priorityList=[2,3,4,5,5,5,8,9,10,1];jobOrder.forEach((function(value,index){if(value===9){_index.default.addJob((function(){callback(value);expect(result[0]===0).toBe(true);done()}),priorityList[index])}else if(value===4){_index.default.addJob(sampleJobs[value],priorityList[index],{addToTop:true})}else{_index.default.addJob(sampleJobs[value],priorityList[index])}}))}));it("job with same priority job with add on top executes before other jobs with the same priority",(function(done){var jobOrder=[1,2,3,5,6,4,7,8,9,0],priorityList=[2,3,4,5,5,5,8,9,10,1];jobOrder.forEach((function(value,index){if(value===9){_index.default.addJob((function(){callback(value);expect(result[4]===4).toBe(true);done()}),priorityList[index])}else if(value===4){_index.default.addJob(sampleJobs[value],priorityList[index],{addToTop:true})}else{_index.default.addJob(sampleJobs[value],priorityList[index])}}))}));xit("normal job with high priority following a oiaf job with low priority should not wait for next frame",(function(done){var jobOrder=[1,2,3,4],reqId,_dummy=function dummy(){frameCallTap.push((new Date).getTime());reqId=window.requestAnimationFrame(_dummy)},prevFrame,currFrame,prev,curr;_dummy();jobOrder.forEach((function(v){if(v==1){curr=Date.now();_index.default.addJob((function(){callback(v)}),2,{oneInAFrame:true})}else if(v==2){_index.default.addJob((function(){prev=Date.now();callback(v)}),1)}else if(v==4){_index.default.addJob((function(){callback(v);window.cancelAnimationFrame(reqId);frameCallTap.forEach((function(v,i){v<=prev&&(prevFrame=i);v<=curr&&(currFrame=i)}));expect(prevFrame<currFrame).toBe(true);done()}),v)}else{_index.default.addJob((function(){callback(v)}),v)}}))}))}));describe("testing full frame job",(function(){var jobOrder=[0,1,2,3,4,5];beforeEach((function(){result=[];frameCallTap=[]}));it("single frame job will executes on next frame after a single frame job executed",(function(done){var reqId,_dummy2=function dummy(){frameCallTap.push((new Date).getTime());reqId=window.requestAnimationFrame(_dummy2)},prevFrame,currFrame,prev,curr;_dummy2();jobOrder.forEach((function(v){if(v===3){_index.default.addJob((function(){curr=(new Date).getTime();window.cancelAnimationFrame(reqId)}),2,{oneInAFrame:true})}else if(v===2){_index.default.addJob((function(){prev=(new Date).getTime()}),2,{oneInAFrame:true})}else if(v===5){_index.default.addJob((function(){frameCallTap.forEach((function(v,i){v<=prev&&(prevFrame=i);v<=curr&&(currFrame=i)}));expect(prevFrame<currFrame).toBe(true);done()}),2)}else{_index.default.addJob((function(){}),2)}}))}));it("fullframe job will will hold executions of next jobs",(function(done){jobOrder.forEach((function(v){if(v===3){_index.default.addJob((function(){callback(3);expect(result[4]===undefined).toBe(true)}),2,{oneInAFrame:true})}else{_index.default.addJob((function(){callback(v);if(v===5)done()}),2)}}))}));it("cascading oiaf jobs , should execute in different frames",(function(done){var reqId,_dummy3=function dummy(){frameCallTap.push((new Date).getTime());reqId=window.requestAnimationFrame(_dummy3)},prevFrame,currFrame,prev,curr;_dummy3();_index.default.addJob((function(){result.push(1);_index.default.addJob((function(){prev=Date.now();result.push(2);_index.default.addJob((function(){curr=Date.now();result.push(3);window.cancelAnimationFrame(reqId);frameCallTap.forEach((function(v,i){v<=prev&&(prevFrame=i);v<=curr&&(currFrame=i)}));expect(prevFrame<currFrame).toBe(true);done()}),1,{oneInAFrame:true})}),1,{oneInAFrame:true})}),1,{oneInAFrame:true})}))}));describe("testing job pausing and resuming functionalities",(function(){beforeEach((function(){result=[]}));it("should pause the job successfully",(function(done){var jobOrder=[1,2,3,4,5,6,7,8,9];jobOrder.forEach((function(v){if(v==4){var jobId=_index.default.addJob((function(){callback(v)}),v);_index.default.pauseExecution(jobId)}else if(v==9){_index.default.addJob((function(){callback(v);expect(result.indexOf(4)===-1).toBe(true);done()}),v)}else{_index.default.addJob((function(){callback(v)}),v)}}))}));it("should pause and resume the job successfully",(function(done){var jobOrder=[1,2,3,4,5,6,7,8,9,10];var jobId;jobOrder.forEach((function(v){if(v==4){jobId=_index.default.addJob((function(){callback(v)}),v);_index.default.pauseExecution(jobId);_index.default.resumeExecution(jobId)}else if(v==10){_index.default.addJob((function(){callback(v);expect(result.indexOf(4)!==-1).toBe(true);done()}),v)}else{_index.default.addJob((function(){callback(v)}),v)}}))}))}));describe("testing job execution delay",(function(){beforeEach((function(){result=[]}));it("job with execution delay will execute after a certain delay",(function(done){var jobOrder=[0,1,2,3,4,5],jobAddedAt;jobOrder.forEach((function(v){if(v===3){jobAddedAt=(new Date).getTime();_index.default.addJob((function(){expect((new Date).getTime()-jobAddedAt>=32).toBe(true)}),v,{executionDelay:32})}else{_index.default.addJob((function(){callback(v);if(v===5)done()}),v)}}))}));it("job with execution delay will hold the execution of the jobs that added after that job",(function(done){var jobOrder=[0,1,2,3,4,5];jobOrder.forEach((function(v){if(v===3){_index.default.addJob((function(){callback(v);expect(result[v+1]===undefined).toBe(true)}),v,{executionDelay:32})}else{_index.default.addJob((function(){callback(v);if(v===5)done()}),v)}}))}));it("multiple jobs with different execution delay will execute in order",(function(done){var jobOrder=[40,10,20,30,50,60,80,70],mapOrder={10:0,20:1,30:2,40:3,50:4,60:5,70:6,80:7},store=[];jobOrder.forEach((function(v){_index.default.addJob((function(){expect(store.length===mapOrder[v]).toBe(true);store.push(v);if(v===80){done()}}),v,{executionDelay:Math.abs(v-80)})}))}))}));describe("testing frame gap in executions",(function(){beforeEach((function(){result=[];frameCallTap=[]}));var jobOrder=[1,2,3,4,5,6];it("heavy running job will cause following job to be moved to next frame",(function(done){var reqId,_dummy4=function dummy(){frameCallTap.push(Date.now());reqId=window.requestAnimationFrame(_dummy4)},prevFrame,currFrame,prev,curr;_dummy4();jobOrder.forEach((function(v){if(v==5){_index.default.addJob((function(){window.cancelAnimationFrame(reqId);frameCallTap.forEach((function(v,i){v<=prev&&(prevFrame=i);v<=curr&&(currFrame=i)}));expect(prevFrame<currFrame).toBe(true);if(prevFrame>=currFrame)done()}),v)}else if(v==3){_index.default.addJob((function(){curr=Date.now()}),v)}else if(v==2){_index.default.addJob((function(){prev=Date.now();longRunningJob()}),v)}else{_index.default.addJob((function(){if(v===6){done()}}),v)}}))}))}));describe("remove job test",(function(){beforeEach((function(){result=[]}));it("should remove a job ",(function(done){var jobOrder=[1,2,3,4,5,6];jobOrder.forEach((function(v){if(v==3){var jobId=_index.default.addJob((function(){callback(v)}),v);_index.default.removeJob(jobId)}else if(v==6){_index.default.addJob((function(){callback(v);expect(result.indexOf(3)===-1).toBe(true);done()}),v)}else{_index.default.addJob((function(){callback(v)}),v)}}))}));it("should run the removed job , if added again",(function(done){var jobOrder=[1,2,3,4,5,6];jobOrder.forEach((function(v){if(v==3){var jobId=_index.default.addJob((function(){callback(v)}),v);_index.default.removeJob(jobId);_index.default.addJob((function(){callback(v)}),v)}else if(v==6){_index.default.addJob((function(){callback(v);expect(result.indexOf(3)===2);done()}),v)}else{_index.default.addJob((function(){callback(v)}),v)}}))}))}));describe("failing job test",(function(){xit("failing job should not stop execution",(function(done){var jobOrder=[1,2,3,4];jobOrder.forEach((function(v){if(v==2){_index.default.addJob((function(){throw new Error("Job Failed")}),v)}else if(v==4){_index.default.addJob((function(){callback(v);expect(result[0]==1&&result[1]==3&&result[2]==4);done()}),v)}else{_index.default.addJob((function(){callback(v)}),v)}}))}))}));