1/* 2 * Copyright (C) 2015 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 17package com.android.internal.app; 18 19import android.test.ActivityInstrumentationTestCase2; 20import android.test.UiThreadTest; 21import android.test.suitebuilder.annotation.SmallTest; 22import android.view.ActionMode; 23import android.view.Menu; 24import android.view.MenuItem; 25 26/** 27 * Tests for {@link WindowDecorActionBar}. 28 */ 29@SmallTest 30public class WindowDecorActionBarTest 31 extends ActivityInstrumentationTestCase2<WindowDecorActionBarTestActivity> { 32 private WindowDecorActionBar mWindowDecorActionBar; 33 private MockActionModeCallback mCallback; 34 35 public WindowDecorActionBarTest() { 36 super(WindowDecorActionBarTestActivity.class); 37 } 38 39 @Override 40 protected void setUp() throws Exception { 41 super.setUp(); 42 mWindowDecorActionBar = (WindowDecorActionBar) getActivity().getActionBar(); 43 mCallback = new MockActionModeCallback(); 44 } 45 46 @UiThreadTest 47 public void testStartActionMode() { 48 ActionMode mode = mWindowDecorActionBar.startActionMode(mCallback); 49 50 assertNotNull(mode); 51 assertTrue(mCallback.mIsCreateActionModeCalled); 52 } 53 54 @UiThreadTest 55 public void testStartActionModeWhenCreateReturnsFalse() { 56 mCallback.mShouldCreateActionMode = false; 57 58 ActionMode mode = mWindowDecorActionBar.startActionMode(mCallback); 59 60 assertNull(mode); 61 assertTrue(mCallback.mIsCreateActionModeCalled); 62 } 63 64 @UiThreadTest 65 public void testStartActionModeFinishesPreviousMode() { 66 ActionMode mode1 = mWindowDecorActionBar.startActionMode(mCallback); 67 ActionMode mode2 = mWindowDecorActionBar.startActionMode(new MockActionModeCallback()); 68 69 assertNotNull(mode1); 70 assertNotNull(mode2); 71 assertTrue(mCallback.mIsDestroyActionModeCalled); 72 } 73 74 private static final class MockActionModeCallback implements ActionMode.Callback { 75 private boolean mShouldCreateActionMode = true; 76 private boolean mIsCreateActionModeCalled = false; 77 private boolean mIsDestroyActionModeCalled = false; 78 79 @Override 80 public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 81 return true; 82 } 83 84 @Override 85 public void onDestroyActionMode(ActionMode mode) { 86 mIsDestroyActionModeCalled = true; 87 } 88 89 @Override 90 public boolean onCreateActionMode(ActionMode mode, Menu menu) { 91 mIsCreateActionModeCalled = true; 92 return mShouldCreateActionMode; 93 } 94 95 @Override 96 public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 97 return false; 98 } 99 } 100} 101