Skip to content

Commit b428f0f

Browse files
committed
[ImageLoader] Add unit tests for getSize
1 parent a5ba27c commit b428f0f

File tree

1 file changed

+69
-0
lines changed
  • packages/react-native-web/src/modules/ImageLoader/__tests__

1 file changed

+69
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import ImageLoader from '../index';
2+
3+
const testImage =
4+
'data:image/webp;base64,UklGRkYAAABXRUJQVlA4IDoAAADwAgCdASoXABMAPi0QhkKhoQ36AAwBYllAHYAAajokAAD+/SFF//G83mta3//9QZ/5Bn/kGfp4AAAA';
5+
const testImageWidth = 23;
6+
const testImageHeight = 19;
7+
8+
const DefaultImage = window.Image;
9+
10+
describe('ImageLoader', () => {
11+
afterEach(() => {
12+
window.Image = DefaultImage;
13+
});
14+
15+
test('Success callback is called when image loads', async () => {
16+
window.Image = MockImage;
17+
const successCallback = jest.fn();
18+
const failureCallback = jest.fn();
19+
ImageLoader.getSize(testImage, successCallback, failureCallback);
20+
await jest.runAllTimers();
21+
expect(failureCallback).toHaveBeenCalledTimes(0);
22+
expect(successCallback).toHaveBeenCalledTimes(1);
23+
expect(successCallback).toHaveBeenCalledWith(
24+
testImageWidth,
25+
testImageHeight
26+
);
27+
});
28+
29+
test('Failure callback is called when image fails to load', async () => {
30+
window.Image = NotLoadingMockImage;
31+
const successCallback = jest.fn();
32+
const failureCallback = jest.fn();
33+
ImageLoader.getSize(testImage, successCallback, failureCallback);
34+
await jest.runAllTimers();
35+
expect(failureCallback).toHaveBeenCalledTimes(1);
36+
expect(successCallback).toHaveBeenCalledTimes(0);
37+
});
38+
});
39+
40+
class MockImage {
41+
constructor(width = 0, height = 0) {
42+
this.width = width;
43+
this.height = height;
44+
this.naturalWidth = 0;
45+
this.naturalHeight = 0;
46+
this._src = '';
47+
}
48+
get src() {
49+
return this._src;
50+
}
51+
set src(uri) {
52+
this._src = uri;
53+
window.setTimeout(this.onload, 0);
54+
}
55+
decode() {
56+
this.naturalWidth = testImageWidth;
57+
this.naturalHeight = testImageHeight;
58+
return Promise.resolve();
59+
}
60+
onerror() {}
61+
onload() {}
62+
}
63+
64+
class NotLoadingMockImage extends MockImage {
65+
set src(uri) {
66+
this._src = uri;
67+
window.setTimeout(this.onerror, 0);
68+
}
69+
}

0 commit comments

Comments
 (0)