1/**
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy
6 * 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, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations
14 * under the License.
15 */
16
17package android.view.menu;
18
19import android.util.KeyUtils;
20import com.android.internal.view.menu.IconMenuView;
21import com.android.internal.view.menu.MenuBuilder;
22
23import android.content.pm.ActivityInfo;
24import android.test.ActivityInstrumentationTestCase;
25
26public class MenuLayoutPortraitTest extends ActivityInstrumentationTestCase<MenuLayoutPortrait> {
27    private static final String LONG_TITLE = "Really really really really really really really really really really long title";
28    private static final String SHORT_TITLE = "Item";
29
30    private MenuLayout mActivity;
31
32    public MenuLayoutPortraitTest() {
33        super("com.android.frameworks.coretests", MenuLayoutPortrait.class);
34    }
35
36    @Override
37    protected void setUp() throws Exception {
38        super.setUp();
39        mActivity = getActivity();
40    }
41
42    public void testPreconditions() {
43        assertNotNull(mActivity);
44    }
45
46    private void toggleMenu() {
47        getInstrumentation().waitForIdleSync();
48        KeyUtils.tapMenuKey(this);
49        getInstrumentation().waitForIdleSync();
50    }
51
52    /**
53     * Asserts the layout of the menu.
54     *
55     * @param expectedLayout The number of parameters is the number of rows, and
56     *            each parameter is how many items on that row.
57     */
58    private void assertLayout(Integer... expectedLayout) {
59        toggleMenu();
60
61        /* TODO These need to be rewritten to account for presenters that an activity
62         * does not have access to.
63        IconMenuView iconMenuView = ((IconMenuView) mActivity.getMenuView(MenuBuilder.TYPE_ICON));
64        int[] layout = iconMenuView.getLayout();
65        int layoutNumRows = iconMenuView.getLayoutNumRows();
66
67        int expectedRows = expectedLayout.length;
68        assertEquals("Row mismatch", expectedRows, layoutNumRows);
69
70        for (int row = 0; row < expectedRows; row++) {
71            assertEquals("Col mismatch on row " + row, expectedLayout[row].intValue(),
72                    layout[row]);
73        }
74         */
75    }
76
77    public void test1ShortItem() {
78        mActivity.setParams(new MenuScenario.Params()
79                .setNumItems(1)
80                .setItemTitle(0, SHORT_TITLE));
81        assertLayout(1);
82    }
83
84    public void test1LongItem() {
85        mActivity.setParams(new MenuScenario.Params()
86                .setNumItems(1)
87                .setItemTitle(0, LONG_TITLE));
88        assertLayout(1);
89    }
90
91    public void test2LongItems() {
92        mActivity.setParams(new MenuScenario.Params()
93                .setNumItems(2)
94                .setItemTitle(0, LONG_TITLE)
95                .setItemTitle(1, LONG_TITLE));
96        assertLayout(1, 1);
97    }
98
99    public void test2ShortItems() {
100        mActivity.setParams(new MenuScenario.Params()
101                .setNumItems(2)
102                .setItemTitle(0, SHORT_TITLE)
103                .setItemTitle(1, SHORT_TITLE));
104        assertLayout(2);
105    }
106
107    public void test3ShortItems() {
108        mActivity.setParams(new MenuScenario.Params()
109                .setNumItems(3)
110                .setItemTitle(0, SHORT_TITLE)
111                .setItemTitle(1, SHORT_TITLE)
112                .setItemTitle(2, SHORT_TITLE));
113        assertLayout(3);
114    }
115
116    public void test3VarietyItems() {
117        mActivity.setParams(new MenuScenario.Params()
118                .setNumItems(3)
119                .setItemTitle(0, SHORT_TITLE)
120                .setItemTitle(1, LONG_TITLE)
121                .setItemTitle(2, SHORT_TITLE));
122        // We maintain the order added, so there must be 3 rows
123        assertLayout(1, 1, 1);
124    }
125
126    public void test3VarietyItems2() {
127        mActivity.setParams(new MenuScenario.Params()
128                .setNumItems(3)
129                .setItemTitle(0, LONG_TITLE)
130                .setItemTitle(1, SHORT_TITLE)
131                .setItemTitle(2, SHORT_TITLE));
132        // The long can fit in first row, and two shorts in second
133        assertLayout(1, 2);
134    }
135
136    public void test4LongItems() {
137        mActivity.setParams(new MenuScenario.Params()
138                .setNumItems(4)
139                .setItemTitle(0, LONG_TITLE)
140                .setItemTitle(1, LONG_TITLE)
141                .setItemTitle(2, LONG_TITLE)
142                .setItemTitle(3, LONG_TITLE));
143        assertLayout(1, 1, 2);
144    }
145
146    public void test4ShortItems() {
147        mActivity.setParams(new MenuScenario.Params()
148                .setNumItems(4)
149                .setItemTitle(0, SHORT_TITLE)
150                .setItemTitle(1, SHORT_TITLE)
151                .setItemTitle(2, SHORT_TITLE)
152                .setItemTitle(3, SHORT_TITLE));
153        assertLayout(2, 2);
154    }
155
156    public void test4VarietyItems() {
157        mActivity.setParams(new MenuScenario.Params()
158                .setNumItems(4)
159                .setItemTitle(0, LONG_TITLE)
160                .setItemTitle(1, SHORT_TITLE)
161                .setItemTitle(2, SHORT_TITLE)
162                .setItemTitle(3, SHORT_TITLE));
163        assertLayout(1, 1, 2);
164    }
165
166    public void test5ShortItems() {
167        mActivity.setParams(new MenuScenario.Params()
168                .setNumItems(5)
169                .setItemTitle(0, SHORT_TITLE)
170                .setItemTitle(1, SHORT_TITLE)
171                .setItemTitle(2, SHORT_TITLE)
172                .setItemTitle(3, SHORT_TITLE)
173                .setItemTitle(4, SHORT_TITLE));
174        assertLayout(2, 3);
175    }
176
177    public void test5LongItems() {
178        mActivity.setParams(new MenuScenario.Params()
179                .setNumItems(5)
180                .setItemTitle(0, LONG_TITLE)
181                .setItemTitle(1, LONG_TITLE)
182                .setItemTitle(2, LONG_TITLE)
183                .setItemTitle(3, LONG_TITLE)
184                .setItemTitle(4, LONG_TITLE));
185        assertLayout(1, 2, 2);
186    }
187
188    public void test5VarietyItems() {
189        mActivity.setParams(new MenuScenario.Params()
190                .setNumItems(5)
191                .setItemTitle(0, LONG_TITLE)
192                .setItemTitle(1, SHORT_TITLE)
193                .setItemTitle(2, LONG_TITLE)
194                .setItemTitle(3, SHORT_TITLE)
195                .setItemTitle(4, LONG_TITLE));
196        assertLayout(1, 2, 2);
197    }
198
199    public void test6LongItems() {
200        mActivity.setParams(new MenuScenario.Params()
201                .setNumItems(6)
202                .setItemTitle(0, LONG_TITLE)
203                .setItemTitle(1, LONG_TITLE)
204                .setItemTitle(2, LONG_TITLE)
205                .setItemTitle(3, LONG_TITLE)
206                .setItemTitle(4, LONG_TITLE)
207                .setItemTitle(5, LONG_TITLE));
208        assertLayout(2, 2, 2);
209    }
210
211    public void test6ShortItems() {
212        mActivity.setParams(new MenuScenario.Params()
213                .setNumItems(6)
214                .setItemTitle(0, SHORT_TITLE)
215                .setItemTitle(1, SHORT_TITLE)
216                .setItemTitle(2, SHORT_TITLE)
217                .setItemTitle(3, SHORT_TITLE)
218                .setItemTitle(4, SHORT_TITLE)
219                .setItemTitle(5, SHORT_TITLE));
220        assertLayout(3, 3);
221    }
222
223    public void test6VarietyItems() {
224        mActivity.setParams(new MenuScenario.Params()
225                .setNumItems(6)
226                .setItemTitle(0, SHORT_TITLE)
227                .setItemTitle(1, LONG_TITLE)
228                .setItemTitle(2, SHORT_TITLE)
229                .setItemTitle(3, LONG_TITLE)
230                .setItemTitle(4, SHORT_TITLE)
231                .setItemTitle(5, SHORT_TITLE));
232        assertLayout(2, 2, 2);
233    }
234}
235