Как заглушить Intent.createChooser Intent с помощью эспрессо - PullRequest
0 голосов
/ 11 марта 2020

Проблема

У меня есть изображение внутри моего приложения, и я делюсь им с любым другим приложением, которое может обрабатывать обмен изображениями, и функция работает perectlty.

Я пишу тестовый интерфейс Espresso, чтобы перехватить намерение и убедиться, что он имеет правильное действие и дополнительные функции, но не может заставить его работать.

Код

Вот код при создании намерения:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType(MediaType.PNG.toString());
startActivity(Intent.createChooser(intent, "send");

, и вот моя попытка сопоставить намерение в моем тесте, но не удается найти совпадение:

Intents.init();
launchActivity(MyFragment.newIntent(getTargetContext());

Matcher<Intent> expectedIntent = allOf(
    hasAction(Intent.ACTION_CHOOSER),
    hasExtra(
        Intent.ACTION_SEND,
        hasExtra(Intent.EXTRA_STREAM, EXPECTED_SHARE_URI) // Expected URI has been copied from the extras 'uriString' value when debugging
    )
);
intending(expectedIntent).respondWith(new Instrumentation.ActivityResult(0, null));
MyScreen.clickShareButton(); // performs click on the share button
intended(expectedIntent);
Intents.release();

Ошибка

IntentMatcher: (has action: is "android.intent.action.CHOOSER" and has extras: has bundle with: key: is "android.intent.extra.STREAM" value: is "[my uri appears here]")

Дополнительная информация

При отладке созданное намерение приводит к намерению с действием "android .intent.action.CHOOSER "и имеет дополнительный тип Intent с действием" android .intent.action.SEND "и типом" image / png ", а в свою очередь имеет дополнительный HierarchicalUri с uriString .

Резюме

Кто-нибудь знает, что я делаю неправильно? Я не могу найти способ собрать все это вместе и создать подходящее средство для этого намерения. Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 11 марта 2020

Если в этой строке вы получаете сообщение об ошибке intended(expectedIntent) из-за несоответствия цели, возможно, это из-за того, что Intent.createChooser поместит ваше намерение в качестве дополнительных данных с помощью ключа Intent.EXTRA_INTENT. В вашем случае вам понадобится только дополнительное совпадение намерений для выбора:

Matcher<Intent> intent = allOf(
    hasAction(Intent.ACTION_SEND),
    hasExtra(Intent.EXTRA_STREAM, EXPECTED_SHARE_URI)
);

Matcher<Intent> expectedIntent = allOf(
    hasAction(Intent.ACTION_CHOOSER),
    // Intent.createChooser put your intent with the key EXTRA_INTENT
    hasExtra(Intent.EXTRA_INTENT, intent)
);

intending(anyIntent()).respondWith(new Instrumentation.ActivityResult(0, null));

MyScreen.clickShareButton();

intended(expectedIntent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...