2222import com .smartdevicelink .proxy .rpc .GetSystemCapability ;
2323import com .smartdevicelink .proxy .rpc .GetSystemCapabilityResponse ;
2424import com .smartdevicelink .proxy .rpc .HMICapabilities ;
25+ import com .smartdevicelink .proxy .rpc .OnHMIStatus ;
2526import com .smartdevicelink .proxy .rpc .OnSystemCapabilityUpdated ;
2627import com .smartdevicelink .proxy .rpc .PhoneCapability ;
2728import com .smartdevicelink .proxy .rpc .PresetBankCapabilities ;
3435import com .smartdevicelink .proxy .rpc .WindowCapability ;
3536import com .smartdevicelink .proxy .rpc .WindowTypeCapabilities ;
3637import com .smartdevicelink .proxy .rpc .enums .AppServiceType ;
38+ import com .smartdevicelink .proxy .rpc .enums .AudioStreamingState ;
3739import com .smartdevicelink .proxy .rpc .enums .DisplayType ;
40+ import com .smartdevicelink .proxy .rpc .enums .HMILevel ;
3841import com .smartdevicelink .proxy .rpc .enums .HmiZoneCapabilities ;
3942import com .smartdevicelink .proxy .rpc .enums .ImageType ;
4043import com .smartdevicelink .proxy .rpc .enums .MediaClockFormat ;
4447import com .smartdevicelink .proxy .rpc .enums .ServiceUpdateReason ;
4548import com .smartdevicelink .proxy .rpc .enums .SpeechCapabilities ;
4649import com .smartdevicelink .proxy .rpc .enums .SystemCapabilityType ;
50+ import com .smartdevicelink .proxy .rpc .enums .SystemContext ;
4751import com .smartdevicelink .proxy .rpc .enums .WindowType ;
4852import com .smartdevicelink .proxy .rpc .listeners .OnMultipleRequestListener ;
4953import com .smartdevicelink .proxy .rpc .listeners .OnRPCListener ;
6771import java .util .concurrent .CopyOnWriteArrayList ;
6872
6973import static org .mockito .ArgumentMatchers .any ;
74+ import static org .mockito .ArgumentMatchers .eq ;
7075import static org .mockito .Mockito .doAnswer ;
7176import static org .mockito .Mockito .mock ;
7277import static org .mockito .Mockito .times ;
@@ -216,6 +221,11 @@ public void sendRPC(RPCMessage message) {
216221 request .getOnRPCResponseListener ().onResponse (CorrelationIdGenerator .generateId (), response );
217222 }
218223 }
224+
225+ @ Override
226+ public void addOnRPCListener (FunctionID messageId , OnRPCListener listener ) {
227+ listener .onReceived (new OnHMIStatus (HMILevel .HMI_FULL , AudioStreamingState .NOT_AUDIBLE , SystemContext .SYSCTXT_MAIN ));
228+ }
219229 });
220230
221231 systemCapabilityManager .getCapability (SystemCapabilityType .VIDEO_STREAMING , new OnSystemCapabilityListener () {
@@ -234,6 +244,21 @@ public void onError(String info) {
234244 });
235245 }
236246
247+ private Answer <Void > createOnHMIStatusAnswer (final HMILevel hmiLevel ){
248+ Answer <Void > onHMIStatusAnswer = new Answer <Void >() {
249+ @ Override
250+ public Void answer (InvocationOnMock invocation ) {
251+ Object [] args = invocation .getArguments ();
252+ OnRPCListener onHMIStatusListener = (OnRPCListener ) args [1 ];
253+ OnHMIStatus onHMIStatusFakeNotification = new OnHMIStatus ();
254+ onHMIStatusFakeNotification .setHmiLevel (hmiLevel );
255+ onHMIStatusListener .onReceived (onHMIStatusFakeNotification );
256+ return null ;
257+ }
258+ };
259+ return onHMIStatusAnswer ;
260+ }
261+
237262 private Answer <Void > createOnSendGetSystemCapabilityAnswer (final boolean success , final Boolean subscribe ) {
238263 Answer <Void > onSendGetSystemCapabilityAnswer = new Answer <Void >() {
239264 @ Override
@@ -266,6 +291,7 @@ public void testGetCapability() {
266291
267292 // Test case 1 (capability not cached, listener not null, forceUpdate false)
268293 internalInterface = mock (ISdl .class );
294+ doAnswer (createOnHMIStatusAnswer (HMILevel .HMI_FULL )).when (internalInterface ).addOnRPCListener (eq (FunctionID .ON_HMI_STATUS ), any (OnRPCListener .class ));
269295 scm = new SystemCapabilityManager (internalInterface );
270296 onSystemCapabilityListener = mock (OnSystemCapabilityListener .class );
271297 doAnswer (createOnSendGetSystemCapabilityAnswer (true , null )).when (internalInterface ).sendRPC (any (GetSystemCapability .class ));
@@ -278,6 +304,7 @@ public void testGetCapability() {
278304
279305 // Test case 2 (capability cached, listener not null, forceUpdate true)
280306 internalInterface = mock (ISdl .class );
307+ doAnswer (createOnHMIStatusAnswer (HMILevel .HMI_FULL )).when (internalInterface ).addOnRPCListener (eq (FunctionID .ON_HMI_STATUS ), any (OnRPCListener .class ));
281308 scm = new SystemCapabilityManager (internalInterface );
282309 onSystemCapabilityListener = mock (OnSystemCapabilityListener .class );
283310 doAnswer (createOnSendGetSystemCapabilityAnswer (true , null )).when (internalInterface ).sendRPC (any (GetSystemCapability .class ));
@@ -290,6 +317,7 @@ public void testGetCapability() {
290317
291318 // Test case 3 (capability cached, listener null, forceUpdate true)
292319 internalInterface = mock (ISdl .class );
320+ doAnswer (createOnHMIStatusAnswer (HMILevel .HMI_FULL )).when (internalInterface ).addOnRPCListener (eq (FunctionID .ON_HMI_STATUS ), any (OnRPCListener .class ));
293321 scm = new SystemCapabilityManager (internalInterface );
294322 onSystemCapabilityListener = null ;
295323 doAnswer (createOnSendGetSystemCapabilityAnswer (true , null )).when (internalInterface ).sendRPC (any (GetSystemCapability .class ));
@@ -301,6 +329,7 @@ public void testGetCapability() {
301329
302330 // Test case 4 (capability cached, listener null, forceUpdate false)
303331 internalInterface = mock (ISdl .class );
332+ doAnswer (createOnHMIStatusAnswer (HMILevel .HMI_FULL )).when (internalInterface ).addOnRPCListener (eq (FunctionID .ON_HMI_STATUS ), any (OnRPCListener .class ));
304333 scm = new SystemCapabilityManager (internalInterface );
305334 onSystemCapabilityListener = null ;
306335 doAnswer (createOnSendGetSystemCapabilityAnswer (true , null )).when (internalInterface ).sendRPC (any (GetSystemCapability .class ));
@@ -310,10 +339,25 @@ public void testGetCapability() {
310339 verify (internalInterface , times (0 )).sendRPC (any (GetSystemCapability .class ));
311340 }
312341
342+ public void testGetCapabilityHmiNone () {
343+ ISdl internalInterface = mock (ISdl .class );
344+ doAnswer (createOnHMIStatusAnswer (HMILevel .HMI_NONE )).when (internalInterface ).addOnRPCListener (eq (FunctionID .ON_HMI_STATUS ), any (OnRPCListener .class ));
345+ SystemCapabilityManager scm = new SystemCapabilityManager (internalInterface );
346+ OnSystemCapabilityListener onSystemCapabilityListener = mock (OnSystemCapabilityListener .class );
347+ doAnswer (createOnSendGetSystemCapabilityAnswer (true , null )).when (internalInterface ).sendRPC (any (GetSystemCapability .class ));
348+ scm .setCapability (SystemCapabilityType .VIDEO_STREAMING , null );
349+ VideoStreamingCapability retrievedCapability = (VideoStreamingCapability ) scm .getCapability (SystemCapabilityType .VIDEO_STREAMING , onSystemCapabilityListener , false );
350+ assertNull (retrievedCapability );
351+ verify (internalInterface , times (0 )).sendRPC (any (GetSystemCapability .class ));
352+ verify (onSystemCapabilityListener , times (0 )).onCapabilityRetrieved (any (Object .class ));
353+ verify (onSystemCapabilityListener , times (1 )).onError (any (String .class ));
354+ }
355+
313356 public void testAddOnSystemCapabilityListenerWithSubscriptionsSupportedAndCapabilityCached () {
314357 SdlMsgVersion sdlMsgVersion = new SdlMsgVersion (6 , 0 ); // This version supports capability subscriptions
315358 sdlMsgVersion .setPatchVersion (0 );
316359 ISdl internalInterface = mock (ISdl .class );
360+ doAnswer (createOnHMIStatusAnswer (HMILevel .HMI_FULL )).when (internalInterface ).addOnRPCListener (eq (FunctionID .ON_HMI_STATUS ), any (OnRPCListener .class ));
317361 when (internalInterface .getSdlMsgVersion ()).thenReturn (sdlMsgVersion );
318362 SystemCapabilityManager scm = new SystemCapabilityManager (internalInterface );
319363 scm .setCapability (SystemCapabilityType .VIDEO_STREAMING , videoStreamingCapability );
@@ -359,6 +403,7 @@ public void testAddOnSystemCapabilityListenerWithSubscriptionsSupportedAndCapabi
359403 SdlMsgVersion sdlMsgVersion = new SdlMsgVersion (6 , 0 ); // This version supports capability subscriptions
360404 sdlMsgVersion .setPatchVersion (0 );
361405 ISdl internalInterface = mock (ISdl .class );
406+ doAnswer (createOnHMIStatusAnswer (HMILevel .HMI_FULL )).when (internalInterface ).addOnRPCListener (eq (FunctionID .ON_HMI_STATUS ), any (OnRPCListener .class ));
362407 when (internalInterface .getSdlMsgVersion ()).thenReturn (sdlMsgVersion );
363408 SystemCapabilityManager scm = new SystemCapabilityManager (internalInterface );
364409 scm .setCapability (SystemCapabilityType .VIDEO_STREAMING , null );
@@ -404,6 +449,7 @@ public void testAddOnSystemCapabilityListenerWithSubscriptionsNotSupportedAndCap
404449 SdlMsgVersion sdlMsgVersion = new SdlMsgVersion (5 , 0 ); // This version doesn't support capability subscriptions
405450 sdlMsgVersion .setPatchVersion (0 );
406451 ISdl internalInterface = mock (ISdl .class );
452+ doAnswer (createOnHMIStatusAnswer (HMILevel .HMI_FULL )).when (internalInterface ).addOnRPCListener (eq (FunctionID .ON_HMI_STATUS ), any (OnRPCListener .class ));
407453 when (internalInterface .getSdlMsgVersion ()).thenReturn (sdlMsgVersion );
408454 SystemCapabilityManager scm = new SystemCapabilityManager (internalInterface );
409455 scm .setCapability (SystemCapabilityType .VIDEO_STREAMING , videoStreamingCapability );
@@ -449,6 +495,7 @@ public void testAddOnSystemCapabilityListenerWithSubscriptionsNotSupportedAndCap
449495 SdlMsgVersion sdlMsgVersion = new SdlMsgVersion (5 , 0 ); // This version doesn't support capability subscriptions
450496 sdlMsgVersion .setPatchVersion (0 );
451497 ISdl internalInterface = mock (ISdl .class );
498+ doAnswer (createOnHMIStatusAnswer (HMILevel .HMI_FULL )).when (internalInterface ).addOnRPCListener (eq (FunctionID .ON_HMI_STATUS ), any (OnRPCListener .class ));
452499 when (internalInterface .getSdlMsgVersion ()).thenReturn (sdlMsgVersion );
453500 SystemCapabilityManager scm = new SystemCapabilityManager (internalInterface );
454501 scm .setCapability (SystemCapabilityType .VIDEO_STREAMING , null );
@@ -494,6 +541,7 @@ public void testAddOnSystemCapabilityListenerThenGetCapabilityWhenSubscriptionsA
494541 SdlMsgVersion sdlMsgVersion = new SdlMsgVersion (5 , 0 ); // This version doesn't support capability subscriptions
495542 sdlMsgVersion .setPatchVersion (0 );
496543 ISdl internalInterface = mock (ISdl .class );
544+ doAnswer (createOnHMIStatusAnswer (HMILevel .HMI_FULL )).when (internalInterface ).addOnRPCListener (eq (FunctionID .ON_HMI_STATUS ), any (OnRPCListener .class ));
497545 when (internalInterface .getSdlMsgVersion ()).thenReturn (sdlMsgVersion );
498546 SystemCapabilityManager scm = new SystemCapabilityManager (internalInterface );
499547 scm .setCapability (SystemCapabilityType .VIDEO_STREAMING , videoStreamingCapability );
@@ -586,17 +634,17 @@ public void testGetAndAddListenerForDisplaysCapability() {
586634
587635
588636 // Test case 1 (capability cached, listener not null, forceUpdate true)
589- // Force updating DISPLAYS capability should call onError()
590637 internalInterface = mock (ISdl .class );
638+ doAnswer (createOnHMIStatusAnswer (HMILevel .HMI_FULL )).when (internalInterface ).addOnRPCListener (eq (FunctionID .ON_HMI_STATUS ), any (OnRPCListener .class ));
591639 scm = new SystemCapabilityManager (internalInterface );
592640 onSystemCapabilityListener = mock (OnSystemCapabilityListener .class );
593641 doAnswer (createOnSendGetSystemCapabilityAnswer (true , null )).when (internalInterface ).sendRPC (any (GetSystemCapability .class ));
594642 scm .setCapability (SystemCapabilityType .DISPLAYS , new DisplayCapabilities ());
595643 retrievedCapability = (DisplayCapabilities ) scm .getCapability (SystemCapabilityType .DISPLAYS , onSystemCapabilityListener , true );
596644 assertNotNull (retrievedCapability );
597645 verify (internalInterface , times (0 )).sendRPC (any (GetSystemCapability .class ));
598- verify (onSystemCapabilityListener , times (0 )).onCapabilityRetrieved (any (Object .class ));
599- verify (onSystemCapabilityListener , times (1 )).onError (any (String .class ));
646+ verify (onSystemCapabilityListener , times (1 )).onCapabilityRetrieved (any (Object .class ));
647+ verify (onSystemCapabilityListener , times (0 )).onError (any (String .class ));
600648
601649
602650 // Test case 2 (Add listener)
@@ -683,7 +731,6 @@ public void testOnSystemCapabilityUpdatedForDISPLAYS() {
683731 }
684732
685733 public void testOnSystemCapabilityUpdated (){
686-
687734 InternalSDLInterface iSDL = new InternalSDLInterface ();
688735 String baseName = "NavTest" , baseID = "37F98053AE" ;
689736 AppServiceCapability capability1 = AppServiceFactory .createAppServiceCapability (AppServiceType .NAVIGATION , baseName , null , true , null );
@@ -948,13 +995,21 @@ public boolean removeOnRPCListener(FunctionID messageId, OnRPCListener listener)
948995 public Object getCapability (SystemCapabilityType systemCapabilityType ){return null ;}
949996
950997 @ Override
951- public void getCapability (SystemCapabilityType systemCapabilityType , OnSystemCapabilityListener scListener ) { }
998+ public void getCapability (SystemCapabilityType systemCapabilityType , OnSystemCapabilityListener scListener ) {
999+ }
9521000
9531001 @ Override
954- public RegisterAppInterfaceResponse getRegisterAppInterfaceResponse (){return null ;}
1002+ public RegisterAppInterfaceResponse getRegisterAppInterfaceResponse () {
1003+ return null ;
1004+ }
1005+
1006+ @ Override
1007+ public Object getCapability (SystemCapabilityType systemCapabilityType , OnSystemCapabilityListener scListener , boolean forceUpdate ) {
1008+ return null ;
1009+ }
9551010
9561011 @ Override
957- public SdlMsgVersion getSdlMsgVersion (){
1012+ public SdlMsgVersion getSdlMsgVersion () {
9581013 return null ;
9591014 }
9601015
@@ -1001,6 +1056,4 @@ public void startAudioService(boolean encrypted){}
10011056 @ Override
10021057 public void startRPCEncryption () {}
10031058 }
1004-
1005-
10061059}
0 commit comments