|
11 | 11 | import static org.junit.Assert.assertNull;
|
12 | 12 | import static org.junit.Assert.assertTrue;
|
13 | 13 | import static org.mockito.Mockito.anyBoolean;
|
| 14 | +import static org.mockito.Mockito.anyString; |
| 15 | +import static org.mockito.Mockito.doReturn; |
| 16 | +import static org.mockito.Mockito.doThrow; |
| 17 | +import static org.mockito.Mockito.eq; |
14 | 18 | import static org.mockito.Mockito.mock;
|
15 | 19 | import static org.mockito.Mockito.never;
|
16 | 20 | import static org.mockito.Mockito.spy;
|
|
20 | 24 |
|
21 | 25 | import android.app.Activity;
|
22 | 26 | import android.content.ClipData;
|
| 27 | +import android.content.ClipDescription; |
23 | 28 | import android.content.ClipboardManager;
|
24 | 29 | import android.content.ContentResolver;
|
25 | 30 | import android.content.Context;
|
| 31 | +import android.content.res.AssetFileDescriptor; |
26 | 32 | import android.net.Uri;
|
27 | 33 | import android.os.Build;
|
28 | 34 | import android.view.View;
|
@@ -84,18 +90,39 @@ public void platformPlugin_getClipboardData() throws IOException {
|
84 | 90 | PlatformChannel fakePlatformChannel = mock(PlatformChannel.class);
|
85 | 91 | PlatformPlugin platformPlugin = new PlatformPlugin(fakeActivity, fakePlatformChannel);
|
86 | 92 |
|
| 93 | + // Successfully get the contents of the primary clip when they contain text. |
87 | 94 | ClipboardContentFormat clipboardFormat = ClipboardContentFormat.PLAIN_TEXT;
|
88 | 95 | assertNull(platformPlugin.mPlatformMessageHandler.getClipboardData(clipboardFormat));
|
89 | 96 | ClipData clip = ClipData.newPlainText("label", "Text");
|
90 | 97 | clipboardManager.setPrimaryClip(clip);
|
91 | 98 | assertNotNull(platformPlugin.mPlatformMessageHandler.getClipboardData(clipboardFormat));
|
92 | 99 |
|
93 |
| - ContentResolver contentResolver = ctx.getContentResolver(); |
| 100 | + // Return null when the primary clip contains non-text media. |
| 101 | + ContentResolver contentResolver = spy(ctx.getContentResolver()); |
94 | 102 | when(fakeActivity.getContentResolver()).thenReturn(contentResolver);
|
95 | 103 | Uri uri = Uri.parse("content://media/external_primary/images/media/");
|
96 | 104 | clip = ClipData.newUri(contentResolver, "URI", uri);
|
97 | 105 | clipboardManager.setPrimaryClip(clip);
|
98 | 106 | assertNull(platformPlugin.mPlatformMessageHandler.getClipboardData(clipboardFormat));
|
| 107 | + |
| 108 | + // Still return text when the AssetFileDescriptor throws an IOException. |
| 109 | + when(fakeActivity.getContentResolver()).thenReturn(contentResolver); |
| 110 | + ClipDescription clipDescription = |
| 111 | + new ClipDescription( |
| 112 | + "label", |
| 113 | + new String[] { |
| 114 | + ClipDescription.MIMETYPE_TEXT_PLAIN, ClipDescription.MIMETYPE_TEXT_URILIST |
| 115 | + }); |
| 116 | + ClipData.Item clipDataItem = new ClipData.Item("Text", null, uri); |
| 117 | + ClipData clipData = new ClipData(clipDescription, clipDataItem); |
| 118 | + clipboardManager.setPrimaryClip(clipData); |
| 119 | + AssetFileDescriptor fakeAssetFileDescriptor = mock(AssetFileDescriptor.class); |
| 120 | + doReturn(fakeAssetFileDescriptor) |
| 121 | + .when(contentResolver) |
| 122 | + .openTypedAssetFileDescriptor(eq(uri), anyString(), eq(null)); |
| 123 | + doThrow(new IOException()).when(fakeAssetFileDescriptor).close(); |
| 124 | + assertNotNull(platformPlugin.mPlatformMessageHandler.getClipboardData(clipboardFormat)); |
| 125 | + verify(fakeAssetFileDescriptor).close(); |
99 | 126 | }
|
100 | 127 |
|
101 | 128 | @SuppressWarnings("deprecation")
|
|
0 commit comments