1import * as Battery from 'expo-battery'; 2import * as Device from 'expo-device'; 3import { Platform } from 'expo-modules-core'; 4 5export const name = 'Battery'; 6 7export async function test({ describe, it, expect, jasmine }) { 8 const isExpectedToSupport = Device.isDevice || Platform.OS === 'android'; 9 10 describe('Battery', async () => { 11 describe(`isAvailableAsync`, () => { 12 it( 13 isExpectedToSupport 14 ? `should be true for Android or iOS devices` 15 : `should be false on iOS simulator`, 16 async () => { 17 expect(await Battery.isAvailableAsync()).toEqual(isExpectedToSupport); 18 } 19 ); 20 }); 21 22 const isAvailable = await Battery.isAvailableAsync(); 23 24 if (isAvailable) { 25 describe(`getBatteryLevelAsync()`, () => { 26 it(`returns a number between 0 and 1`, async () => { 27 const batteryLevel = await Battery.getBatteryLevelAsync(); 28 expect(batteryLevel).toEqual(jasmine.any(Number)); 29 expect(batteryLevel).toBeLessThanOrEqual(1); 30 expect(batteryLevel).toBeGreaterThan(0); 31 }); 32 }); 33 describe(`getBatteryState()`, () => { 34 it(`returns a valid BatteryState enum value`, async () => { 35 const batteryState = await Battery.getBatteryStateAsync(); 36 expect( 37 [ 38 Battery.BatteryState.CHARGING, 39 Battery.BatteryState.FULL, 40 Battery.BatteryState.UNPLUGGED, 41 ].includes(batteryState) 42 ).toBe(true); 43 }); 44 }); 45 describe(`isLowPowerModeEnabledAsync()`, () => { 46 it(`returns a boolean low power mode`, async () => { 47 const lowPowerMode = await Battery.isLowPowerModeEnabledAsync(); 48 expect(lowPowerMode).toEqual(jasmine.any(Boolean)); 49 }); 50 }); 51 describe(`getPowerStateAsync()`, () => { 52 it(`returns a valid PowerState object`, async () => { 53 const powerState = await Battery.getPowerStateAsync(); 54 expect(powerState).toEqual( 55 jasmine.objectContaining({ 56 batteryLevel: jasmine.any(Number), 57 batteryState: jasmine.any(Number), 58 lowPowerMode: jasmine.any(Boolean), 59 }) 60 ); 61 }); 62 }); 63 64 describe(`Event listeners`, () => { 65 // TODO(Bacon) Add detox & spies 66 // TODO: check that events don't get fired after we unsubscribe 67 // but we currently don't have a way to programmatically set battery statuses 68 69 it(`addLowPowerModeListener() registers`, () => { 70 const listener = Battery.addLowPowerModeListener(({ lowPowerMode }) => { 71 console.log('powerMode changed!', lowPowerMode); 72 }); 73 // TODO: Invoke callback somehow 74 expect(listener).toBeDefined(); 75 listener.remove(); 76 }); 77 it(`addBatteryStateListener() registers`, () => { 78 const listener = Battery.addBatteryStateListener(({ batteryState }) => { 79 console.log('batteryState changed!', batteryState); 80 }); 81 // TODO: Invoke callback somehow 82 expect(listener).toBeDefined(); 83 listener.remove(); 84 }); 85 it(`addBatteryLevelListener() registers`, () => { 86 const listener = Battery.addBatteryLevelListener(({ batteryLevel }) => { 87 console.log('batteryLevel changed!', batteryLevel); 88 }); 89 // TODO: Invoke callback somehow 90 expect(listener).toBeDefined(); 91 listener.remove(); 92 }); 93 }); 94 } 95 }); 96} 97