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 MenuLayoutLandscapeTest extends ActivityInstrumentationTestCase<MenuLayoutLandscape> {
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 MenuLayoutLandscapeTest() {
33        super("com.android.frameworks.coretests", MenuLayoutLandscape.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 (the first
57     *            parameter is the top-most row).
58     */
59    private void assertLayout(Integer... expectedLayout) {
60        toggleMenu();
61
62        /* TODO These need to be rewritten to account for presenters that an activity
63         * does not have access to.
64        IconMenuView iconMenuView = ((IconMenuView) mActivity.getMenuView(MenuBuilder.TYPE_ICON));
65        int[] layout = iconMenuView.getLayout();
66        int layoutNumRows = iconMenuView.getLayoutNumRows();
67
68        int expectedRows = expectedLayout.length;
69        assertEquals("Row mismatch", expectedRows, layoutNumRows);
70
71        for (int row = 0; row < expectedRows; row++) {
72            assertEquals("Col mismatch on row " + row, expectedLayout[row].intValue(),
73                    layout[row]);
74        }
75         */
76    }
77
78    public void test1ShortItem() {
79        mActivity.setParams(new MenuScenario.Params()
80                .setNumItems(1)
81                .setItemTitle(0, SHORT_TITLE));
82        assertLayout(1);
83    }
84
85    public void test1LongItem() {
86        mActivity.setParams(new MenuScenario.Params()
87                .setNumItems(1)
88                .setItemTitle(0, LONG_TITLE));
89        assertLayout(1);
90    }
91
92    public void test2LongItems() {
93        mActivity.setParams(new MenuScenario.Params()
94                .setNumItems(2)
95                .setItemTitle(0, LONG_TITLE)
96                .setItemTitle(1, LONG_TITLE));
97        assertLayout(1, 1);
98    }
99
100    public void test2ShortItems() {
101        mActivity.setParams(new MenuScenario.Params()
102                .setNumItems(2)
103                .setItemTitle(0, SHORT_TITLE)
104                .setItemTitle(1, SHORT_TITLE));
105        assertLayout(2);
106    }
107
108    public void test3ShortItems() {
109        mActivity.setParams(new MenuScenario.Params()
110                .setNumItems(3)
111                .setItemTitle(0, SHORT_TITLE)
112                .setItemTitle(1, SHORT_TITLE)
113                .setItemTitle(2, SHORT_TITLE));
114        assertLayout(3);
115    }
116
117    public void test3VarietyItems() {
118        mActivity.setParams(new MenuScenario.Params()
119                .setNumItems(3)
120                .setItemTitle(0, SHORT_TITLE)
121                .setItemTitle(1, LONG_TITLE)
122                .setItemTitle(2, SHORT_TITLE));
123        assertLayout(1, 2);
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        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(2, 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(4);
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(2, 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(5);
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(2, 3);
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(2, 3);
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(3, 3);
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(6);
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(3, 3);
232    }
233}
234