mirror of
https://github.com/zoriya/react-native-web.git
synced 2026-05-28 00:32:17 +00:00
@@ -1,5 +1,23 @@
|
||||
/* eslint-env jasmine, jest */
|
||||
|
||||
import Dimensions from '..';
|
||||
|
||||
describe('apis/Dimensions', () => {
|
||||
test.skip('NO TEST COVERAGE', () => {});
|
||||
test('addEventListener', () => {
|
||||
const handler = jest.fn();
|
||||
Dimensions.addEventListener('change', handler);
|
||||
Dimensions.set();
|
||||
expect(handler).toHaveBeenCalledTimes(1);
|
||||
expect(handler).toHaveBeenLastCalledWith({
|
||||
window: Dimensions.get('window'),
|
||||
screen: Dimensions.get('screen')
|
||||
});
|
||||
});
|
||||
|
||||
test('removeEventListener', () => {
|
||||
const handler = jest.fn();
|
||||
Dimensions.removeEventListener('change', handler);
|
||||
Dimensions.set();
|
||||
expect(handler).toHaveBeenCalledTimes(0);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -27,6 +27,7 @@ const win = canUseDOM
|
||||
};
|
||||
|
||||
const dimensions = {};
|
||||
const listeners = {};
|
||||
|
||||
export default class Dimensions {
|
||||
static get(dimension: string): Object {
|
||||
@@ -48,6 +49,21 @@ export default class Dimensions {
|
||||
scale: win.devicePixelRatio || 1,
|
||||
width: win.screen.width
|
||||
};
|
||||
|
||||
if (Array.isArray(listeners['change'])) {
|
||||
listeners['change'].forEach(handler => handler(dimensions));
|
||||
}
|
||||
}
|
||||
|
||||
static addEventListener(type, handler): void {
|
||||
listeners[type] = listeners[type] || [];
|
||||
listeners[type].push(handler);
|
||||
}
|
||||
|
||||
static removeEventListener(type, handler): void {
|
||||
if (Array.isArray(listeners[type])) {
|
||||
listeners[type] = listeners[type].filter(_handler => _handler !== handler);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user