1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.systemui.clipboardoverlay 17 18 import android.content.ClipData 19 import android.content.ClipDescription 20 import android.content.ContentResolver 21 import android.content.Context 22 import android.graphics.Bitmap 23 import android.net.Uri 24 import android.os.PersistableBundle 25 import androidx.test.ext.junit.runners.AndroidJUnit4 26 import androidx.test.filters.SmallTest 27 import com.android.systemui.SysuiTestCase 28 import com.android.systemui.util.mockito.whenever 29 import java.io.IOException 30 import org.junit.Assert.assertEquals 31 import org.junit.Assert.assertFalse 32 import org.junit.Assert.assertNull 33 import org.junit.Assert.assertTrue 34 import org.junit.Before 35 import org.junit.Test 36 import org.junit.runner.RunWith 37 import org.mockito.ArgumentMatchers.any 38 import org.mockito.Mock 39 import org.mockito.MockitoAnnotations 40 41 @SmallTest 42 @RunWith(AndroidJUnit4::class) 43 class ClipboardModelTest : SysuiTestCase() { 44 @Mock private lateinit var mClipboardUtils: ClipboardOverlayUtils 45 @Mock private lateinit var mMockContext: Context 46 @Mock private lateinit var mMockContentResolver: ContentResolver 47 private lateinit var mSampleClipData: ClipData 48 49 @Before setupnull50 fun setup() { 51 MockitoAnnotations.initMocks(this) 52 mSampleClipData = ClipData("Test", arrayOf("text/plain"), ClipData.Item("Test Item")) 53 } 54 55 @Test test_textClipDatanull56 fun test_textClipData() { 57 val source = "test source" 58 val model = ClipboardModel.fromClipData(mContext, mClipboardUtils, mSampleClipData, source) 59 assertEquals(mSampleClipData, model.clipData) 60 assertEquals(source, model.source) 61 assertEquals(ClipboardModel.Type.TEXT, model.type) 62 assertEquals(mSampleClipData.getItemAt(0).text, model.text) 63 assertEquals(mSampleClipData.getItemAt(0).textLinks, model.textLinks) 64 assertEquals(mSampleClipData.getItemAt(0).uri, model.uri) 65 assertFalse(model.isSensitive) 66 assertFalse(model.isRemote) 67 assertNull(model.loadThumbnail(mContext)) 68 } 69 70 @Test test_sensitiveExtranull71 fun test_sensitiveExtra() { 72 val description = mSampleClipData.description 73 val b = PersistableBundle() 74 b.putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true) 75 description.extras = b 76 val data = ClipData(description, mSampleClipData.getItemAt(0)) 77 val (_, _, _, _, _, _, sensitive) = 78 ClipboardModel.fromClipData(mContext, mClipboardUtils, data, "") 79 assertTrue(sensitive) 80 } 81 82 @Test test_remoteExtranull83 fun test_remoteExtra() { 84 whenever(mClipboardUtils.isRemoteCopy(any(), any(), any())).thenReturn(true) 85 val model = ClipboardModel.fromClipData(mContext, mClipboardUtils, mSampleClipData, "") 86 assertTrue(model.isRemote) 87 } 88 89 @Test 90 @Throws(IOException::class) test_imageClipDatanull91 fun test_imageClipData() { 92 val testBitmap = Bitmap.createBitmap(50, 50, Bitmap.Config.ARGB_8888) 93 whenever(mMockContext.contentResolver).thenReturn(mMockContentResolver) 94 whenever(mMockContext.resources).thenReturn(mContext.resources) 95 whenever(mMockContentResolver.loadThumbnail(any(), any(), any())).thenReturn(testBitmap) 96 whenever(mMockContentResolver.getType(any())).thenReturn("image") 97 val imageClipData = 98 ClipData("Test", arrayOf("text/plain"), ClipData.Item(Uri.parse("test"))) 99 val model = ClipboardModel.fromClipData(mMockContext, mClipboardUtils, imageClipData, "") 100 assertEquals(ClipboardModel.Type.IMAGE, model.type) 101 assertEquals(testBitmap, model.loadThumbnail(mMockContext)) 102 } 103 104 @Test 105 @Throws(IOException::class) test_imageClipData_loadFailurenull106 fun test_imageClipData_loadFailure() { 107 whenever(mMockContext.contentResolver).thenReturn(mMockContentResolver) 108 whenever(mMockContext.resources).thenReturn(mContext.resources) 109 whenever(mMockContentResolver.loadThumbnail(any(), any(), any())).thenThrow(IOException()) 110 whenever(mMockContentResolver.getType(any())).thenReturn("image") 111 val imageClipData = 112 ClipData("Test", arrayOf("text/plain"), ClipData.Item(Uri.parse("test"))) 113 val model = ClipboardModel.fromClipData(mMockContext, mClipboardUtils, imageClipData, "") 114 assertEquals(ClipboardModel.Type.IMAGE, model.type) 115 assertNull(model.loadThumbnail(mMockContext)) 116 } 117 } 118