1package org.robolectric.res; 2 3import static org.assertj.core.api.Assertions.assertThat; 4 5import java.io.StringReader; 6import javax.xml.stream.XMLInputFactory; 7import javax.xml.stream.XMLStreamException; 8import javax.xml.stream.XMLStreamReader; 9import org.junit.Before; 10import org.junit.Test; 11import org.junit.runner.RunWith; 12import org.junit.runners.JUnit4; 13import org.robolectric.res.android.ResTable_config; 14 15@RunWith(JUnit4.class) 16public class StaxValueLoaderTest { 17 18 private PackageResourceTable resourceTable; 19 private NodeHandler topLevelNodeHandler; 20 private StaxDocumentLoader staxDocumentLoader; 21 22 @Before 23 public void setUp() throws Exception { 24 resourceTable = new PackageResourceTable("pkg"); 25 26 topLevelNodeHandler = new NodeHandler(); 27 staxDocumentLoader = new StaxDocumentLoader("pkg", null, topLevelNodeHandler); 28 } 29 30 @Test 31 public void ignoresXliffTags() throws Exception { 32 topLevelNodeHandler.addHandler("resources", new NodeHandler() 33 .addHandler("string", new StaxValueLoader(resourceTable, "string", ResType.CHAR_SEQUENCE)) 34 ); 35 36 parse("<resources xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\">" + 37 "<string name=\"preposition_for_date\">on <xliff:g id=\"date\" example=\"May 29\">%s</xliff:g></string>" + 38 "</resources>"); 39 40 assertThat(resourceTable.getValue(new ResName("pkg:string/preposition_for_date"), new ResTable_config()).getData()) 41 .isEqualTo("on %s"); 42 } 43 44 @Test 45 public void ignoresBTags() throws Exception { 46 topLevelNodeHandler.addHandler("resources", new NodeHandler() 47 .addHandler("item[@type='string']", new StaxValueLoader(resourceTable, "string", ResType.CHAR_SEQUENCE)) 48 ); 49 50 parse("<resources xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\">" + 51 "<item type=\"string\" name=\"sms_short_code_details\">This <b>may cause charges</b> on your mobile account.</item>" + 52 "</resources>"); 53 54 assertThat(resourceTable.getValue(new ResName("pkg:string/sms_short_code_details"), new ResTable_config()).getData()) 55 .isEqualTo("This may cause charges on your mobile account."); 56 } 57 58 private void parse(String xml) throws XMLStreamException { 59 XMLInputFactory factory = XMLInputFactory.newFactory(); 60 XMLStreamReader xmlStreamReader = factory.createXMLStreamReader(new StringReader(xml)); 61 FsFile fsFile = Fs.fileFromPath("/tmp/fake.txt"); 62 Qualifiers qualifiers = Qualifiers.fromParentDir(fsFile.getParent()); 63 staxDocumentLoader.doParse(xmlStreamReader, new XmlContext("pkg", 64 fsFile, qualifiers)); 65 } 66}