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