1 /* 2 * Copyright (C) 2016 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.hardware; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import static org.junit.Assert.assertThrows; 22 23 import android.car.VehicleAreaType; 24 25 import org.junit.Test; 26 27 /** 28 * Unit tests for {@link CarPropertyValue} 29 */ 30 public final class CarPropertyValueTest extends CarPropertyTestBase { 31 private static final int PROPERTY_ID = 1234; 32 private static final int AREA_ID = 5678; 33 private static final long TIMESTAMP_NANOS = 9294; 34 private static final Float VALUE = 12.0F; 35 private static final CarPropertyValue<Float> CAR_PROPERTY_VALUE = new CarPropertyValue<>( 36 PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, VALUE); 37 38 @Test testSimpleFloatValue()39 public void testSimpleFloatValue() { 40 CarPropertyValue<Float> floatValue = 41 new CarPropertyValue<>(FLOAT_PROPERTY_ID, WINDOW_DRIVER, 10f); 42 43 writeToParcel(floatValue); 44 45 CarPropertyValue<Float> valueRead = readFromParcel(); 46 assertThat(valueRead.getValue()).isEqualTo((Object) 10f); 47 } 48 49 @Test testMixedValue()50 public void testMixedValue() { 51 CarPropertyValue<Object> mixedValue = 52 new CarPropertyValue<>(MIXED_TYPE_PROPERTY_ID, 53 VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL, 54 new Object[] { "android", 1, 2.0 }); 55 writeToParcel(mixedValue); 56 CarPropertyValue<Object[]> valueRead = readFromParcel(); 57 assertThat(valueRead.getValue()).asList().containsExactly("android", 1, 2.0).inOrder(); 58 assertThat(valueRead.getPropertyId()).isEqualTo(MIXED_TYPE_PROPERTY_ID); 59 assertThat(valueRead.getAreaId()).isEqualTo(VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL); 60 } 61 62 @Test hashCode_returnsSameValueForSameInstance()63 public void hashCode_returnsSameValueForSameInstance() { 64 assertThat(CAR_PROPERTY_VALUE.hashCode()).isEqualTo(CAR_PROPERTY_VALUE.hashCode()); 65 } 66 67 @Test hashCode_returnsDifferentValueForDifferentCarPropertyValue()68 public void hashCode_returnsDifferentValueForDifferentCarPropertyValue() { 69 assertThat(CAR_PROPERTY_VALUE.hashCode()).isNotEqualTo( 70 new CarPropertyValue<>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 1.23F).hashCode()); 71 } 72 73 @Test equals_returnsTrueForSameInstance()74 public void equals_returnsTrueForSameInstance() { 75 assertThat(CAR_PROPERTY_VALUE.equals(CAR_PROPERTY_VALUE)).isTrue(); 76 } 77 78 @Test equals_returnsFalseForNull()79 public void equals_returnsFalseForNull() { 80 assertThat(CAR_PROPERTY_VALUE.equals(null)).isFalse(); 81 } 82 83 @Test equals_returnsFalseForNonCarPropertyValue()84 public void equals_returnsFalseForNonCarPropertyValue() { 85 assertThat(CAR_PROPERTY_VALUE.equals(new Object())).isFalse(); 86 } 87 88 @Test equals_returnsFalseForDifferentPropertyIds()89 public void equals_returnsFalseForDifferentPropertyIds() { 90 int differentPropertyId = 4444; 91 assertThat(CAR_PROPERTY_VALUE.equals( 92 new CarPropertyValue<>(differentPropertyId, AREA_ID, TIMESTAMP_NANOS, VALUE))) 93 .isFalse(); 94 } 95 96 @Test equals_returnsFalseForDifferentAreaIds()97 public void equals_returnsFalseForDifferentAreaIds() { 98 int differentAreaId = 222; 99 assertThat(CAR_PROPERTY_VALUE.equals( 100 new CarPropertyValue<>(PROPERTY_ID, differentAreaId, TIMESTAMP_NANOS, VALUE))) 101 .isFalse(); 102 } 103 104 @Test equals_returnsFalseForDifferentStatuses()105 public void equals_returnsFalseForDifferentStatuses() { 106 int differentStatus = CarPropertyValue.STATUS_ERROR; 107 assertThat(CAR_PROPERTY_VALUE.equals( 108 new CarPropertyValue<>(PROPERTY_ID, AREA_ID, differentStatus, TIMESTAMP_NANOS, 109 VALUE))).isFalse(); 110 } 111 112 @Test equals_returnsFalseForDifferentTimestamps()113 public void equals_returnsFalseForDifferentTimestamps() { 114 long differentTimestampNanos = 76845; 115 assertThat(CAR_PROPERTY_VALUE.equals( 116 new CarPropertyValue<>(PROPERTY_ID, AREA_ID, differentTimestampNanos, VALUE))) 117 .isFalse(); 118 } 119 120 @Test equals_returnsFalseForDifferentValues()121 public void equals_returnsFalseForDifferentValues() { 122 Integer differentValue = 12; 123 assertThat(CAR_PROPERTY_VALUE.equals( 124 new CarPropertyValue<>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, differentValue))) 125 .isFalse(); 126 } 127 128 @Test equals_returnsTrueWhenEqual()129 public void equals_returnsTrueWhenEqual() { 130 assertThat(CAR_PROPERTY_VALUE.equals( 131 new CarPropertyValue<>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, VALUE))) 132 .isTrue(); 133 } 134 135 @Test equals_mixedValue()136 public void equals_mixedValue() { 137 assertThat( 138 new CarPropertyValue<Object[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 139 new Object[]{"abcd", 1, false}) 140 .equals(new CarPropertyValue<Object[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 141 new Object[]{"abcd", 1, false} 142 ))).isTrue(); 143 144 assertThat( 145 new CarPropertyValue<Object[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 146 new Object[]{"abcd", 1, false}) 147 .equals(new CarPropertyValue<Object[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 148 new Object[]{"a", 1, false} 149 ))).isFalse(); 150 } 151 152 @Test equals_intArray()153 public void equals_intArray() { 154 assertThat( 155 new CarPropertyValue<Integer[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 156 new Integer[]{1, 2}) 157 .equals(new CarPropertyValue<Integer[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 158 new Integer[]{1, 2} 159 ))).isTrue(); 160 161 assertThat( 162 new CarPropertyValue<Integer[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 163 new Integer[]{1, 2}) 164 .equals(new CarPropertyValue<Integer[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 165 new Integer[]{1, 2, 3} 166 ))).isFalse(); 167 } 168 169 @Test hashCode_mixedValue()170 public void hashCode_mixedValue() { 171 assertThat( 172 new CarPropertyValue<Object[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 173 new Object[]{"abcd", 1, false}).hashCode()) 174 .isEqualTo(new CarPropertyValue<Object[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 175 new Object[]{"abcd", 1, false}).hashCode()); 176 177 assertThat( 178 new CarPropertyValue<Object[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 179 new Object[]{"abcd", 1, false}).hashCode()) 180 .isNotEqualTo(new CarPropertyValue<Object[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 181 new Object[]{"abc", 1, false}).hashCode()); 182 } 183 184 @Test hashCode_intArray()185 public void hashCode_intArray() { 186 assertThat( 187 new CarPropertyValue<Integer[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 188 new Integer[]{1, 2}).hashCode()) 189 .isEqualTo(new CarPropertyValue<Integer[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 190 new Integer[]{1, 2}).hashCode()); 191 192 assertThat( 193 new CarPropertyValue<Integer[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 194 new Integer[]{1, 2}).hashCode()) 195 .isNotEqualTo(new CarPropertyValue<Integer[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 196 new Integer[]{1, 2, 3}).hashCode()); 197 } 198 199 @Test toString_mixedValue_containsMeaningfulValue()200 public void toString_mixedValue_containsMeaningfulValue() { 201 String stringRepr = new CarPropertyValue<Object[]>(PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, 202 new Object[]{"abcd", 1, false}).toString(); 203 204 expectThat(stringRepr.contains("abcd")); 205 expectThat(stringRepr.contains("1")); 206 expectThat(stringRepr.contains("false")); 207 } 208 209 @Test getStatus_returnsAvailable()210 public void getStatus_returnsAvailable() { 211 assertThat(CAR_PROPERTY_VALUE.getStatus()).isEqualTo(CarPropertyValue.STATUS_AVAILABLE); 212 } 213 214 @Test getStatus_returnsError()215 public void getStatus_returnsError() { 216 assertThat(new CarPropertyValue<>(PROPERTY_ID, AREA_ID, CarPropertyValue.STATUS_ERROR, 217 TIMESTAMP_NANOS, VALUE).getStatus()).isEqualTo(CarPropertyValue.STATUS_ERROR); 218 } 219 220 @Test nullValThrowException()221 public void nullValThrowException() { 222 assertThrows(NullPointerException.class, () -> new CarPropertyValue<Integer>(PROPERTY_ID, 223 AREA_ID, CarPropertyValue.STATUS_AVAILABLE, TIMESTAMP_NANOS, (Integer) null)); 224 } 225 } 226