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