Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit debc1649 authored by Ömer Faruk Yılmaz's avatar Ömer Faruk Yılmaz Committed by Gerrit Code Review
Browse files

Merge "Add additional BatteryStateMachineTest"

parents 8ec99355 b8561add
Loading
Loading
Loading
Loading
+81 −0
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.bluetooth.bas;

import static android.bluetooth.BluetoothGatt.GATT_SUCCESS;

import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
@@ -32,6 +34,7 @@ import static org.mockito.Mockito.when;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.os.HandlerThread;
@@ -189,6 +192,72 @@ public class BatteryStateMachineTest {
                IsInstanceOf.instanceOf(BatteryStateMachine.Connected.class));
    }

    @Test
    public void testConnectedStateChanges() {
        allowConnection(true);
        allowConnectGatt(true);

        // Connected -> CONNECT
        reconnect();

        mBatteryStateMachine.sendMessage(BatteryStateMachine.CONNECT);

        assertThat(mBatteryStateMachine.getCurrentState())
                .isInstanceOf(BatteryStateMachine.Connected.class);

        // Connected -> DISCONNECT
        reconnect();

        mBatteryStateMachine.sendMessage(BatteryStateMachine.DISCONNECT);

        TestUtils.waitForLooperToFinishScheduledTask(mBatteryStateMachine.getHandler().getLooper());

        mBatteryStateMachine.notifyConnectionStateChanged(
                GATT_SUCCESS, BluetoothProfile.STATE_DISCONNECTED);

        assertThat(mBatteryStateMachine.getCurrentState())
                .isInstanceOf(BatteryStateMachine.Disconnected.class);

        // Connected -> STATE_DISCONNECTED
        reconnect();

        mBatteryStateMachine.sendMessage(
                BatteryStateMachine.CONNECTION_STATE_CHANGED, BluetoothGatt.STATE_DISCONNECTED);

        TestUtils.waitForLooperToFinishScheduledTask(mBatteryStateMachine.getHandler().getLooper());

        mBatteryStateMachine.notifyConnectionStateChanged(
                GATT_SUCCESS, BluetoothProfile.STATE_DISCONNECTED);

        // Connected -> STATE_CONNECTED
        reconnect();

        mBatteryStateMachine.sendMessage(
                BatteryStateMachine.CONNECTION_STATE_CHANGED, BluetoothGatt.STATE_CONNECTED);

        assertThat(mBatteryStateMachine.getCurrentState())
                .isInstanceOf(BatteryStateMachine.Connected.class);

        // Connected -> ILLEGAL_STATE
        reconnect();

        int badState = -1;
        mBatteryStateMachine.sendMessage(
                BatteryStateMachine.CONNECTION_STATE_CHANGED, badState);

        assertThat(mBatteryStateMachine.getCurrentState())
                .isInstanceOf(BatteryStateMachine.Connected.class);

        // Connected -> NOT_HANDLED
        reconnect();

        int notHandled = -1;
        mBatteryStateMachine.sendMessage(notHandled);

        assertThat(mBatteryStateMachine.getCurrentState())
                .isInstanceOf(BatteryStateMachine.Connected.class);
    }

    @Test
    public void testConnectGattTimeout() {
        allowConnection(true);
@@ -244,6 +313,18 @@ public class BatteryStateMachineTest {
                .handleBatteryChanged(any(BluetoothDevice.class), anyInt());
    }

    private void reconnect() {
        // Inject an event for when incoming connection is requested
        mBatteryStateMachine.sendMessage(BatteryStateMachine.CONNECT);

        TestUtils.waitForLooperToFinishScheduledTask(mBatteryStateMachine.getHandler().getLooper());

        mBatteryStateMachine.notifyConnectionStateChanged(
                GATT_SUCCESS, BluetoothProfile.STATE_CONNECTED);

        TestUtils.waitForLooperToFinishScheduledTask(mBatteryStateMachine.getHandler().getLooper());
    }

    // It simulates GATT connection for testing.
    public class StubBatteryStateMachine extends BatteryStateMachine {
        boolean mShouldAllowGatt = true;