summaryrefslogtreecommitdiff
path: root/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/ScreenManagerTests.java
blob: b5cecf26c5fea9245e9e01b5402221acd47f1ae3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
package com.smartdevicelink.managers.screen;

import androidx.test.ext.junit.runners.AndroidJUnit4;

import com.livio.taskmaster.Taskmaster;
import com.smartdevicelink.managers.BaseSubManager;
import com.smartdevicelink.managers.ISdl;
import com.smartdevicelink.managers.file.FileManager;
import com.smartdevicelink.managers.file.filetypes.SdlArtwork;
import com.smartdevicelink.managers.permission.PermissionManager;
import com.smartdevicelink.managers.screen.menu.DynamicMenuUpdatesMode;
import com.smartdevicelink.proxy.rpc.enums.FileType;
import com.smartdevicelink.proxy.rpc.enums.MetadataType;
import com.smartdevicelink.proxy.rpc.enums.TextAlignment;
import com.smartdevicelink.test.TestValues;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertFalse;
import static junit.framework.TestCase.assertNull;
import static junit.framework.TestCase.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

/**
 * This is a unit test class for the SmartDeviceLink library manager class :
 * {@link ScreenManager}
 */
@RunWith(AndroidJUnit4.class)
public class ScreenManagerTests {
    private ScreenManager screenManager;
    private SdlArtwork testArtwork;

    @Before
    public void setUp() throws Exception {


        ISdl internalInterface = mock(ISdl.class);
        when(internalInterface.getTaskmaster()).thenReturn(new Taskmaster.Builder().build());
        PermissionManager permissionManager = mock(PermissionManager.class);

        when(internalInterface.getPermissionManager()).thenReturn(permissionManager);
        FileManager fileManager = mock(FileManager.class);
        screenManager = new ScreenManager(internalInterface, fileManager);
        screenManager.start(null);
        testArtwork = new SdlArtwork("testFile", FileType.GRAPHIC_PNG, 1, false);
    }

    @Test
    public void testInstantiation() {
        assertNull(screenManager.getTextField1());
        assertNull(screenManager.getTextField2());
        assertNull(screenManager.getTextField3());
        assertNull(screenManager.getTextField4());
        assertNull(screenManager.getTitle());
        assertNull(screenManager.getMediaTrackTextField());
        assertNull(screenManager.getPrimaryGraphic());
        assertNull(screenManager.getSecondaryGraphic());
        assertEquals(screenManager.getTextAlignment(), TextAlignment.CENTERED);
        assertNull(screenManager.getTextField1Type());
        assertNull(screenManager.getTextField2Type());
        assertNull(screenManager.getTextField3Type());
        assertNull(screenManager.getTextField4Type());
        assertTrue(screenManager.getMenu().isEmpty());
        assertNull(screenManager.getVoiceCommands());
        assertTrue(screenManager.getSoftButtonObjects().isEmpty());
        assertNull(screenManager.getSoftButtonObjectByName("test"));
        assertNull(screenManager.getSoftButtonObjectById(1));
        assertEquals(screenManager.getDynamicMenuUpdatesMode(), DynamicMenuUpdatesMode.ON_WITH_COMPAT_MODE);
        assertEquals(screenManager.getState(), BaseSubManager.READY);
        assertNull(screenManager.getMenuConfiguration().getMenuLayout());
        assertNull(screenManager.getMenuConfiguration().getSubMenuLayout());
    }

    @Test
    public void testSetTextField() {
        screenManager.setTextField1("It is");
        screenManager.setTextField2("Wednesday");
        screenManager.setTextField3("My");
        screenManager.setTextField4("Dudes");
        screenManager.setTitle("title");
        assertEquals(screenManager.getTextField1(), "It is");
        assertEquals(screenManager.getTextField2(), "Wednesday");
        assertEquals(screenManager.getTextField3(), "My");
        assertEquals(screenManager.getTextField4(), "Dudes");
        assertEquals(screenManager.getTitle(), "title");
    }

    @Test
    public void testMediaTrackTextFields() {
        String songTitle = "Wild For The Night";
        screenManager.setMediaTrackTextField(songTitle);
        assertEquals(screenManager.getMediaTrackTextField(), songTitle);
    }

    @Test
    public void testSetPrimaryGraphic() {
        screenManager.setPrimaryGraphic(testArtwork);
        assertEquals(screenManager.getPrimaryGraphic(), testArtwork);
    }

    @Test
    public void testSetPrimaryGraphicWithBlankImage() {
        screenManager.setPrimaryGraphic(null);
        assertNull(screenManager.getPrimaryGraphic());
    }

    @Test
    public void testSetSecondaryGraphic() {
        screenManager.setSecondaryGraphic(testArtwork);
        assertEquals(screenManager.getSecondaryGraphic(), testArtwork);
    }

    @Test
    public void testSetSecondaryGraphicWithBlankImage() {
        screenManager.setSecondaryGraphic(null);
        assertNull(screenManager.getSecondaryGraphic());
    }

    @Test
    public void testAlignment() {
        screenManager.setTextAlignment(TextAlignment.LEFT_ALIGNED);
        assertEquals(screenManager.getTextAlignment(), TextAlignment.LEFT_ALIGNED);
    }

    @Test
    public void testSetTextFieldTypes() {
        screenManager.setTextField1Type(MetadataType.MEDIA_TITLE);
        screenManager.setTextField2Type(MetadataType.MEDIA_ALBUM);
        screenManager.setTextField3Type(MetadataType.MEDIA_ARTIST);
        screenManager.setTextField4Type(MetadataType.MEDIA_GENRE);
        assertEquals(screenManager.getTextField1Type(), MetadataType.MEDIA_TITLE);
        assertEquals(screenManager.getTextField2Type(), MetadataType.MEDIA_ALBUM);
        assertEquals(screenManager.getTextField3Type(), MetadataType.MEDIA_ARTIST);
        assertEquals(screenManager.getTextField4Type(), MetadataType.MEDIA_GENRE);
    }

    @Test
    public void testSetMenuManagerFields() {
        screenManager.setDynamicMenuUpdatesMode(DynamicMenuUpdatesMode.FORCE_ON);
        screenManager.setMenu(TestValues.GENERAL_MENUCELL_LIST);
        screenManager.setMenuConfiguration(TestValues.GENERAL_MENU_CONFIGURATION);

        assertEquals(screenManager.getDynamicMenuUpdatesMode(), DynamicMenuUpdatesMode.FORCE_ON);
        assertEquals(screenManager.getMenu(), TestValues.GENERAL_MENUCELL_LIST);
        assertEquals(screenManager.getMenuConfiguration(), TestValues.GENERAL_MENU_CONFIGURATION);
    }

    @Test
    public void testSetVoiceCommands() {
        screenManager.setVoiceCommands(TestValues.GENERAL_VOICE_COMMAND_LIST);
        assertEquals(screenManager.getVoiceCommands(), TestValues.GENERAL_VOICE_COMMAND_LIST);
    }

    @Test
    public void testSetSoftButtonObjects() {
        // Create softButtonObject1
        SoftButtonState softButtonState1 = new SoftButtonState("object1-state1", "it is", testArtwork);
        SoftButtonState softButtonState2 = new SoftButtonState("object1-state2", "Wed", testArtwork);
        SoftButtonObject softButtonObject1 = new SoftButtonObject("object1", Arrays.asList(softButtonState1, softButtonState2), softButtonState1.getName(), null);
        softButtonObject1.setButtonId(100);

        // Create softButtonObject2
        SoftButtonState softButtonState3 = new SoftButtonState("object2-state1", "my", testArtwork);
        SoftButtonState softButtonState4 = new SoftButtonState("object2-state2", "dudes!", null);
        SoftButtonObject softButtonObject2 = new SoftButtonObject("object2", Arrays.asList(softButtonState3, softButtonState4), softButtonState3.getName(), null);
        softButtonObject2.setButtonId(200);

        List<SoftButtonObject> softButtonObjects = Arrays.asList(softButtonObject1, softButtonObject2);
        screenManager.setSoftButtonObjects(Arrays.asList(softButtonObject1, softButtonObject2));
        assertEquals(screenManager.getSoftButtonObjects(), softButtonObjects);
        assertEquals(screenManager.getSoftButtonObjectByName("object2"), softButtonObject2);
        assertEquals(screenManager.getSoftButtonObjectById(200), softButtonObject2);
    }

    @Test
    public void testSettingSoftButtonId() {
        // Create softButtonObject1
        SoftButtonState softButtonState1 = new SoftButtonState("object1-state1", "it is", testArtwork);
        SoftButtonState softButtonState2 = new SoftButtonState("object1-state2", "Wed", testArtwork);
        SoftButtonObject softButtonObject1 = new SoftButtonObject("object1", Arrays.asList(softButtonState1, softButtonState2), softButtonState1.getName(), null);
        softButtonObject1.setButtonId(100);

        // Create softButtonObject2
        SoftButtonState softButtonState3 = new SoftButtonState("object2-state1", "my", testArtwork);
        SoftButtonState softButtonState4 = new SoftButtonState("object2-state2", "dudes!", null);
        SoftButtonObject softButtonObject2 = new SoftButtonObject("object2", Arrays.asList(softButtonState3, softButtonState4), softButtonState3.getName(), null);
        softButtonObject2.setButtonId(200);

        List<SoftButtonObject> softButtonObjects = Arrays.asList(softButtonObject1, softButtonObject2);
        assertTrue(screenManager.checkAndAssignButtonIds(softButtonObjects, BaseScreenManager.ManagerLocation.SOFTBUTTON_MANAGER));
        screenManager.softButtonIDBySoftButtonManager.add(200);
        assertFalse(screenManager.checkAndAssignButtonIds(softButtonObjects, BaseScreenManager.ManagerLocation.ALERT_MANAGER));
        screenManager.softButtonIDByAlertManager.add(100);
        assertFalse(screenManager.checkAndAssignButtonIds(softButtonObjects, BaseScreenManager.ManagerLocation.SOFTBUTTON_MANAGER));
        screenManager.softButtonIDByAlertManager.clear();
        screenManager.softButtonIDBySoftButtonManager.clear();
        assertTrue(screenManager.checkAndAssignButtonIds(softButtonObjects, BaseScreenManager.ManagerLocation.ALERT_MANAGER));
        softButtonObject1.setButtonId(400);
        softButtonObject2.setButtonId(500);
        assertTrue(screenManager.checkAndAssignButtonIds(softButtonObjects, BaseScreenManager.ManagerLocation.SOFTBUTTON_MANAGER));
        SoftButtonObject softButtonObject3 = new SoftButtonObject("object1", Arrays.asList(softButtonState1, softButtonState2), softButtonState1.getName(), null);
        SoftButtonObject softButtonObject4 = new SoftButtonObject("object2", Arrays.asList(softButtonState3, softButtonState4), softButtonState3.getName(), null);
        assertTrue(screenManager.checkAndAssignButtonIds(softButtonObjects, BaseScreenManager.ManagerLocation.SOFTBUTTON_MANAGER));





    }
    @Test
    public void testAssigningIdsToSoftButtonObjects() {
        SoftButtonObject sbo1, sbo2, sbo3, sbo4, sbo5;

        // Case 1 - don't set id for any button (Manager should set ids automatically starting from 1 and up)
        sbo1 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        sbo2 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        sbo3 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        sbo4 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        sbo5 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        screenManager.checkAndAssignButtonIds(Arrays.asList(sbo1, sbo2, sbo3, sbo4, sbo5), BaseScreenManager.ManagerLocation.SOFTBUTTON_MANAGER);
        assertEquals("SoftButtonObject id doesn't match the expected value", 1, sbo1.getButtonId());
        assertEquals("SoftButtonObject id doesn't match the expected value", 2, sbo2.getButtonId());
        assertEquals("SoftButtonObject id doesn't match the expected value", 3, sbo3.getButtonId());
        assertEquals("SoftButtonObject id doesn't match the expected value", 4, sbo4.getButtonId());
        assertEquals("SoftButtonObject id doesn't match the expected value", 5, sbo5.getButtonId());


        // Case 2 - Set ids for all buttons (Manager shouldn't alter the ids set by developer)
        sbo1 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        sbo1.setButtonId(100);
        sbo2 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        sbo2.setButtonId(200);
        sbo3 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        sbo3.setButtonId(300);
        sbo4 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        sbo4.setButtonId(400);
        sbo5 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        sbo5.setButtonId(500);
        screenManager.checkAndAssignButtonIds(Arrays.asList(sbo1, sbo2, sbo3, sbo4, sbo5), BaseScreenManager.ManagerLocation.SOFTBUTTON_MANAGER);
        assertEquals("SoftButtonObject id doesn't match the expected value", 100, sbo1.getButtonId());
        assertEquals("SoftButtonObject id doesn't match the expected value", 200, sbo2.getButtonId());
        assertEquals("SoftButtonObject id doesn't match the expected value", 300, sbo3.getButtonId());
        assertEquals("SoftButtonObject id doesn't match the expected value", 400, sbo4.getButtonId());
        assertEquals("SoftButtonObject id doesn't match the expected value", 500, sbo5.getButtonId());


        // Case 3 - Set ids for some buttons (Manager shouldn't alter the ids set by developer. And it should assign ids for the ones that don't have id)
        sbo1 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        sbo1.setButtonId(50);
        sbo2 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        sbo3 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        sbo4 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        sbo4.setButtonId(100);
        sbo5 = new SoftButtonObject(null, Collections.EMPTY_LIST, null, null);
        screenManager.checkAndAssignButtonIds(Arrays.asList(sbo1, sbo2, sbo3, sbo4, sbo5), BaseScreenManager.ManagerLocation.SOFTBUTTON_MANAGER);
        assertEquals("SoftButtonObject id doesn't match the expected value", 50, sbo1.getButtonId());
        assertEquals("SoftButtonObject id doesn't match the expected value", 101, sbo2.getButtonId());
        assertEquals("SoftButtonObject id doesn't match the expected value", 102, sbo3.getButtonId());
        assertEquals("SoftButtonObject id doesn't match the expected value", 100, sbo4.getButtonId());
        assertEquals("SoftButtonObject id doesn't match the expected value", 103, sbo5.getButtonId());
    }
}