Skip to content

Commit d7661ac

Browse files
Merge pull request #1478 from smartdevicelink/bugfix/issue_1465
Fix Issue 1465 - NPE in ManagerUtility
2 parents a4539e3 + ddc42d9 commit d7661ac

2 files changed

Lines changed: 236 additions & 22 deletions

File tree

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
package com.smartdevicelink.managers;
2+
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
4+
5+
import com.smartdevicelink.proxy.rpc.ImageField;
6+
import com.smartdevicelink.proxy.rpc.TextField;
7+
import com.smartdevicelink.proxy.rpc.WindowCapability;
8+
import com.smartdevicelink.proxy.rpc.enums.CharacterSet;
9+
import com.smartdevicelink.proxy.rpc.enums.FileType;
10+
import com.smartdevicelink.proxy.rpc.enums.ImageFieldName;
11+
import com.smartdevicelink.proxy.rpc.enums.TextFieldName;
12+
13+
14+
import org.junit.Before;
15+
import org.junit.Test;
16+
import org.junit.runner.RunWith;
17+
18+
19+
import java.util.ArrayList;
20+
import java.util.Arrays;
21+
import java.util.List;
22+
23+
import static junit.framework.TestCase.assertEquals;
24+
import static junit.framework.TestCase.assertNotNull;
25+
import static junit.framework.TestCase.assertTrue;
26+
import static junit.framework.TestCase.assertFalse;
27+
28+
/**
29+
* This is a unit test class for the SmartDeviceLink library manager class :
30+
* {@link ManagerUtility}
31+
*/
32+
@RunWith(AndroidJUnit4.class)
33+
public class ManagerUtilityTests {
34+
35+
36+
@Before
37+
public void setUp() throws Exception{
38+
39+
}
40+
41+
// TESTS
42+
43+
@Test
44+
public void testGetAllImageFields(){
45+
46+
List<ImageField> fields = ManagerUtility.WindowCapabilityUtility.getAllImageFields();
47+
assertNotNull(fields);
48+
int size = fields.size();
49+
assertEquals(ImageFieldName.values().length, size);
50+
51+
ImageFieldName[] names = ImageFieldName.values();
52+
53+
boolean found;
54+
for (ImageFieldName name : names) {
55+
found = false;
56+
for(ImageField field : fields) {
57+
if(field != null
58+
&& field.getName() != null
59+
&& field.getName().equals(name)) {
60+
found = true;
61+
break;
62+
}
63+
}
64+
assertTrue(found);
65+
}
66+
67+
}
68+
69+
@Test
70+
public void testGetAllTextFields(){
71+
72+
List<TextField> fields = ManagerUtility.WindowCapabilityUtility.getAllTextFields();
73+
assertNotNull(fields);
74+
int size = fields.size();
75+
assertEquals(TextFieldName.values().length, size);
76+
77+
TextFieldName[] names = TextFieldName.values();
78+
79+
boolean found;
80+
for (TextFieldName name : names) {
81+
found = false;
82+
for(TextField field : fields) {
83+
if(field != null
84+
&& field.getName() != null
85+
&& field.getName().equals(name)) {
86+
found = true;
87+
break;
88+
}
89+
}
90+
assertTrue(found);
91+
}
92+
93+
}
94+
95+
@Test
96+
public void testHasTextFieldOfName() {
97+
WindowCapability capability = new WindowCapability();
98+
List<TextField> textFieldList = new ArrayList<>();
99+
textFieldList.add(new TextField(TextFieldName.mainField1, CharacterSet.UTF_8, 500, 8));
100+
capability.setTextFields(textFieldList);
101+
102+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.mainField1));
103+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.alertText3));
104+
105+
textFieldList.add(new TextField(TextFieldName.alertText3, CharacterSet.UTF_8, 500, 8));
106+
capability.setTextFields(textFieldList);
107+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.mainField1));
108+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.alertText3));
109+
110+
textFieldList.clear();
111+
textFieldList.add(null);
112+
capability.setTextFields(textFieldList);
113+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.mainField1));
114+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.alertText3));
115+
116+
textFieldList.add(new TextField(TextFieldName.alertText3, CharacterSet.UTF_8, 500, 8));
117+
capability.setTextFields(textFieldList);
118+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.mainField1));
119+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.alertText3));
120+
121+
}
122+
123+
@Test
124+
public void testHasImageFieldOfName() {
125+
126+
WindowCapability capability = new WindowCapability();
127+
List<FileType> allImageFileTypes = Arrays.asList(FileType.GRAPHIC_BMP, FileType.GRAPHIC_JPEG, FileType.GRAPHIC_PNG);
128+
129+
List<ImageField> imageFieldList = new ArrayList<>();
130+
imageFieldList.add(new ImageField(ImageFieldName.graphic, allImageFileTypes));
131+
capability.setImageFields(imageFieldList);
132+
133+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.graphic));
134+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.alertIcon));
135+
136+
imageFieldList.add(new ImageField(ImageFieldName.alertIcon, allImageFileTypes));
137+
capability.setImageFields(imageFieldList);
138+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.graphic));
139+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.alertIcon));;
140+
141+
imageFieldList.clear();
142+
imageFieldList.add(null);
143+
capability.setImageFields(imageFieldList);
144+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.graphic));
145+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.alertIcon));
146+
147+
imageFieldList.add(new ImageField(ImageFieldName.alertIcon, allImageFileTypes));
148+
capability.setImageFields(imageFieldList);
149+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.graphic));
150+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.alertIcon));
151+
152+
}
153+
154+
155+
@Test
156+
public void testGetMaxNumberOfMainFieldLines() {
157+
158+
WindowCapability capability = new WindowCapability();
159+
capability.setTextFields(ManagerUtility.WindowCapabilityUtility.getAllTextFields());
160+
161+
int maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
162+
163+
assertEquals(4, maxNumerOfLines);
164+
165+
//Single line
166+
List<TextField> singleLineList = new ArrayList<>();
167+
singleLineList.add(new TextField(TextFieldName.mainField1, CharacterSet.UTF_8, 500, 8));
168+
capability.setTextFields(singleLineList);
169+
maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
170+
assertEquals(1, maxNumerOfLines);
171+
172+
singleLineList.add(new TextField(TextFieldName.mainField2, CharacterSet.UTF_8, 500, 8));
173+
capability.setTextFields(singleLineList);
174+
maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
175+
assertEquals(2, maxNumerOfLines);
176+
177+
singleLineList.add(new TextField(TextFieldName.mainField3, CharacterSet.UTF_8, 500, 8));
178+
capability.setTextFields(singleLineList);
179+
maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
180+
assertEquals(3, maxNumerOfLines);
181+
182+
singleLineList.add(new TextField(TextFieldName.mainField4, CharacterSet.UTF_8, 500, 8));
183+
capability.setTextFields(singleLineList);
184+
maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
185+
assertEquals(4, maxNumerOfLines);
186+
187+
List<TextField> nullList = new ArrayList<>();
188+
nullList.add(null);
189+
assertNotNull(nullList);
190+
capability.setTextFields(nullList);
191+
assertNotNull(capability);
192+
assertNotNull(capability.getTextFields());
193+
194+
maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
195+
assertEquals(0, maxNumerOfLines);
196+
197+
nullList.add(new TextField(TextFieldName.mainField4, CharacterSet.UTF_8, 500, 8));
198+
assertNotNull(nullList);
199+
capability.setTextFields(nullList);
200+
assertNotNull(capability);
201+
assertNotNull(capability.getTextFields());
202+
maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
203+
assertEquals(4, maxNumerOfLines);
204+
205+
}
206+
}

base/src/main/java/com/smartdevicelink/managers/ManagerUtility.java

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,17 @@ public static class WindowCapabilityUtility {
2828
* @param name ImageFieldName representing a name of a given Image field that would be stored in WindowCapability
2929
* @return true if name exist in WindowCapability else false
3030
*/
31-
public static boolean hasImageFieldOfName(WindowCapability windowCapability, ImageFieldName name) {
31+
public static boolean hasImageFieldOfName(final WindowCapability windowCapability, final ImageFieldName name) {
3232
if (windowCapability == null || name == null) {
3333
return false;
3434
}
3535
if (windowCapability.getImageFields() != null) {
36-
for (ImageField field : windowCapability.getImageFields()) {
37-
if (field != null && name.equals(field.getName())) {
38-
return true;
36+
List<ImageField> imageFields = windowCapability.getImageFields();
37+
if(imageFields != null && imageFields.size() > 0) {
38+
for (ImageField field : imageFields) {
39+
if (field != null && name.equals(field.getName())) {
40+
return true;
41+
}
3942
}
4043
}
4144
}
@@ -49,14 +52,17 @@ public static boolean hasImageFieldOfName(WindowCapability windowCapability, Ima
4952
* @param name TextFieldName representing a name of a given text field that would be stored in WindowCapability
5053
* @return true if name exist in WindowCapability else false
5154
*/
52-
public static boolean hasTextFieldOfName(WindowCapability windowCapability, TextFieldName name) {
55+
public static boolean hasTextFieldOfName(final WindowCapability windowCapability, final TextFieldName name) {
5356
if (windowCapability == null || name == null) {
5457
return false;
5558
}
5659
if (windowCapability.getTextFields() != null) {
57-
for (TextField field : windowCapability.getTextFields()) {
58-
if (field != null && name.equals(field.getName())) {
59-
return true;
60+
List<TextField> textFields = windowCapability.getTextFields();
61+
if (textFields != null && textFields.size() > 0) {
62+
for (TextField field : textFields) {
63+
if (field != null && name.equals(field.getName())) {
64+
return true;
65+
}
6066
}
6167
}
6268
}
@@ -69,24 +75,26 @@ public static boolean hasTextFieldOfName(WindowCapability windowCapability, Text
6975
* @param windowCapability WindowCapability representing the capabilities of the desired window
7076
* @return linesFound Number of textFields found in WindowCapability
7177
*/
72-
public static int getMaxNumberOfMainFieldLines(WindowCapability windowCapability) {
78+
public static int getMaxNumberOfMainFieldLines(final WindowCapability windowCapability) {
7379
int highestFound = 0;
7480
if (windowCapability != null && windowCapability.getTextFields() != null) {
7581
for (TextField field : windowCapability.getTextFields()) {
7682
int fieldNumber = 0;
77-
switch (field.getName()) {
78-
case mainField1:
79-
fieldNumber = 1;
80-
break;
81-
case mainField2:
82-
fieldNumber = 2;
83-
break;
84-
case mainField3:
85-
fieldNumber = 3;
86-
break;
87-
case mainField4:
88-
fieldNumber = 4;
89-
break;
83+
if(field != null) {
84+
switch (field.getName()) {
85+
case mainField1:
86+
fieldNumber = 1;
87+
break;
88+
case mainField2:
89+
fieldNumber = 2;
90+
break;
91+
case mainField3:
92+
fieldNumber = 3;
93+
break;
94+
case mainField4:
95+
fieldNumber = 4;
96+
break;
97+
}
9098
}
9199
if (fieldNumber > 0) {
92100
highestFound = Math.max(highestFound, fieldNumber);

0 commit comments

Comments
 (0)