Mam aplikację, która uruchamia określone działanie, jeśli używany jest określony adres URL ze schematem niestandardowym. Na przykład, jeśli "myscheme: //www.myapp.com/mypath" jest używane w widoku internetowym, moja aplikacja jest uruchamiana. Aby to zrobić, należy skonfigurować filtry woli w manifeście jako tak:Puszka (powinna) być używana do testowania filtra Intent
<intent-filter>
<action android:name="android.intent.action.View" />
<data android:scheme="myscheme" android:host="www.myapp.com" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
Chciałbym sprawdzić, czy to działa i kontynuuje pracę przez pisanie testów jednostkowych.
@Test
public void testIntentHandling()
{
Activity launcherActivity = new Activity();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("myscheme://www.myapp.com/mypath"));
launcherActivity.startActivity(intent);
ShadowActivity shadowActivity = Robolectric.shadowOf(launcherActivity);
Intent startedIntent = shadowActivity.getNextStartedActivity();
ShadowIntent shadowIntent = Robolectric.shadowOf(startedIntent);
assertNotNull(shadowIntent);
System.out.println(shadowIntent.getAction());
System.out.println(shadowIntent.getData().toString());
System.out.println(shadowIntent.getComponent().toShortString());
assertEquals("com.mycompany", shadowIntent.getComponent().getPackageName());
}
To jednak nie działa. Otrzymuję "shadowIntent.getComponent()" zwraca null, kiedy powinien zwrócić komponent, który określa moją aplikację i działanie. Ponieważ większość tej pracy jest wykonywana przez system Android, a nie przez moją aplikację, można założyć, że Robolectric nie naśladuje tego, a więc nie można go wykorzystać do przetestowania tej funkcji? Czy mam rację, zakładając, że mogę/powinienem wystawić test jednostkowy na pogodę, że mój manifest jest poprawnie skonfigurowany?
Dzięki.