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 android.car.oem; 18 19 import static org.junit.Assert.assertThrows; 20 21 import android.car.feature.Flags; 22 import android.car.media.CarVolumeGroupInfo; 23 import android.car.test.AbstractExpectableTestCase; 24 import android.os.Parcel; 25 import android.platform.test.annotations.EnableFlags; 26 import android.platform.test.flag.junit.SetFlagsRule; 27 28 import org.junit.ClassRule; 29 import org.junit.Rule; 30 import org.junit.Test; 31 32 @EnableFlags({ 33 Flags.FLAG_CAR_AUDIO_MIN_MAX_ACTIVATION_VOLUME, 34 Flags.FLAG_CAR_AUDIO_DYNAMIC_DEVICES, 35 Flags.FLAG_CAR_AUDIO_MUTE_AMBIGUITY 36 }) 37 public final class OemCarVolumeChangeInfoUnitTest extends AbstractExpectableTestCase { 38 @ClassRule public static final SetFlagsRule.ClassRule mClassRule = new SetFlagsRule.ClassRule(); 39 @Rule public final SetFlagsRule mSetFlagsRule = mClassRule.createSetFlagsRule(); 40 41 private static final int TEST_ZONE_ID = 8; 42 private static final int TEST_PRIMARY_GROUP_ID = 7; 43 private static final String TEST_GROUP_NAME = "3"; 44 45 private final CarVolumeGroupInfo mTestVolumeInfo; 46 OemCarVolumeChangeInfoUnitTest()47 public OemCarVolumeChangeInfoUnitTest() { 48 mTestVolumeInfo = new CarVolumeGroupInfo.Builder(TEST_GROUP_NAME, TEST_ZONE_ID, 49 TEST_PRIMARY_GROUP_ID) 50 .setMaxVolumeGainIndex(9_000).setMinVolumeGainIndex(0) 51 .setMaxActivationVolumeGainIndex(8_000).setMinActivationVolumeGainIndex(100) 52 .build(); 53 } 54 55 @Test build()56 public void build() { 57 OemCarVolumeChangeInfo info = 58 new OemCarVolumeChangeInfo.Builder(/* volumeChanged= */ true).build(); 59 60 expectWithMessage("Car volume change build info changed") 61 .that(info.isVolumeChanged()).isTrue(); 62 } 63 64 @Test setChangedVolumeGroup()65 public void setChangedVolumeGroup() { 66 OemCarVolumeChangeInfo info = 67 new OemCarVolumeChangeInfo.Builder(/* volumeChanged= */ false) 68 .setChangedVolumeGroup(mTestVolumeInfo).build(); 69 70 expectWithMessage("Car volume change build changed volume") 71 .that(info.getChangedVolumeGroup()).isEqualTo(mTestVolumeInfo); 72 } 73 74 75 @Test builder_withReuse_fails()76 public void builder_withReuse_fails() { 77 OemCarVolumeChangeInfo.Builder builder = 78 new OemCarVolumeChangeInfo.Builder(/* volumeChanged= */ false); 79 builder.build(); 80 81 IllegalStateException thrown = assertThrows(IllegalStateException.class, () -> 82 builder.build() 83 ); 84 85 expectWithMessage("Reuse builder exception") 86 .that(thrown).hasMessageThat().contains("should not be reused"); 87 } 88 89 @Test writeToParcel()90 public void writeToParcel() { 91 Parcel parcel = Parcel.obtain(); 92 OemCarVolumeChangeInfo info = 93 new OemCarVolumeChangeInfo.Builder(/* volumeChanged= */ true).build(); 94 95 info.writeToParcel(parcel, /* flags= */ 0); 96 parcel.setDataPosition(/* pos= */ 0); 97 98 expectWithMessage("Car volume change from parcel") 99 .that(OemCarVolumeChangeInfo.CREATOR.createFromParcel(parcel)).isEqualTo(info); 100 } 101 102 @Test newArray()103 public void newArray() { 104 OemCarVolumeChangeInfo[] infos = OemCarVolumeChangeInfo.CREATOR.newArray(/* size= */ 3); 105 106 expectWithMessage("Car volume changes").that(infos).hasLength(3); 107 } 108 109 @Test equals_forSameContent()110 public void equals_forSameContent() { 111 OemCarVolumeChangeInfo info = 112 new OemCarVolumeChangeInfo.Builder(/* volumeChanged= */ false) 113 .setChangedVolumeGroup(mTestVolumeInfo).build(); 114 OemCarVolumeChangeInfo info2 = 115 new OemCarVolumeChangeInfo.Builder(/* volumeChanged= */ false) 116 .setChangedVolumeGroup(mTestVolumeInfo).build(); 117 118 expectWithMessage("Car volume change with same content").that(info2).isEqualTo(info); 119 } 120 121 @Test equals_forDifferentContent()122 public void equals_forDifferentContent() { 123 OemCarVolumeChangeInfo info = 124 new OemCarVolumeChangeInfo.Builder(/* volumeChanged= */ true) 125 .setChangedVolumeGroup(mTestVolumeInfo).build(); 126 OemCarVolumeChangeInfo info2 = 127 new OemCarVolumeChangeInfo.Builder(/* volumeChanged= */ false) 128 .setChangedVolumeGroup(mTestVolumeInfo).build(); 129 130 expectWithMessage("Car volume change with different content").that(info2) 131 .isNotEqualTo(info); 132 } 133 134 @Test equals_forNull()135 public void equals_forNull() { 136 OemCarVolumeChangeInfo info = 137 new OemCarVolumeChangeInfo.Builder(/* volumeChanged= */ false) 138 .setChangedVolumeGroup(mTestVolumeInfo).build(); 139 140 expectWithMessage("Car volume change equal for null").that(info.equals(null)).isFalse(); 141 } 142 143 @Test hashCode_forSameContent()144 public void hashCode_forSameContent() { 145 OemCarVolumeChangeInfo info = 146 new OemCarVolumeChangeInfo.Builder(/* volumeChanged= */ false) 147 .setChangedVolumeGroup(mTestVolumeInfo).build(); 148 OemCarVolumeChangeInfo info2 = 149 new OemCarVolumeChangeInfo.Builder(/* volumeChanged= */ false) 150 .setChangedVolumeGroup(mTestVolumeInfo).build(); 151 152 expectWithMessage("Car volume change hash with same content") 153 .that(info2.hashCode()).isEqualTo(info.hashCode()); 154 } 155 156 @Test emptyChange_isEmpty()157 public void emptyChange_isEmpty() { 158 expectWithMessage("Empty volume change") 159 .that(OemCarVolumeChangeInfo.EMPTY_OEM_VOLUME_CHANGE.isVolumeChanged()).isFalse(); 160 } 161 162 @Test describeContents()163 public void describeContents() { 164 expectWithMessage("Volume change empty description") 165 .that(OemCarVolumeChangeInfo.EMPTY_OEM_VOLUME_CHANGE.describeContents()) 166 .isEqualTo(0); 167 } 168 } 169