1 /*
2  * Copyright (C) 2016 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 
17 package com.android.documentsui.testing;
18 
19 import static org.junit.Assert.assertFalse;
20 import static org.junit.Assert.assertTrue;
21 
22 import androidx.annotation.StringRes;
23 import android.view.MenuItem;
24 import android.view.View;
25 
26 import org.mockito.Mockito;
27 
28 /**
29 *
30 * Test copy of {@link android.view.MenuItem}.
31 *
32 * We use abstract so we don't have to implement all the necessary methods from the interface,
33 * and we use Mockito to just mock out the methods we need.
34 * To get an instance, use {@link #create(int)}.
35 */
36 
37 public abstract class TestMenuItem implements MenuItem {
38 
39     boolean enabled;
40     boolean visible;
41     View actionView;
42     @StringRes int title;
43 
create(int id)44     public static TestMenuItem create(int id) {
45         final TestMenuItem mockMenuItem = Mockito.mock(TestMenuItem.class,
46                 Mockito.withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS));
47 
48         // By default all menu items are enabled and visible.
49         mockMenuItem.enabled = true;
50         mockMenuItem.visible = true;
51 
52         return mockMenuItem;
53     }
54 
55     @Override
setTitle(@tringRes int title)56     public TestMenuItem setTitle(@StringRes int title) {
57         this.title = title;
58         return this;
59     }
60 
61     @Override
setTitle(@tringRes CharSequence title)62     public TestMenuItem setTitle(@StringRes CharSequence title) {
63         return this;
64     }
65 
66     @Override
setEnabled(boolean enabled)67     public MenuItem setEnabled(boolean enabled) {
68         this.enabled = enabled;
69         return this;
70     }
71 
72     @Override
setVisible(boolean visible)73     public MenuItem setVisible(boolean visible) {
74         this.visible = visible;
75         return this;
76     }
77 
78     @Override
isVisible()79     public boolean isVisible() {
80         return this.visible;
81     }
82 
83     @Override
isEnabled()84     public boolean isEnabled() {
85         return this.enabled;
86     }
87 
88     @Override
setActionView(View actionView)89     final public MenuItem setActionView(View actionView) {
90         this.actionView = actionView;
91         return this;
92     }
93 
94     @Override
getActionView()95     final public View getActionView() {
96         return this.actionView;
97     }
98 
assertEnabled()99     public void assertEnabled() {
100         assertTrue(this.enabled);
101     }
102 
assertDisabled()103     public void assertDisabled() {
104         assertFalse(this.enabled);
105     }
106 
assertVisible()107     public void assertVisible() {
108         assertTrue(this.visible);
109     }
110 
assertInvisible()111     public void assertInvisible() {
112         assertFalse(this.visible);
113     }
114 
assertTitle(@tringRes int title)115     public void assertTitle(@StringRes int title) {
116         assertTrue(this.title == title);
117     }
118 }
119