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