1 /*
2  * Copyright (C) 2019 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.os;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.junit.runners.JUnit4;
24 
25 import java.util.List;
26 
27 @RunWith(JUnit4.class)
28 public final class StatsDimensionsValueTest {
29 
30     @Test
testConversionFromStructuredParcel()31     public void testConversionFromStructuredParcel() {
32         int tupleField = 100; // atom id
33         String stringValue = "Hello";
34         int intValue = 123;
35         long longValue = 123456789L;
36         float floatValue = 1.1f;
37         boolean boolValue = true;
38 
39         // Construct structured parcel
40         StatsDimensionsValueParcel sdvp = new StatsDimensionsValueParcel();
41         sdvp.field = tupleField;
42         sdvp.valueType = StatsDimensionsValue.TUPLE_VALUE_TYPE;
43         sdvp.tupleValue = new StatsDimensionsValueParcel[5];
44 
45         for (int i = 0; i < 5; i++) {
46             sdvp.tupleValue[i] = new StatsDimensionsValueParcel();
47             sdvp.tupleValue[i].field = i + 1;
48         }
49 
50         sdvp.tupleValue[0].valueType = StatsDimensionsValue.STRING_VALUE_TYPE;
51         sdvp.tupleValue[1].valueType = StatsDimensionsValue.INT_VALUE_TYPE;
52         sdvp.tupleValue[2].valueType = StatsDimensionsValue.LONG_VALUE_TYPE;
53         sdvp.tupleValue[3].valueType = StatsDimensionsValue.FLOAT_VALUE_TYPE;
54         sdvp.tupleValue[4].valueType = StatsDimensionsValue.BOOLEAN_VALUE_TYPE;
55 
56         sdvp.tupleValue[0].stringValue = stringValue;
57         sdvp.tupleValue[1].intValue = intValue;
58         sdvp.tupleValue[2].longValue = longValue;
59         sdvp.tupleValue[3].floatValue = floatValue;
60         sdvp.tupleValue[4].boolValue = boolValue;
61 
62         // Convert to StatsDimensionsValue and check result
63         StatsDimensionsValue sdv = new StatsDimensionsValue(sdvp);
64 
65         assertThat(sdv.getField()).isEqualTo(tupleField);
66         assertThat(sdv.getValueType()).isEqualTo(StatsDimensionsValue.TUPLE_VALUE_TYPE);
67         List<StatsDimensionsValue> sdvChildren = sdv.getTupleValueList();
68         assertThat(sdvChildren.size()).isEqualTo(5);
69 
70         for (int i = 0; i < 5; i++) {
71             assertThat(sdvChildren.get(i).getField()).isEqualTo(i + 1);
72         }
73 
74         assertThat(sdvChildren.get(0).getValueType())
75               .isEqualTo(StatsDimensionsValue.STRING_VALUE_TYPE);
76         assertThat(sdvChildren.get(1).getValueType())
77               .isEqualTo(StatsDimensionsValue.INT_VALUE_TYPE);
78         assertThat(sdvChildren.get(2).getValueType())
79               .isEqualTo(StatsDimensionsValue.LONG_VALUE_TYPE);
80         assertThat(sdvChildren.get(3).getValueType())
81               .isEqualTo(StatsDimensionsValue.FLOAT_VALUE_TYPE);
82         assertThat(sdvChildren.get(4).getValueType())
83               .isEqualTo(StatsDimensionsValue.BOOLEAN_VALUE_TYPE);
84 
85         assertThat(sdvChildren.get(0).getStringValue()).isEqualTo(stringValue);
86         assertThat(sdvChildren.get(1).getIntValue()).isEqualTo(intValue);
87         assertThat(sdvChildren.get(2).getLongValue()).isEqualTo(longValue);
88         assertThat(sdvChildren.get(3).getFloatValue()).isEqualTo(floatValue);
89         assertThat(sdvChildren.get(4).getBooleanValue()).isEqualTo(boolValue);
90 
91         // Ensure that StatsDimensionsValue and StatsDimensionsValueParcel are
92         // parceled equivalently
93         Parcel sdvpParcel = Parcel.obtain();
94         Parcel sdvParcel = Parcel.obtain();
95         sdvp.writeToParcel(sdvpParcel, 0);
96         sdv.writeToParcel(sdvParcel, 0);
97         assertThat(sdvpParcel.dataSize()).isEqualTo(sdvParcel.dataSize());
98     }
99 
100     @Test
testNullTupleArray()101     public void testNullTupleArray() {
102         int tupleField = 100; // atom id
103 
104         StatsDimensionsValueParcel parcel = new StatsDimensionsValueParcel();
105         parcel.field = tupleField;
106         parcel.valueType = StatsDimensionsValue.TUPLE_VALUE_TYPE;
107         parcel.tupleValue = null;
108 
109         StatsDimensionsValue sdv = new StatsDimensionsValue(parcel);
110         assertThat(sdv.getField()).isEqualTo(tupleField);
111         assertThat(sdv.getValueType()).isEqualTo(StatsDimensionsValue.TUPLE_VALUE_TYPE);
112         List<StatsDimensionsValue> sdvChildren = sdv.getTupleValueList();
113         assertThat(sdvChildren.size()).isEqualTo(0);
114     }
115 }
116