1 /*
2  * Copyright (C) 2020 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;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import android.car.hardware.CarPropertyValue;
22 import android.car.hardware.property.CarPropertyEvent;
23 import android.car.hardware.property.CarPropertyManager;
24 import android.os.Parcel;
25 import android.os.Parcelable;
26 
27 import org.junit.After;
28 import org.junit.Test;
29 import org.junit.runner.RunWith;
30 import org.mockito.junit.MockitoJUnitRunner;
31 
32 /** Unit tests for {@link android.car.hardware.property.CarPropertyEvent} */
33 @RunWith(MockitoJUnitRunner.class)
34 public final class CarPropertyEventTest {
35     private static final int PROPERTY_ID = 1234;
36     private static final int AREA_ID = 5678;
37     private static final long TIMESTAMP_NANOS = 9294;
38     private static final Float VALUE = 12.0F;
39     private static final CarPropertyValue<Float> CAR_PROPERTY_VALUE = new CarPropertyValue<>(
40             PROPERTY_ID, AREA_ID, TIMESTAMP_NANOS, VALUE);
41     private static final int EVENT_TYPE = CarPropertyEvent.PROPERTY_EVENT_PROPERTY_CHANGE;
42     private static final int ERROR_CODE =
43             CarPropertyManager.CAR_SET_PROPERTY_ERROR_CODE_INVALID_ARG;
44     private static final CarPropertyEvent CAR_PROPERTY_EVENT = new CarPropertyEvent(EVENT_TYPE,
45             CAR_PROPERTY_VALUE, ERROR_CODE);
46 
47     private static final int FAKE_PROPERTY_ID = 0x1101111;
48     private static final int FAKE_AREA_ID = 0x1;
49     private static final int FAKE_PROPERTY_VALUE = 5;
50     private final Parcel mParcel = Parcel.obtain();
51 
52     @After
tearDown()53     public void tearDown() throws Exception {
54         mParcel.recycle();
55     }
56 
readFromParcel()57     private <T extends Parcelable> T readFromParcel() {
58         mParcel.setDataPosition(0);
59         return mParcel.readParcelable(null);
60     }
61 
writeToParcel(Parcelable value)62     private void writeToParcel(Parcelable value) {
63         mParcel.writeParcelable(value, 0);
64     }
65 
66     @Test
testCreateErrorEvent()67     public void testCreateErrorEvent() {
68         CarPropertyEvent carPropertyEvent = CarPropertyEvent
69                 .createErrorEventWithErrorCode(FAKE_PROPERTY_ID, FAKE_AREA_ID,
70                         CarPropertyManager.CAR_SET_PROPERTY_ERROR_CODE_UNKNOWN);
71 
72         assertThat(carPropertyEvent.getErrorCode())
73                 .isEqualTo(CarPropertyManager.CAR_SET_PROPERTY_ERROR_CODE_UNKNOWN);
74         assertThat(carPropertyEvent.getEventType()).isEqualTo(
75                 CarPropertyEvent.PROPERTY_EVENT_ERROR);
76         assertThat(carPropertyEvent.describeContents()).isEqualTo(0);
77     }
78 
79     @Test
testWriteAndReadEvent()80     public void testWriteAndReadEvent() {
81         CarPropertyValue<Integer> value = new CarPropertyValue<Integer>(FAKE_PROPERTY_ID,
82                 FAKE_AREA_ID, FAKE_PROPERTY_VALUE);
83         CarPropertyEvent carPropertyEvent = new CarPropertyEvent(
84                 CarPropertyEvent.PROPERTY_EVENT_PROPERTY_CHANGE, value);
85 
86         writeToParcel(carPropertyEvent);
87         CarPropertyEvent eventReadFromParcel = readFromParcel();
88 
89         assertThat(eventReadFromParcel.getCarPropertyValue().getAreaId())
90                 .isEqualTo(FAKE_AREA_ID);
91         assertThat(eventReadFromParcel.getCarPropertyValue().getPropertyId())
92                 .isEqualTo(FAKE_PROPERTY_ID);
93         assertThat(eventReadFromParcel.getCarPropertyValue().getValue())
94                 .isEqualTo(FAKE_PROPERTY_VALUE);
95         assertThat(eventReadFromParcel.getEventType())
96                 .isEqualTo(CarPropertyEvent.PROPERTY_EVENT_PROPERTY_CHANGE);
97     }
98 
99     @Test
equals_returnsTrueForSameObject()100     public void equals_returnsTrueForSameObject() {
101         assertThat(CAR_PROPERTY_EVENT.equals(CAR_PROPERTY_EVENT)).isTrue();
102     }
103 
104     @Test
equals_returnsFalseForNull()105     public void equals_returnsFalseForNull() {
106         assertThat(CAR_PROPERTY_EVENT.equals(null)).isFalse();
107     }
108 
109     @Test
equals_returnsFalseForNonCarPropertyEvent()110     public void equals_returnsFalseForNonCarPropertyEvent() {
111         assertThat(CAR_PROPERTY_EVENT.equals(new Object())).isFalse();
112     }
113 
114     @Test
equals_returnsFalseForDifferentEventTypes()115     public void equals_returnsFalseForDifferentEventTypes() {
116         int differentEventType = CarPropertyEvent.PROPERTY_EVENT_ERROR;
117         assertThat(CAR_PROPERTY_EVENT.equals(
118                 new CarPropertyEvent(differentEventType, CAR_PROPERTY_VALUE,
119                         ERROR_CODE))).isFalse();
120     }
121 
122     @Test
equals_returnsFalseForDifferentCarPropertyValues()123     public void equals_returnsFalseForDifferentCarPropertyValues() {
124         CarPropertyValue<Integer> differentCarPropertyValue = new CarPropertyValue<>(PROPERTY_ID,
125                 AREA_ID, 893);
126         assertThat(CAR_PROPERTY_EVENT.equals(
127                 new CarPropertyEvent(EVENT_TYPE, differentCarPropertyValue, ERROR_CODE))).isFalse();
128     }
129 
130     @Test
equals_returnsFalseForDifferentErrorCodes()131     public void equals_returnsFalseForDifferentErrorCodes() {
132         int differentErrorCode = CarPropertyManager.CAR_SET_PROPERTY_ERROR_CODE_UNKNOWN;
133         assertThat(CAR_PROPERTY_EVENT.equals(new CarPropertyEvent(EVENT_TYPE, CAR_PROPERTY_VALUE,
134                 differentErrorCode))).isFalse();
135     }
136 
137     @Test
equals_returnsTrueWhenEqual()138     public void equals_returnsTrueWhenEqual() {
139         assertThat(CAR_PROPERTY_EVENT.equals(
140                 new CarPropertyEvent(EVENT_TYPE, CAR_PROPERTY_VALUE, ERROR_CODE))).isTrue();
141     }
142 
143     @Test
hashCode_returnsSameValueForSameInstance()144     public void hashCode_returnsSameValueForSameInstance() {
145         assertThat(CAR_PROPERTY_EVENT.hashCode()).isEqualTo(CAR_PROPERTY_EVENT.hashCode());
146     }
147 
148     @Test
hashCode_returnsDifferentValueForDifferentCarPropertyEvent()149     public void hashCode_returnsDifferentValueForDifferentCarPropertyEvent() {
150         int differentErrorCode = CarPropertyManager.CAR_SET_PROPERTY_ERROR_CODE_UNKNOWN;
151         assertThat(CAR_PROPERTY_EVENT.hashCode()).isNotEqualTo(
152                 new CarPropertyEvent(EVENT_TYPE, CAR_PROPERTY_VALUE,
153                         differentErrorCode).hashCode());
154     }
155 }
156