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

Commit df3b5989 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Better mock out CEC NativeWrapper"

parents b7d37914 753d3a44
Loading
Loading
Loading
Loading
+13 −15
Original line number Diff line number Diff line
@@ -54,8 +54,6 @@ public class ArcInitiationActionFromAvrTest {

    private Context mContextSpy;
    private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem;
    private HdmiCecController mHdmiCecController;
    private HdmiControlService mHdmiControlService;
    private FakeNativeWrapper mNativeWrapper;
    private ArcInitiationActionFromAvr mAction;

@@ -78,7 +76,7 @@ public class ArcInitiationActionFromAvrTest {
        when(mContextSpy.getSystemService(PowerManager.class)).thenReturn(powerManager);
        when(mIPowerManagerMock.isInteractive()).thenReturn(true);

        mHdmiControlService =
        HdmiControlService hdmiControlService =
                new HdmiControlService(mContextSpy) {
                    @Override
                    boolean isPowerStandby() {
@@ -110,7 +108,7 @@ public class ArcInitiationActionFromAvrTest {
                    }
                };

        mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(mHdmiControlService) {
        mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(hdmiControlService) {
            @Override
            protected void setPreferredAddress(int addr) {
            }
@@ -118,18 +116,18 @@ public class ArcInitiationActionFromAvrTest {

        mHdmiCecLocalDeviceAudioSystem.init();
        Looper looper = mTestLooper.getLooper();
        mHdmiControlService.setIoLooper(looper);
        hdmiControlService.setIoLooper(looper);
        mNativeWrapper = new FakeNativeWrapper();
        mHdmiCecController = HdmiCecController.createWithNativeWrapper(
                this.mHdmiControlService, mNativeWrapper, mHdmiControlService.getAtomWriter());
        mHdmiControlService.setCecController(mHdmiCecController);
        mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService));
        mHdmiControlService.setMessageValidator(new HdmiCecMessageValidator(mHdmiControlService));
        mHdmiControlService.initPortInfo();
        HdmiCecController hdmiCecController = HdmiCecController.createWithNativeWrapper(
                hdmiControlService, mNativeWrapper, hdmiControlService.getAtomWriter());
        hdmiControlService.setCecController(hdmiCecController);
        hdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(hdmiControlService));
        hdmiControlService.setMessageValidator(new HdmiCecMessageValidator(hdmiControlService));
        hdmiControlService.initPortInfo();
        mAction = new ArcInitiationActionFromAvr(mHdmiCecLocalDeviceAudioSystem);

        mLocalDevices.add(mHdmiCecLocalDeviceAudioSystem);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        hdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mTestLooper.dispatchAll();
    }

@@ -142,7 +140,7 @@ public class ArcInitiationActionFromAvrTest {

        assertThat(mNativeWrapper.getResultMessages()).contains(initiateArc);

        mHdmiControlService.sendCecCommand(
        mNativeWrapper.onCecMessage(
                HdmiCecMessageBuilder.buildReportArcInitiated(
                        Constants.ADDR_TV,
                        Constants.ADDR_AUDIO_SYSTEM));
@@ -174,7 +172,7 @@ public class ArcInitiationActionFromAvrTest {

        assertThat(mNativeWrapper.getResultMessages()).contains(initiateArc);

        mHdmiControlService.handleCecCommand(HdmiCecMessageBuilder.buildReportArcTerminated(
        mNativeWrapper.onCecMessage(HdmiCecMessageBuilder.buildReportArcTerminated(
                Constants.ADDR_TV,
                Constants.ADDR_AUDIO_SYSTEM));
        mTestLooper.dispatchAll();
@@ -192,7 +190,7 @@ public class ArcInitiationActionFromAvrTest {

        assertThat(mNativeWrapper.getResultMessages()).contains(initiateArc);

        mHdmiControlService.handleCecCommand(
        mNativeWrapper.onCecMessage(
                HdmiCecMessageBuilder.buildFeatureAbortCommand(
                        Constants.ADDR_TV,
                        Constants.ADDR_AUDIO_SYSTEM, Constants.MESSAGE_INITIATE_ARC,
+12 −14
Original line number Diff line number Diff line
@@ -56,8 +56,6 @@ public class ArcTerminationActionFromAvrTest {
    private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem;
    private ArcTerminationActionFromAvr mAction;

    private HdmiCecController mHdmiCecController;
    private HdmiControlService mHdmiControlService;
    private FakeNativeWrapper mNativeWrapper;

    private TestLooper mTestLooper = new TestLooper();
@@ -79,7 +77,7 @@ public class ArcTerminationActionFromAvrTest {
        when(mContextSpy.getSystemService(PowerManager.class)).thenReturn(powerManager);
        when(mIPowerManagerMock.isInteractive()).thenReturn(true);

        mHdmiControlService =
        HdmiControlService hdmiControlService =
                new HdmiControlService(mContextSpy) {
                    @Override
                    void wakeUp() {
@@ -112,16 +110,16 @@ public class ArcTerminationActionFromAvrTest {
                };

        Looper looper = mTestLooper.getLooper();
        mHdmiControlService.setIoLooper(looper);
        hdmiControlService.setIoLooper(looper);
        mNativeWrapper = new FakeNativeWrapper();
        mHdmiCecController = HdmiCecController.createWithNativeWrapper(
                this.mHdmiControlService, mNativeWrapper, mHdmiControlService.getAtomWriter());
        mHdmiControlService.setCecController(mHdmiCecController);
        mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService));
        mHdmiControlService.setMessageValidator(new HdmiCecMessageValidator(mHdmiControlService));
        mHdmiControlService.initPortInfo();

        mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(mHdmiControlService) {
        HdmiCecController hdmiCecController = HdmiCecController.createWithNativeWrapper(
                hdmiControlService, mNativeWrapper, hdmiControlService.getAtomWriter());
        hdmiControlService.setCecController(hdmiCecController);
        hdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(hdmiControlService));
        hdmiControlService.setMessageValidator(new HdmiCecMessageValidator(hdmiControlService));
        hdmiControlService.initPortInfo();

        mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(hdmiControlService) {
            @Override
            protected void setPreferredAddress(int addr) {
            }
@@ -130,7 +128,7 @@ public class ArcTerminationActionFromAvrTest {
        mAction = new ArcTerminationActionFromAvr(mHdmiCecLocalDeviceAudioSystem);

        mLocalDevices.add(mHdmiCecLocalDeviceAudioSystem);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        hdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mHdmiCecLocalDeviceAudioSystem.setArcStatus(true);
        mTestLooper.dispatchAll();
    }
@@ -173,7 +171,7 @@ public class ArcTerminationActionFromAvrTest {
        HdmiCecMessage arcTerminatedResponse = HdmiCecMessageBuilder.buildReportArcTerminated(
                Constants.ADDR_TV, Constants.ADDR_AUDIO_SYSTEM);

        mHdmiControlService.handleCecCommand(arcTerminatedResponse);
        mNativeWrapper.onCecMessage(arcTerminatedResponse);
        mTestLooper.dispatchAll();

        assertThat(mHdmiCecLocalDeviceAudioSystem.isArcEnabled()).isFalse();
+46 −1
Original line number Diff line number Diff line
@@ -16,7 +16,11 @@
package com.android.server.hdmi;

import android.hardware.hdmi.HdmiPortInfo;
import android.hardware.tv.cec.V1_0.CecMessage;
import android.hardware.tv.cec.V1_0.HotplugEvent;
import android.hardware.tv.cec.V1_0.SendMessageResult;
import android.os.RemoteException;
import android.util.Log;

import com.android.internal.annotations.VisibleForTesting;
import com.android.server.hdmi.HdmiCecController.NativeWrapper;
@@ -29,6 +33,8 @@ import java.util.List;

/** Fake {@link NativeWrapper} useful for testing. */
final class FakeNativeWrapper implements NativeWrapper {
    private static final String TAG = "FakeNativeWrapper";

    private final int[] mPollAddressResponse =
            new int[] {
                SendMessageResult.NACK,
@@ -52,6 +58,7 @@ final class FakeNativeWrapper implements NativeWrapper {
    private final HashMap<Integer, Integer> mMessageSendResult = new HashMap<>();
    private int mMyPhysicalAddress = 0;
    private HdmiPortInfo[] mHdmiPortInfo = null;
    private HdmiCecController.HdmiCecCallback mCallback = null;

    @Override
    public String nativeInit() {
@@ -59,7 +66,9 @@ final class FakeNativeWrapper implements NativeWrapper {
    }

    @Override
    public void setCallback(HdmiCecController.HdmiCecCallback callback) {}
    public void setCallback(HdmiCecController.HdmiCecCallback callback) {
        this.mCallback = callback;
    }

    @Override
    public int nativeSendCecCommand(
@@ -119,6 +128,42 @@ final class FakeNativeWrapper implements NativeWrapper {
        return false;
    }

    public void onCecMessage(HdmiCecMessage hdmiCecMessage) {
        if (mCallback == null) {
            return;
        }
        CecMessage message = new CecMessage();
        message.initiator = hdmiCecMessage.getSource();
        message.destination = hdmiCecMessage.getDestination();
        ArrayList<Byte> body = new ArrayList<>();
        body.add((byte) hdmiCecMessage.getOpcode());
        for (byte param : hdmiCecMessage.getParams()) {
            body.add(param);
        }
        message.body = body;
        try {
            mCallback.onCecMessage(message);
        } catch (RemoteException e) {
            Log.e(TAG, "Error sending CEC message", e);
        }
    }

    public void onHotplugEvent(int port, boolean connected) {
        if (mCallback == null) {
            return;
        }

        HotplugEvent hotplugEvent = new HotplugEvent();
        hotplugEvent.portId = port;
        hotplugEvent.connected = connected;

        try {
            mCallback.onHotplugEvent(hotplugEvent);
        } catch (RemoteException e) {
            Log.e(TAG, "Error sending hotplug event", e);
        }
    }

    public List<HdmiCecMessage> getResultMessages() {
        return new ArrayList<>(mResultMessages);
    }
+3 −3
Original line number Diff line number Diff line
@@ -70,7 +70,6 @@ public class HdmiCecControllerTest {
        }
    }

    private HdmiControlService mHdmiControlService;
    private HdmiCecController mHdmiCecController;
    private int mLogicalAddress = 16;
    private AllocateAddressCallback mCallback =
@@ -87,10 +86,11 @@ public class HdmiCecControllerTest {
    public void SetUp() {
        mMyLooper = mTestLooper.getLooper();
        mMyLooper = mTestLooper.getLooper();
        mHdmiControlService = new MyHdmiControlService(InstrumentationRegistry.getTargetContext());
        HdmiControlService hdmiControlService = new MyHdmiControlService(
                InstrumentationRegistry.getTargetContext());
        mNativeWrapper = new FakeNativeWrapper();
        mHdmiCecController = HdmiCecController.createWithNativeWrapper(
                mHdmiControlService, mNativeWrapper, mHdmiControlService.getAtomWriter());
                hdmiControlService, mNativeWrapper, hdmiControlService.getAtomWriter());
    }

    /** Tests for {@link HdmiCecController#allocateLogicalAddress} */
+4 −4
Original line number Diff line number Diff line
@@ -780,8 +780,8 @@ public class HdmiCecLocalDevicePlaybackTest {

    @Test
    public void handleSetStreamPath_afterHotplug_broadcastsActiveSource() {
        mHdmiControlService.onHotplug(1, false);
        mHdmiControlService.onHotplug(1, true);
        mNativeWrapper.onHotplugEvent(1, false);
        mNativeWrapper.onHotplugEvent(1, true);

        HdmiCecMessage setStreamPath = HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV,
                mPlaybackPhysicalAddress);
@@ -797,8 +797,8 @@ public class HdmiCecLocalDevicePlaybackTest {

    @Test
    public void handleSetStreamPath_afterHotplug_hasCorrectActiveSource() {
        mHdmiControlService.onHotplug(1, false);
        mHdmiControlService.onHotplug(1, true);
        mNativeWrapper.onHotplugEvent(1, false);
        mNativeWrapper.onHotplugEvent(1, true);

        HdmiCecMessage setStreamPath = HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV,
                mPlaybackPhysicalAddress);