14ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrishpackage org.robolectric.manifest;
24ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish
34ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrishimport com.google.common.collect.ImmutableList;
4851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport javax.xml.parsers.DocumentBuilder;
5851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport javax.xml.parsers.DocumentBuilderFactory;
6851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport javax.xml.parsers.ParserConfigurationException;
74ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrishimport org.junit.Before;
84ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrishimport org.junit.Test;
94ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrishimport org.junit.runner.RunWith;
104ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrishimport org.junit.runners.JUnit4;
114ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrishimport org.mockito.Mock;
124ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrishimport org.mockito.MockitoAnnotations;
139cdf65df76a6329399f29da4f4fdfeebdd2ac787Jonathan Gerrishimport org.robolectric.res.ResourceTable;
144ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrishimport org.w3c.dom.Element;
154ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrishimport org.w3c.dom.Node;
164ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish
174ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish/**
184ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish * Tests for {@link MetaData}
194ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish */
204ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish@RunWith(JUnit4.class)
214ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrishpublic class MetaDataTest {
224ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish
239cdf65df76a6329399f29da4f4fdfeebdd2ac787Jonathan Gerrish  @Mock private ResourceTable resourceProvider;
244ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish
254ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish  @Before
264ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish  public void setUp() {
274ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish    MockitoAnnotations.initMocks(this);
284ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish  }
294ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish
3047a4ba7be3fd9069df963aafcac49fdb96ca1426Christian Williams  @Test(expected = RoboNotFoundException.class)
3147a4ba7be3fd9069df963aafcac49fdb96ca1426Christian Williams  public void testNonExistantResource_throwsResourceNotFoundException() throws Exception {
324ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish    Element metaDataElement = createMetaDataNode("aName", "@xml/non_existant_resource");
334ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish
344ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish    MetaData metaData = new MetaData(ImmutableList.<Node>of(metaDataElement));
356a7bdc7a1b1fbe38142995bde5f05023b8ab86adJonathan Gerrish    metaData.init(resourceProvider, "a.package");
364ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish  }
374ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish
384ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish  private static Element createMetaDataNode(String name, String value) {
394ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
404ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish    Element metaDataElement;
414ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish    try {
424ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish      DocumentBuilder db = dbf.newDocumentBuilder();
434ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish      metaDataElement = db.newDocument().createElement("meta-data");
444ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish      metaDataElement.setAttribute("android:name", name);
454ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish      metaDataElement.setAttribute("android:value", value);
464ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish    } catch (ParserConfigurationException e) {
474ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish      throw new RuntimeException(e);
484ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish    }
494ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish    return metaDataElement;
504ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish  }
514ed75595fae0ca16a2531b26099603810af54f57Jonathan Gerrish}
52