Skip to content

Commit

Permalink
test: Fixed setImmediate and added test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
Gcaufy committed Nov 29, 2020
1 parent 5030bc4 commit 1fb18bc
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 46 deletions.
6 changes: 4 additions & 2 deletions lib/image.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,14 @@ Image.prototype[util.inspect.custom || 'inspect'] = function(){
};

function getSource(img){
return img._originalSource || GetSource.call(img);
return img._originalSource || img._src || GetSource.call(img);
}

function setSource(img, src, origSrc){
process.nextTick(function(){
clearImmediate(img._setSourceTimer);
img._setSourceTimer = setImmediate(() => {
SetSource.call(img, src);
});
img._src = src;
img._originalSource = origSrc;
}
146 changes: 102 additions & 44 deletions test/image.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -127,25 +127,37 @@ describe('Image', function () {

img.onload = () => { onloadCalled += 1 }

// it's should be png_clock, because when you change the img.src, it doesn't load the image immediately.
img.src = png_checkers
assert.strictEqual(img.src, png_checkers)
assert.strictEqual(img.complete, true)
assert.strictEqual(img.width, 2)
assert.strictEqual(img.height, 2)

// it's still png_clock
assert.strictEqual(img.width, 320)
assert.strictEqual(img.height, 320)

img.src = png_clock
assert.strictEqual(img.src, png_clock)
assert.strictEqual(true, img.complete)
assert.strictEqual(320, img.width)
assert.strictEqual(320, img.height)

assert.strictEqual(onloadCalled, 2)
// called in nextTick
assert.strictEqual(onloadCalled, 0)

onloadCalled = 0
img.onload = () => { onloadCalled += 1 }

// reset src will clear the old src changes.
img.src = png_clock
assert.strictEqual(onloadCalled, 1)
assert.strictEqual(onloadCalled, 0)

return new Promise(resolve => {
setTimeout(() => {
assert.strictEqual(onloadCalled, 1)
resolve();
}, 0)
});
})
})

Expand Down Expand Up @@ -189,28 +201,47 @@ describe('Image', function () {
img.src = `${png_clock}s2`
assert.strictEqual(img.src, `${png_clock}s2`)

assert.strictEqual(onerrorCalled, 2)
// it's not synchronized call, onerror will be invoked in async steps.
assert.strictEqual(onerrorCalled, 0)

onerrorCalled = 0
img.onerror = () => { onerrorCalled += 1 }

img.src = `${png_clock}s3`
assert.strictEqual(img.src, `${png_clock}s3`)

assert.strictEqual(onerrorCalled, 1)
assert.strictEqual(onerrorCalled, 0)
assert.strictEqual(onloadCalled, 0)

return new Promise(resolve => {
setTimeout(() => {
assert.strictEqual(onerrorCalled, 1)
assert.strictEqual(onloadCalled, 0)
resolve();
});
});
})
})

it('Image#{width,height}', function () {
return loadImage(png_clock).then((img) => {
img.src = ''
assert.strictEqual(img.width, 0)
assert.strictEqual(img.height, 0)

img.src = png_clock
assert.strictEqual(img.width, 320)
assert.strictEqual(img.height, 320)
return new Promise((resolve) => {
setTimeout(() => {
assert.strictEqual(img.width, 0)
assert.strictEqual(img.height, 0)
resolve();
})
}).then(() => {
img.src = png_clock
return new Promise((resolve) => {
setTimeout(() => {
assert.strictEqual(img.width, 320)
assert.strictEqual(img.height, 320)
resolve()
})
})
})
})
})

Expand All @@ -221,11 +252,17 @@ describe('Image', function () {
img.onerror = () => { onerrorCalled += 1 }

img.src = Buffer.alloc(0)
assert.strictEqual(img.width, 0)
assert.strictEqual(img.height, 0)
assert.strictEqual(img.complete, true)

assert.strictEqual(onerrorCalled, 1)
return new Promise((resolve) => {
setTimeout(() => {
assert.strictEqual(img.width, 0)
assert.strictEqual(img.height, 0)
assert.strictEqual(img.complete, true)

assert.strictEqual(onerrorCalled, 1)
resolve()
})
})
})
})

Expand All @@ -236,23 +273,34 @@ describe('Image', function () {
img.onload = () => { onloadCalled += 1 }

img.src = png_checkers
assert.strictEqual(img.src, png_checkers)
assert.strictEqual(img.complete, true)
assert.strictEqual(img.width, 2)
assert.strictEqual(img.height, 2)

assert.strictEqual(onloadCalled, 1)

onloadCalled = 0
img.onload = null

img.src = png_clock
assert.strictEqual(img.src, png_clock)
assert.strictEqual(img.complete, true)
assert.strictEqual(img.width, 320)
assert.strictEqual(img.height, 320)

assert.strictEqual(onloadCalled, 0)
return new Promise((resolve) => {
setTimeout(() => {
assert.strictEqual(img.src, png_checkers)
assert.strictEqual(img.complete, true)
assert.strictEqual(img.width, 2)
assert.strictEqual(img.height, 2)

assert.strictEqual(onloadCalled, 1)

onloadCalled = 0
img.onload = null
img.src = png_clock
resolve()
})
}).then(() => {
return new Promise((resolve) => {
setTimeout(() => {
assert.strictEqual(img.src, png_clock)
assert.strictEqual(img.complete, true)
assert.strictEqual(img.width, 320)
assert.strictEqual(img.height, 320)

assert.strictEqual(onloadCalled, 0)
resolve()
})
})
})
})
})

Expand All @@ -265,21 +313,31 @@ describe('Image', function () {
img.onerror = () => { onerrorCalled += 1 }

img.src = `${png_clock}s1`

assert.strictEqual(img.src, `${png_clock}s1`)

img.src = `${png_clock}s2`
assert.strictEqual(img.src, `${png_clock}s2`)

assert.strictEqual(onerrorCalled, 2)

onerrorCalled = 0
img.onerror = null

img.src = `${png_clock}s3`
assert.strictEqual(img.src, `${png_clock}s3`)

assert.strictEqual(onloadCalled, 0)
assert.strictEqual(onerrorCalled, 0)
return new Promise((resolve) => {
setTimeout(() => {
assert.strictEqual(onerrorCalled, 1)
resolve()
})
}).then(() => new Promise(resolve => {
onerrorCalled = 0
img.onerror = null

img.src = `${png_clock}s3`
assert.strictEqual(img.src, `${png_clock}s3`)

setTimeout(() => {
assert.strictEqual(onloadCalled, 0)
assert.strictEqual(onerrorCalled, 0)
resolve()
})
}))
})
})

Expand Down Expand Up @@ -386,7 +444,7 @@ describe('Image', function () {
255, 0, 0, 127,
255, 255, 255, 127,
]);

done();
};

Expand All @@ -404,7 +462,7 @@ describe('Image', function () {
testImgd(img, [
255, 0, 0, 255,
]);

done();
};

Expand All @@ -423,7 +481,7 @@ describe('Image', function () {
255, 0, 0, 255,
0, 255, 0, 255,
]);

done();
};

Expand Down

0 comments on commit 1fb18bc

Please sign in to comment.