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