@debonet/es6pacts
Version:
Releasable/cancellable and Reporting Promises for Javascript ES6
47 lines (36 loc) • 1.08 kB
JavaScript
// v2 continuity port from /Users/jsd/@aios/tmp/v2ref/es6pacts/test/es6pacts.test.js
// per specs/v3-v2compat.md: helper constructor edit only; test body verbatim.
const Pact = require( "../src/es6pacts.js" );
function fpPactDelay( dtm, dtmReport = 100 ){
return new Pact(( fResolve, fReject, fReport ) => {
let timeout;
let dtmSlept = 0;
let f = () => {
let r = dtm > 0 ? dtmSlept / dtm : 0;
fReport( r );
if ( dtmSlept < ( dtm - dtmReport )){
dtmSlept += dtmReport;
timeout = setTimeout( f, dtmReport );
}
else if ( dtmSlept < dtm ){
timeout = setTimeout( f, dtm - dtmSlept );
dtmSlept = dtm;
}
else{
fResolve( dtm );
}
}
f();
return () => clearTimeout( timeout );
});
}
// --------------------------------------------
test( "simple resolve", async () => {
let sProgress = "";
const p1 = fpPactDelay( 10000 )
.progress(( x ) => sProgress += x + ", " )
setTimeout(() => { p1.resolve("faster"); }, 300);
const s = await p1;
expect( s ).toBe( "faster" );
expect( sProgress ).toBe( "0, 0.01, 0.02, " );
});