1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.car.audio.hal;
18 
19 import static com.google.common.truth.Truth.assertWithMessage;
20 
21 import android.hardware.automotive.audiocontrol.AudioGainConfigInfo;
22 import android.hardware.automotive.audiocontrol.Reasons;
23 
24 import androidx.test.ext.junit.runners.AndroidJUnit4;
25 
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 
29 import java.util.List;
30 
31 @RunWith(AndroidJUnit4.class)
32 public final class HalAudioGainCallbackTest {
33     private static final int PRIMARY_ZONE_ID = 0;
34     private static final String PRIMARY_ZONE_ID_LITERAL = "0";
35     private static final String PRIMARY_MUSIC_ADDRESS = "primary music";
36 
37     @Test
isReasonValid_withValidReasons_succeeds()38     public void isReasonValid_withValidReasons_succeeds() {
39         List<Integer> validReasons =
40                 List.of(
41                         Reasons.FORCED_MASTER_MUTE,
42                         Reasons.REMOTE_MUTE,
43                         Reasons.TCU_MUTE,
44                         Reasons.ADAS_DUCKING,
45                         Reasons.NAV_DUCKING,
46                         Reasons.PROJECTION_DUCKING,
47                         Reasons.THERMAL_LIMITATION,
48                         Reasons.SUSPEND_EXIT_VOL_LIMITATION,
49                         Reasons.EXTERNAL_AMP_VOL_FEEDBACK,
50                         Reasons.OTHER);
51 
52         for (int index = 0; index < validReasons.size(); index++) {
53             int validReason = validReasons.get(index);
54             assertWithMessage("Reason " + HalAudioGainCallback.reasonToString(validReason))
55                     .that(HalAudioGainCallback.isReasonValid(validReason))
56                     .isTrue();
57         }
58     }
59 
60     @Test
isReasonValid_withInvalidReasons_fails()61     public void isReasonValid_withInvalidReasons_fails() {
62         List<Integer> invalidReasons = List.of(-1, -10, 666);
63 
64         for (int index = 0; index < invalidReasons.size(); index++) {
65             int invalidReason = invalidReasons.get(index);
66             assertWithMessage("Reason " + HalAudioGainCallback.reasonToString(invalidReason))
67                     .that(HalAudioGainCallback.isReasonValid(invalidReason))
68                     .isFalse();
69         }
70     }
71 
72     @Test
reasonToString_validReasons_succeeds()73     public void reasonToString_validReasons_succeeds() {
74         List<Integer> reasons =
75                 List.of(
76                         Reasons.FORCED_MASTER_MUTE,
77                         Reasons.REMOTE_MUTE,
78                         Reasons.TCU_MUTE,
79                         Reasons.ADAS_DUCKING,
80                         Reasons.NAV_DUCKING,
81                         Reasons.PROJECTION_DUCKING,
82                         Reasons.THERMAL_LIMITATION,
83                         Reasons.SUSPEND_EXIT_VOL_LIMITATION,
84                         Reasons.EXTERNAL_AMP_VOL_FEEDBACK,
85                         Reasons.OTHER);
86         for (int index = 0; index < reasons.size(); index++) {
87             int reason = reasons.get(index);
88             String literalReason = HalAudioGainCallback.reasonToString(reasons.get(index));
89             assertWithMessage("Valid Reason " + reason).that(literalReason).isNotNull();
90             assertWithMessage("Valid Reason " + reason)
91                     .that(literalReason)
92                     .doesNotContain("Unsupported reason");
93         }
94     }
95 
96     @Test
reasonToString_invalidReasons_succeeds()97     public void reasonToString_invalidReasons_succeeds() {
98         List<Integer> reasons = List.of(-1, -10, 666);
99         for (int index = 0; index < reasons.size(); index++) {
100             int reason = reasons.get(index);
101             String literalReason = HalAudioGainCallback.reasonToString(reasons.get(index));
102             assertWithMessage("Invalid Reason " + reason).that(literalReason).isNotNull();
103             assertWithMessage("Invalid Reason " + reason)
104                     .that(literalReason)
105                     .contains("Unsupported reason");
106         }
107     }
108 
109     @Test
gainToString_succeeds()110     public void gainToString_succeeds() {
111         AudioGainConfigInfo audioGainConfigInfo = new AudioGainConfigInfo();
112         audioGainConfigInfo.zoneId = PRIMARY_ZONE_ID;
113         audioGainConfigInfo.devicePortAddress = PRIMARY_MUSIC_ADDRESS;
114         audioGainConfigInfo.volumeIndex = 666;
115 
116         String literalGain = HalAudioGainCallback.gainToString(audioGainConfigInfo);
117         assertWithMessage("Audio Gain Config Info Literal").that(literalGain).isNotNull();
118         assertWithMessage("Audio Gain Config Info Literal").that(literalGain).contains("zone:");
119         assertWithMessage("Audio Gain Config Info Literal")
120                 .that(literalGain)
121                 .contains(PRIMARY_ZONE_ID_LITERAL);
122         assertWithMessage("Audio Gain Config Info Literal").that(literalGain).contains("address:");
123         assertWithMessage("Audio Gain Config Info Literal")
124                 .that(literalGain)
125                 .contains(PRIMARY_MUSIC_ADDRESS);
126         assertWithMessage("Audio Gain Config Info Literal")
127                 .that(literalGain)
128                 .contains("Volume Index:");
129         assertWithMessage("Audio Gain Config Info Literal").that(literalGain).contains("666");
130     }
131 }
132