Commit 19423452 authored by gogerald's avatar gogerald Committed by Commit Bot

[StartSurface] Introduce initial StartSurfaceMediatorUnitTest

Bug: 1020223
Change-Id: I974a7d8bea365b62134f28ce947c9b2c090bb712
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1894294
Commit-Queue: Ganggui Tang <gogerald@chromium.org>
Auto-Submit: Ganggui Tang <gogerald@chromium.org>
Reviewed-by: default avatarYusuf Ozuysal <yusufo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#711840}
parent 56c55b7a
// Copyright 2019 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.features.start_surface;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_FAKE_SEARCH_BOX_VISIBLE;
import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_INCOGNITO;
import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_VOICE_RECOGNITION_BUTTON_VISIBLE;
import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.MV_TILES_VISIBLE;
import static org.chromium.chrome.features.start_surface.StartSurfaceProperties.IS_EXPLORE_SURFACE_VISIBLE;
import static org.chromium.chrome.features.start_surface.StartSurfaceProperties.IS_SHOWING_OVERVIEW;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.browser.night_mode.NightModeStateProvider;
import org.chromium.chrome.browser.ntp.FakeboxDelegate;
import org.chromium.chrome.browser.omnibox.LocationBarVoiceRecognitionHandler;
import org.chromium.chrome.browser.omnibox.UrlFocusChangeListener;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tasks.TasksSurfaceProperties;
import org.chromium.chrome.browser.tasks.tab_management.TabSwitcher;
import org.chromium.chrome.browser.tasks.tab_management.TabSwitcher.OverviewModeObserver;
import org.chromium.chrome.features.start_surface.StartSurfaceMediator.SurfaceMode;
import org.chromium.ui.modelutil.PropertyKey;
import org.chromium.ui.modelutil.PropertyModel;
import java.util.ArrayList;
import java.util.Arrays;
/** Tests for {@link StartSurfaceMediator}. */
@RunWith(BaseRobolectricTestRunner.class)
@Config(manifest = Config.NONE)
public class StartSurfaceMediatorUnitTest {
private PropertyModel mPropertyModel;
@Mock
private TabSwitcher.Controller mMainTabGridController;
@Mock
private TabModelSelector mTabModelSelector;
@Mock
private FakeboxDelegate mFakeBoxDelegate;
@Mock
private NightModeStateProvider mNightModeStateProvider;
@Mock
private LocationBarVoiceRecognitionHandler mLocationBarVoiceRecognitionHandler;
@Captor
private ArgumentCaptor<EmptyTabModelSelectorObserver> mTabModelSelectorObserverCaptor;
@Captor
private ArgumentCaptor<OverviewModeObserver> mOverviewModeObserverCaptor;
@Captor
private ArgumentCaptor<UrlFocusChangeListener> mUrlFocusChangeListenerCaptor;
@Before
public void setUp() {
RecordUserAction.setDisabledForTests(true);
MockitoAnnotations.initMocks(this);
ArrayList<PropertyKey> allProperties =
new ArrayList<>(Arrays.asList(TasksSurfaceProperties.ALL_KEYS));
allProperties.addAll(Arrays.asList(StartSurfaceProperties.ALL_KEYS));
mPropertyModel = new PropertyModel(allProperties);
}
@After
public void tearDown() {
RecordUserAction.setDisabledForTests(false);
mPropertyModel = null;
}
@Test
public void showAndHideNoStartSurface() {
doReturn(false).when(mTabModelSelector).isIncognitoSelected();
StartSurfaceMediator mediator = createStartSurfaceMediator(SurfaceMode.NO_START_SURFACE);
verify(mTabModelSelector, never()).addObserver(mTabModelSelectorObserverCaptor.capture());
verify(mMainTabGridController)
.addOverviewModeObserver(mOverviewModeObserverCaptor.capture());
mediator.showOverview(false);
verify(mMainTabGridController).showOverview(eq(false));
mOverviewModeObserverCaptor.getValue().startedShowing();
mOverviewModeObserverCaptor.getValue().finishedShowing();
mediator.hideOverview(true);
verify(mMainTabGridController).hideOverview(eq(true));
mOverviewModeObserverCaptor.getValue().startedHiding();
mOverviewModeObserverCaptor.getValue().finishedHiding();
// TODO(crbug.com/1020223): Test the other SurfaceMode.NO_START_SURFACE operations.
}
@Test
public void showAndHideTasksOnlySurface() {
doReturn(false).when(mTabModelSelector).isIncognitoSelected();
doReturn(mLocationBarVoiceRecognitionHandler)
.when(mFakeBoxDelegate)
.getLocationBarVoiceRecognitionHandler();
doReturn(true).when(mLocationBarVoiceRecognitionHandler).isVoiceSearchEnabled();
StartSurfaceMediator mediator = createStartSurfaceMediator(SurfaceMode.TASKS_ONLY);
verify(mTabModelSelector).addObserver(mTabModelSelectorObserverCaptor.capture());
verify(mMainTabGridController)
.addOverviewModeObserver(mOverviewModeObserverCaptor.capture());
assertThat(mPropertyModel.get(IS_INCOGNITO), equalTo(false));
assertThat(mPropertyModel.get(IS_VOICE_RECOGNITION_BUTTON_VISIBLE), equalTo(true));
assertThat(mPropertyModel.get(IS_EXPLORE_SURFACE_VISIBLE), equalTo(false));
assertThat(mPropertyModel.get(MV_TILES_VISIBLE), equalTo(true));
mediator.showOverview(false);
verify(mMainTabGridController).showOverview(eq(false));
verify(mFakeBoxDelegate).addUrlFocusChangeListener(mUrlFocusChangeListenerCaptor.capture());
assertThat(mPropertyModel.get(IS_SHOWING_OVERVIEW), equalTo(true));
mOverviewModeObserverCaptor.getValue().startedShowing();
mOverviewModeObserverCaptor.getValue().finishedShowing();
mUrlFocusChangeListenerCaptor.getValue().onUrlFocusChange(true);
assertThat(mPropertyModel.get(IS_FAKE_SEARCH_BOX_VISIBLE), equalTo(false));
mUrlFocusChangeListenerCaptor.getValue().onUrlFocusChange(false);
assertThat(mPropertyModel.get(IS_FAKE_SEARCH_BOX_VISIBLE), equalTo(true));
mediator.hideOverview(true);
verify(mMainTabGridController).hideOverview(eq(true));
mOverviewModeObserverCaptor.getValue().startedHiding();
assertThat(mPropertyModel.get(IS_SHOWING_OVERVIEW), equalTo(false));
verify(mFakeBoxDelegate)
.removeUrlFocusChangeListener(mUrlFocusChangeListenerCaptor.getValue());
mOverviewModeObserverCaptor.getValue().finishedHiding();
// TODO(crbug.com/1020223): Test the other SurfaceMode.TASKS_ONLY operations.
}
// TODO(crbug.com/1020223): Test SurfaceMode.SINGLE_PANE and SurfaceMode.TWO_PANES modes.
private StartSurfaceMediator createStartSurfaceMediator(@SurfaceMode int mode) {
return new StartSurfaceMediator(mMainTabGridController, mTabModelSelector,
mode == SurfaceMode.NO_START_SURFACE ? null : mPropertyModel, null, null, mode,
mFakeBoxDelegate, mNightModeStateProvider);
}
}
# Copyright 2019 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.
start_surface_junit_java_sources = [ "//chrome/android/features/start_surface/internal/junit/src/org/chromium/chrome/features/start_surface/StartSurfaceMediatorUnitTest.java" ]
......@@ -9,6 +9,8 @@ import("//chrome/android/chrome_test_java_sources.gni")
import("//chrome/android/features/autofill_assistant/public/java_sources.gni")
import(
"//chrome/android/features/start_surface/internal/javatests/start_surface_test_java_sources.gni")
import(
"//chrome/android/features/start_surface/internal/junit/start_surface_junit_java_sources.gni")
import("//chrome/android/features/tab_ui/tab_management_java_sources.gni")
import("//chrome/android/feed/feed_java_sources.gni")
import("//components/feed/features.gni")
......@@ -33,6 +35,7 @@ if (enable_feed_in_chrome) {
}
chrome_test_java_sources += start_surface_test_java_sources
chrome_junit_test_java_sources += start_surface_junit_java_sources
chrome_junit_test_java_sources += tab_management_junit_java_sources
chrome_test_java_sources += tab_management_test_java_sources
......
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