• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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