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