Commit 9ecbcd72 authored by Kyle Milka's avatar Kyle Milka Committed by Commit Bot

[SharingHub] Add tests for ShareSheetPropertyModelBuilder

Add some basic tests for the ShareSheetPropertyModelBuilder.

Bug: 1009124
Change-Id: Id9951814533bd9c3da3e63e1fb1a39e802e424fc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2019333
Commit-Queue: Kyle Milka <kmilka@chromium.org>
Reviewed-by: default avatarKristi Park <kristipark@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#737087}
parent d49b9516
......@@ -433,6 +433,7 @@ chrome_test_java_sources = [
"javatests/src/org/chromium/chrome/browser/share/ShareDelegateImplIntegrationTest.java",
"javatests/src/org/chromium/chrome/browser/share/ShareDelegateImplTest.java",
"javatests/src/org/chromium/chrome/browser/share/ShareSheetCoordinatorTest.java",
"javatests/src/org/chromium/chrome/browser/share/ShareSheetPropertyModelBuilderTest.java",
"javatests/src/org/chromium/chrome/browser/share/ShareUrlTest.java",
"javatests/src/org/chromium/chrome/browser/signin/AccountPickerDialogFragmentTest.java",
"javatests/src/org/chromium/chrome/browser/signin/DummyAccountPickerTargetFragment.java",
......
......@@ -11,6 +11,7 @@ import android.text.TextUtils;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.Callback;
import org.chromium.base.ContextUtils;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.browser.ActivityTabProvider;
......@@ -257,8 +258,10 @@ public class ShareDelegateImpl implements ShareDelegate {
if (params.shareDirectly()) {
ShareHelper.shareDirectly(params);
} else if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB)) {
ShareSheetCoordinator coordinator = new ShareSheetCoordinator(controller,
tabProvider, tabCreator, new ShareSheetPropertyModelBuilder(controller));
ShareSheetCoordinator coordinator =
new ShareSheetCoordinator(controller, tabProvider, tabCreator,
new ShareSheetPropertyModelBuilder(controller,
ContextUtils.getApplicationContext().getPackageManager()));
// TODO(crbug/1009124): open custom share sheet.
coordinator.showShareSheet(params);
} else {
......
......@@ -28,17 +28,19 @@ import java.util.List;
*/
class ShareSheetPropertyModelBuilder {
private final BottomSheetController mBottomSheetController;
private final PackageManager mPackageManager;
ShareSheetPropertyModelBuilder(BottomSheetController bottomSheetController) {
ShareSheetPropertyModelBuilder(
BottomSheetController bottomSheetController, PackageManager packageManager) {
mBottomSheetController = bottomSheetController;
mPackageManager = packageManager;
}
protected ArrayList<PropertyModel> selectThirdPartyApps(
Activity activity, ShareSheetBottomSheetContent bottomSheet, ShareParams params) {
Intent intent = ShareHelper.getShareLinkAppCompatibilityIntent();
final ShareHelper.TargetChosenCallback callback = params.getCallback();
PackageManager manager = activity.getPackageManager();
List<ResolveInfo> resolveInfoList = manager.queryIntentActivities(intent, 0);
List<ResolveInfo> resolveInfoList = mPackageManager.queryIntentActivities(intent, 0);
List<ResolveInfo> thirdPartyActivities = new ArrayList<>();
for (ResolveInfo res : resolveInfoList) {
if (!res.activityInfo.packageName.equals(activity.getPackageName())) {
......@@ -50,8 +52,8 @@ class ShareSheetPropertyModelBuilder {
for (int i = 0; i < 7 && i < thirdPartyActivities.size(); ++i) {
ResolveInfo info = thirdPartyActivities.get(i);
PropertyModel propertyModel =
createPropertyModel(ShareHelper.loadIconForResolveInfo(info, manager),
(String) info.loadLabel(manager), (shareParams) -> {
createPropertyModel(ShareHelper.loadIconForResolveInfo(info, mPackageManager),
(String) info.loadLabel(mPackageManager), (shareParams) -> {
ActivityInfo ai = info.activityInfo;
ComponentName component =
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.share;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.when;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.support.test.filters.MediumTest;
import android.support.test.rule.ActivityTestRule;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.test.util.DummyUiActivity;
import java.util.ArrayList;
import java.util.Arrays;
/** Tests {@link ShareSheetPropertyModelBuilder}. */
@RunWith(ChromeJUnit4ClassRunner.class)
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
public final class ShareSheetPropertyModelBuilderTest {
@Rule
public ActivityTestRule<DummyUiActivity> mActivityTestRule =
new ActivityTestRule<>(DummyUiActivity.class);
@Mock
private PackageManager mPackageManager;
@Mock
private ShareParams mParams;
@Mock
private ResolveInfo mResolveInfo1;
@Mock
private ResolveInfo mResolveInfo2;
@Mock
private ResolveInfo mResolveInfo3;
private ArrayList<ResolveInfo> mResolveInfoList;
private Activity mActivity;
@Before
public void setUp() throws PackageManager.NameNotFoundException {
MockitoAnnotations.initMocks(this);
mActivity = mActivityTestRule.getActivity();
mResolveInfo1.activityInfo =
mActivity.getPackageManager().getActivityInfo(mActivity.getComponentName(), 0);
mResolveInfo1.activityInfo.packageName = "testPackage1";
when(mResolveInfo1.loadLabel(any())).thenReturn("testModel1");
when(mResolveInfo1.loadIcon(any())).thenReturn(null);
mResolveInfo1.icon = 0;
mResolveInfo2.activityInfo =
mActivity.getPackageManager().getActivityInfo(mActivity.getComponentName(), 0);
mResolveInfo2.activityInfo.packageName = "testPackage1";
when(mResolveInfo2.loadLabel(any())).thenReturn("testModel2");
when(mResolveInfo2.loadIcon(any())).thenReturn(null);
mResolveInfo2.icon = 0;
// Should be filtered out as it comes from the same package as the test.
mResolveInfo3.activityInfo =
mActivity.getPackageManager().getActivityInfo(mActivity.getComponentName(), 0);
mResolveInfo3.activityInfo.packageName = mActivity.getPackageName();
when(mResolveInfo3.loadLabel(any())).thenReturn("testModel3");
when(mResolveInfo3.loadIcon(any())).thenReturn(null);
mResolveInfo3.icon = 0;
mResolveInfoList =
new ArrayList<>(Arrays.asList(mResolveInfo1, mResolveInfo2, mResolveInfo3));
when(mPackageManager.queryIntentActivities(any(), anyInt())).thenReturn(mResolveInfoList);
when(mPackageManager.getResourcesForApplication(anyString()))
.thenReturn(mActivity.getResources());
}
@Test
@MediumTest
public void testSelectThirdPartyApps() {
ShareSheetPropertyModelBuilder builder =
new ShareSheetPropertyModelBuilder(null, mPackageManager);
ArrayList<PropertyModel> propertyModels =
builder.selectThirdPartyApps(mActivity, null, mParams);
Assert.assertEquals("Incorrect number of property models.", 2, propertyModels.size());
Assert.assertEquals("First property model isn't testModel1", "testModel1",
propertyModels.get(0).get(ShareSheetItemViewProperties.LABEL));
Assert.assertEquals("Second property model isn't testModel2", "testModel2",
propertyModels.get(1).get(ShareSheetItemViewProperties.LABEL));
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment