Commit f8f468f8 authored by Kyle Milka's avatar Kyle Milka Committed by Commit Bot

[SharingHub] Add tests for ShareSheetCoordinator

Add a test file for the ShareSheetCoordinator with a few basic tests.

Bug: 1009124
Change-Id: I65494bdefade392d46d645d41ee3bd1555b99b34
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1993758
Commit-Queue: Kyle Milka <kmilka@chromium.org>
Reviewed-by: default avatarJeffrey Cohen <jeffreycohen@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#734972}
parent 2d2de836
...@@ -432,6 +432,7 @@ chrome_test_java_sources = [ ...@@ -432,6 +432,7 @@ chrome_test_java_sources = [
"javatests/src/org/chromium/chrome/browser/share/LensUtilsTest.java", "javatests/src/org/chromium/chrome/browser/share/LensUtilsTest.java",
"javatests/src/org/chromium/chrome/browser/share/ShareDelegateImplIntegrationTest.java", "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/ShareDelegateImplTest.java",
"javatests/src/org/chromium/chrome/browser/share/ShareSheetCoordinatorTest.java",
"javatests/src/org/chromium/chrome/browser/share/ShareUrlTest.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/AccountPickerDialogFragmentTest.java",
"javatests/src/org/chromium/chrome/browser/signin/DummyAccountPickerTargetFragment.java", "javatests/src/org/chromium/chrome/browser/signin/DummyAccountPickerTargetFragment.java",
......
...@@ -257,8 +257,8 @@ public class ShareDelegateImpl implements ShareDelegate { ...@@ -257,8 +257,8 @@ public class ShareDelegateImpl implements ShareDelegate {
if (params.shareDirectly()) { if (params.shareDirectly()) {
ShareHelper.shareDirectly(params); ShareHelper.shareDirectly(params);
} else if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB)) { } else if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB)) {
ShareSheetCoordinator coordinator = ShareSheetCoordinator coordinator = new ShareSheetCoordinator(controller,
new ShareSheetCoordinator(controller, tabProvider, tabCreator); tabProvider, tabCreator, new ShareSheetPropertyModelBuilder(controller));
// TODO(crbug/1009124): open custom share sheet. // TODO(crbug/1009124): open custom share sheet.
coordinator.showShareSheet(params); coordinator.showShareSheet(params);
} else { } else {
......
...@@ -10,6 +10,8 @@ import android.content.ClipboardManager; ...@@ -10,6 +10,8 @@ import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.support.v7.content.res.AppCompatResources; import android.support.v7.content.res.AppCompatResources;
import androidx.annotation.VisibleForTesting;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeFeatureList;
...@@ -43,11 +45,11 @@ public class ShareSheetCoordinator { ...@@ -43,11 +45,11 @@ public class ShareSheetCoordinator {
* @param tabCreator The TabCreator for the current selected {@link TabModel}. * @param tabCreator The TabCreator for the current selected {@link TabModel}.
*/ */
public ShareSheetCoordinator(BottomSheetController controller, ActivityTabProvider provider, public ShareSheetCoordinator(BottomSheetController controller, ActivityTabProvider provider,
TabCreatorManager.TabCreator tabCreator) { TabCreatorManager.TabCreator tabCreator, ShareSheetPropertyModelBuilder modelBuilder) {
mBottomSheetController = controller; mBottomSheetController = controller;
mActivityTabProvider = provider; mActivityTabProvider = provider;
mTabCreator = tabCreator; mTabCreator = tabCreator;
mPropertyModelBuilder = new ShareSheetPropertyModelBuilder(mBottomSheetController); mPropertyModelBuilder = modelBuilder;
} }
protected void showShareSheet(ShareParams params) { protected void showShareSheet(ShareParams params) {
...@@ -67,7 +69,8 @@ public class ShareSheetCoordinator { ...@@ -67,7 +69,8 @@ public class ShareSheetCoordinator {
mBottomSheetController.requestShowContent(bottomSheet, true); mBottomSheetController.requestShowContent(bottomSheet, true);
} }
private ArrayList<PropertyModel> createTopRowPropertyModels( @VisibleForTesting
ArrayList<PropertyModel> createTopRowPropertyModels(
ShareSheetBottomSheetContent bottomSheet, Activity activity) { ShareSheetBottomSheetContent bottomSheet, Activity activity) {
ArrayList<PropertyModel> models = new ArrayList<>(); ArrayList<PropertyModel> models = new ArrayList<>();
// QR Codes // QR Codes
...@@ -141,7 +144,8 @@ public class ShareSheetCoordinator { ...@@ -141,7 +144,8 @@ public class ShareSheetCoordinator {
return models; return models;
} }
private ArrayList<PropertyModel> createBottomRowPropertyModels( @VisibleForTesting
ArrayList<PropertyModel> createBottomRowPropertyModels(
ShareSheetBottomSheetContent bottomSheet, Activity activity, ShareParams params) { ShareSheetBottomSheetContent bottomSheet, Activity activity, ShareParams params) {
ArrayList<PropertyModel> models = ArrayList<PropertyModel> models =
mPropertyModelBuilder.selectThirdPartyApps(activity, bottomSheet, params); mPropertyModelBuilder.selectThirdPartyApps(activity, bottomSheet, params);
......
// 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 android.app.Activity;
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.rules.TestRule;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.browser.Features;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.test.util.DummyUiActivity;
import java.util.ArrayList;
import java.util.Arrays;
/** Tests {@link ShareSheetCoordinator}. */
@RunWith(ChromeJUnit4ClassRunner.class)
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
public final class ShareSheetCoordinatorTest {
@Rule
public ActivityTestRule<DummyUiActivity> mActivityTestRule =
new ActivityTestRule<>(DummyUiActivity.class);
@Rule
public TestRule mFeatureProcessor = new Features.JUnitProcessor();
@Mock
private ShareSheetPropertyModelBuilder mPropertyModelBuilder;
private ArrayList<PropertyModel> mThirdPartyPropertyModels;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
PropertyModel testModel1 = new PropertyModel.Builder(ShareSheetItemViewProperties.ALL_KEYS)
.with(ShareSheetItemViewProperties.ICON, null)
.with(ShareSheetItemViewProperties.LABEL, "testModel1")
.with(ShareSheetItemViewProperties.CLICK_LISTENER, null)
.build();
PropertyModel testModel2 = new PropertyModel.Builder(ShareSheetItemViewProperties.ALL_KEYS)
.with(ShareSheetItemViewProperties.ICON, null)
.with(ShareSheetItemViewProperties.LABEL, "testModel2")
.with(ShareSheetItemViewProperties.CLICK_LISTENER, null)
.build();
mThirdPartyPropertyModels =
new ArrayList<PropertyModel>(Arrays.asList(testModel1, testModel2));
Mockito.when(mPropertyModelBuilder.selectThirdPartyApps(any(), any(), any()))
.thenReturn(mThirdPartyPropertyModels);
Mockito.when(mPropertyModelBuilder.createPropertyModel(any(), any(), any()))
.thenCallRealMethod();
}
@Test
@MediumTest
@Features.DisableFeatures({ChromeFeatureList.CHROME_SHARE_SCREENSHOT})
public void testCreateTopRowPropertyModelsScreenshotsDisabled() {
ShareSheetCoordinator coordinator =
new ShareSheetCoordinator(null, null, null, mPropertyModelBuilder);
Activity activity = mActivityTestRule.getActivity();
ShareSheetBottomSheetContent bottomSheet = new ShareSheetBottomSheetContent(activity);
ArrayList<PropertyModel> propertyModels =
coordinator.createTopRowPropertyModels(bottomSheet, activity);
Assert.assertEquals("Incorrect number of property models.", 3, propertyModels.size());
Assert.assertEquals("First property model isn't QR Code.",
activity.getResources().getString(R.string.qr_code_share_icon_label),
propertyModels.get(0).get(ShareSheetItemViewProperties.LABEL));
Assert.assertEquals("Second property model isn't SendTabToSelf.",
activity.getResources().getString(R.string.send_tab_to_self_share_activity_title),
propertyModels.get(1).get(ShareSheetItemViewProperties.LABEL));
Assert.assertEquals("Third property model isn't Copy URL.",
activity.getResources().getString(R.string.sharing_copy_url),
propertyModels.get(2).get(ShareSheetItemViewProperties.LABEL));
}
@Test
@MediumTest
@Features.EnableFeatures({ChromeFeatureList.CHROME_SHARE_SCREENSHOT})
public void testCreateTopRowPropertyModelsScreenshotsEnabled() {
ShareSheetCoordinator coordinator =
new ShareSheetCoordinator(null, null, null, mPropertyModelBuilder);
Activity activity = mActivityTestRule.getActivity();
ShareSheetBottomSheetContent bottomSheet = new ShareSheetBottomSheetContent(activity);
ArrayList<PropertyModel> propertyModels =
coordinator.createTopRowPropertyModels(bottomSheet, activity);
Assert.assertEquals("Incorrect number of property models.", 4, propertyModels.size());
Assert.assertEquals("First property model isn't QR Code.",
activity.getResources().getString(R.string.qr_code_share_icon_label),
propertyModels.get(0).get(ShareSheetItemViewProperties.LABEL));
Assert.assertEquals("Second property model isn't SendTabToSelf.",
activity.getResources().getString(R.string.send_tab_to_self_share_activity_title),
propertyModels.get(1).get(ShareSheetItemViewProperties.LABEL));
Assert.assertEquals("Third property model isn't Copy URL.",
activity.getResources().getString(R.string.sharing_copy_url),
propertyModels.get(2).get(ShareSheetItemViewProperties.LABEL));
Assert.assertEquals("Fourth property model isn't Screenshotz.",
activity.getResources().getString(R.string.sharing_screenshot),
propertyModels.get(3).get(ShareSheetItemViewProperties.LABEL));
}
@Test
@MediumTest
public void testCreateBottomRowPropertyModels() {
ShareSheetCoordinator coordinator =
new ShareSheetCoordinator(null, null, null, mPropertyModelBuilder);
Activity activity = mActivityTestRule.getActivity();
ShareSheetBottomSheetContent bottomSheet = new ShareSheetBottomSheetContent(activity);
ArrayList<PropertyModel> propertyModels = coordinator.createBottomRowPropertyModels(
bottomSheet, activity, /*shareParams=*/null);
Assert.assertEquals("Incorrect number of property models.", 3, 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));
Assert.assertEquals("Third property model isn't More.",
activity.getResources().getString(R.string.sharing_more_icon_label),
propertyModels.get(2).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