Commit e7d4445a authored by Lijin Shen's avatar Lijin Shen Committed by Chromium LUCI CQ

[Messages] Add unit tests for message mediator

Mock deps to see if dispatcher can suspend and resume correctly.

Bug: 1155359
Change-Id: Ib0705da0d15795da0a36b5b2b778808d3feacec7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2573503Reviewed-by: default avatarPavel Yatsuk <pavely@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Commit-Queue: Lijin Shen <lazzzis@google.com>
Cr-Commit-Position: refs/heads/master@{#835003}
parent f4e4ffea
...@@ -885,6 +885,8 @@ junit_binary("chrome_junit_tests") { ...@@ -885,6 +885,8 @@ junit_binary("chrome_junit_tests") {
"//components/feed/core/proto:proto_java", "//components/feed/core/proto:proto_java",
"//components/feed/core/proto:proto_java_v2", "//components/feed/core/proto:proto_java_v2",
"//components/infobars/android:java", "//components/infobars/android:java",
"//components/messages/android:java",
"//components/messages/android:manager_java",
"//components/minidump_uploader:minidump_uploader_java", "//components/minidump_uploader:minidump_uploader_java",
"//components/module_installer/android:module_installer_java", "//components/module_installer/android:module_installer_java",
"//components/offline_items_collection/core:core_java", "//components/offline_items_collection/core:core_java",
......
...@@ -55,6 +55,7 @@ include_rules = [ ...@@ -55,6 +55,7 @@ include_rules = [
"+components/infobars/android", "+components/infobars/android",
"+components/invalidation", "+components/invalidation",
"+components/javascript_dialogs/android", "+components/javascript_dialogs/android",
"+components/messages/android",
"+components/media_router/browser/android", "+components/media_router/browser/android",
"+components/page_info/android/java", "+components/page_info/android/java",
"+components/permissions/android/nfc", "+components/permissions/android/nfc",
......
...@@ -121,6 +121,7 @@ chrome_junit_test_java_sources = [ ...@@ -121,6 +121,7 @@ chrome_junit_test_java_sources = [
"junit/src/org/chromium/chrome/browser/media/ui/MediaNotificationTestTabHolder.java", "junit/src/org/chromium/chrome/browser/media/ui/MediaNotificationTestTabHolder.java",
"junit/src/org/chromium/chrome/browser/media/ui/MediaNotificationThrottlerTest.java", "junit/src/org/chromium/chrome/browser/media/ui/MediaNotificationThrottlerTest.java",
"junit/src/org/chromium/chrome/browser/media/ui/MediaNotificationTitleUpdatedTest.java", "junit/src/org/chromium/chrome/browser/media/ui/MediaNotificationTitleUpdatedTest.java",
"junit/src/org/chromium/chrome/browser/messages/ChromeMessageQueueMediatorTest.java",
"junit/src/org/chromium/chrome/browser/metrics/VariationsSessionTest.java", "junit/src/org/chromium/chrome/browser/metrics/VariationsSessionTest.java",
"junit/src/org/chromium/chrome/browser/native_page/NativePageFactoryTest.java", "junit/src/org/chromium/chrome/browser/native_page/NativePageFactoryTest.java",
"junit/src/org/chromium/chrome/browser/net/nqe/NetworkQualityProviderTest.java", "junit/src/org/chromium/chrome/browser/net/nqe/NetworkQualityProviderTest.java",
......
// 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.messages;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import org.chromium.base.supplier.ObservableSupplierImpl;
import org.chromium.base.supplier.OneshotSupplierImpl;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.browser.fullscreen.BrowserControlsManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager;
import org.chromium.chrome.browser.layouts.LayoutStateProvider;
import org.chromium.chrome.browser.layouts.LayoutStateProvider.LayoutStateObserver;
import org.chromium.chrome.browser.layouts.LayoutType;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.chrome.browser.tabmodel.TabModelFilterProvider;
import org.chromium.chrome.browser.tabmodel.TabModelObserver;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.components.messages.ManagedMessageDispatcher;
/**
* Unit tests for {@link ChromeMessageQueueMediator}.
*/
@RunWith(BaseRobolectricTestRunner.class)
@Config(manifest = Config.NONE)
public class ChromeMessageQueueMediatorTest {
private static final int EXPECTED_TOKEN = 42;
@Mock
private BrowserControlsManager mBrowserControlsManager;
@Mock
private MessageContainerCoordinator mMessageContainerCoordinator;
@Mock
private FullscreenManager mFullscreenManager;
@Mock
private LayoutStateProvider mLayoutStateProvider;
@Mock
private TabModelSelector mTabModelSelector;
@Mock
private ManagedMessageDispatcher mMessageDispatcher;
@Mock
private TabModelFilterProvider mTabModelFilterProvider;
private ChromeMessageQueueMediator mMediator;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(mTabModelSelector.getTabModelFilterProvider()).thenReturn(mTabModelFilterProvider);
doNothing().when(mTabModelFilterProvider).addTabModelFilterObserver(any());
when(mMessageDispatcher.suspend()).thenReturn(EXPECTED_TOKEN);
}
private void initMediator() {
OneshotSupplierImpl<LayoutStateProvider> layoutStateProviderOneShotSupplier =
new OneshotSupplierImpl<>();
ObservableSupplierImpl<TabModelSelector> tabModelSelectorSupplier =
new ObservableSupplierImpl<>();
mMediator = new ChromeMessageQueueMediator(mBrowserControlsManager,
mMessageContainerCoordinator, mFullscreenManager,
layoutStateProviderOneShotSupplier, tabModelSelectorSupplier, mMessageDispatcher);
layoutStateProviderOneShotSupplier.set(mLayoutStateProvider);
tabModelSelectorSupplier.set(mTabModelSelector);
}
/**
* Test the queue can be suspended and resumed correctly when toggling full screen mode.
*/
@Test
public void testFullScreenModeChange() {
final ArgumentCaptor<FullscreenManager.Observer> observer =
ArgumentCaptor.forClass(FullscreenManager.Observer.class);
doNothing().when(mFullscreenManager).addObserver(observer.capture());
initMediator();
observer.getValue().onEnterFullscreen(null, null);
observer.getValue().onExitFullscreen(null);
verify(mMessageDispatcher).resume(EXPECTED_TOKEN);
}
/**
* Test the queue can be suspended and resumed correctly when toggling layout state change.
*/
@Test
public void testLayoutStateChange() {
final ArgumentCaptor<LayoutStateObserver> observer =
ArgumentCaptor.forClass(LayoutStateObserver.class);
doNothing().when(mLayoutStateProvider).addObserver(observer.capture());
initMediator();
observer.getValue().onStartedShowing(LayoutType.TAB_SWITCHER, false);
observer.getValue().onFinishedHiding(LayoutType.BROWSING);
verify(mMessageDispatcher).resume(EXPECTED_TOKEN);
}
/**
* Test the queue can be cleared when tab changes.
* TODO(crbug.com/1123947): Clean this after message scope is implemented.
*/
@Test
public void testDismissAllMessages() {
final ArgumentCaptor<TabModelObserver> observer =
ArgumentCaptor.forClass(TabModelObserver.class);
doNothing().when(mTabModelFilterProvider).addTabModelFilterObserver(observer.capture());
initMediator();
observer.getValue().didSelectTab(null, TabSelectionType.FROM_NEW, 1);
verify(mMessageDispatcher).dismissAllMessages();
}
}
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