1package com.xtremelabs.robolectric.res;
2
3
4import static com.xtremelabs.robolectric.util.TestUtil.getSystemResourceDir;
5import static com.xtremelabs.robolectric.util.TestUtil.resourceFile;
6
7import java.util.ArrayList;
8
9import org.junit.After;
10import org.junit.Before;
11import org.junit.Test;
12import org.junit.runner.RunWith;
13
14import android.content.ComponentName;
15import android.content.Intent;
16import android.graphics.drawable.Drawable;
17import android.view.KeyEvent;
18import android.view.Menu;
19import android.view.MenuItem;
20import android.view.SubMenu;
21import android.view.ContextMenu.ContextMenuInfo;
22import android.view.MenuItem.OnMenuItemClickListener;
23
24import com.xtremelabs.robolectric.R;
25import com.xtremelabs.robolectric.Robolectric;
26import com.xtremelabs.robolectric.WithTestDefaultsRunner;
27import com.xtremelabs.robolectric.tester.android.view.TestMenuItem;
28import com.xtremelabs.robolectric.util.I18nException;
29
30@RunWith(WithTestDefaultsRunner.class)
31public class MenuLoaderTest {
32
33	private MenuLoader menuLoader;
34
35	@Before
36	public void setUp() throws Exception {
37        ResourceExtractor resourceExtractor = new ResourceExtractor();
38        resourceExtractor.addLocalRClass(R.class);
39        resourceExtractor.addSystemRClass(android.R.class);
40
41        StringResourceLoader stringResourceLoader = new StringResourceLoader(resourceExtractor);
42        new DocumentLoader(stringResourceLoader).loadResourceXmlDir(resourceFile("res", "values"));
43        new DocumentLoader(stringResourceLoader).loadSystemResourceXmlDir(getSystemResourceDir("values"));
44
45        menuLoader = new MenuLoader(resourceExtractor, new AttrResourceLoader(resourceExtractor));
46        new DocumentLoader(menuLoader).loadResourceXmlDir(resourceFile("res", "menu"));
47	}
48
49	@After
50	public void tearDown() throws Exception {
51	}
52
53	@Test(expected=I18nException.class)
54	public void shouldThrowI18nExceptionOnMenuWithBareStrings() throws Exception {
55		Menu testMenu = new TestMenu();
56        menuLoader.setStrictI18n(true);
57		menuLoader.inflateMenu(Robolectric.application, R.menu.test, testMenu);
58	}
59
60	public class TestMenu implements Menu {
61		@Override
62		public MenuItem add(CharSequence title) {
63			return null;
64		}
65
66		@Override
67		public MenuItem add(int titleRes) {
68			return null;
69		}
70
71		@Override
72		public MenuItem add(int groupId, int itemId, int order,
73				CharSequence title) {
74			return null;
75		}
76
77		@Override
78		public MenuItem add(int groupId, int itemId, int order, int titleRes) {
79			return null;
80		}
81
82		@Override
83		public SubMenu addSubMenu(CharSequence title) {
84			return null;
85		}
86
87		@Override
88		public SubMenu addSubMenu(int titleRes) {
89			return null;
90		}
91
92		@Override
93		public SubMenu addSubMenu(int groupId, int itemId, int order,
94				CharSequence title) {
95			return null;
96		}
97
98		@Override
99		public SubMenu addSubMenu(int groupId, int itemId, int order,
100				int titleRes) {
101			return null;
102		}
103
104		@Override
105		public int addIntentOptions(int groupId, int itemId, int order,
106				ComponentName caller, Intent[] specifics, Intent intent,
107				int flags, MenuItem[] outSpecificItems) {
108			return 0;
109		}
110
111		@Override
112		public void removeItem(int id) {
113
114		}
115
116		@Override
117		public void removeGroup(int groupId) {
118
119		}
120
121		@Override
122		public void clear() {
123
124		}
125
126		@Override
127		public void setGroupCheckable(int group, boolean checkable,
128				boolean exclusive) {
129
130		}
131
132		@Override
133		public void setGroupVisible(int group, boolean visible) {
134
135		}
136
137		@Override
138		public void setGroupEnabled(int group, boolean enabled) {
139
140		}
141
142		@Override
143		public boolean hasVisibleItems() {
144			return false;
145		}
146
147		@Override
148		public MenuItem findItem(int id) {
149			return null;
150		}
151
152		@Override
153		public int size() {
154
155			return 0;
156		}
157
158		@Override
159		public MenuItem getItem(int index) {
160
161			return null;
162		}
163
164		@Override
165		public void close() {
166
167
168		}
169
170		@Override
171		public boolean performShortcut(int keyCode, KeyEvent event, int flags) {
172
173			return false;
174		}
175
176		@Override
177		public boolean isShortcutKey(int keyCode, KeyEvent event) {
178
179			return false;
180		}
181
182		@Override
183		public boolean performIdentifierAction(int id, int flags) {
184
185			return false;
186		}
187
188		@Override
189		public void setQwertyMode(boolean isQwerty) {
190
191
192		}
193	}
194}
195