From 764a81e58f25a31a664eccb03250f09059cee21f Mon Sep 17 00:00:00 2001 From: tim-strazzere Date: Fri, 28 Dec 2018 12:15:34 -0800 Subject: [PATCH] Add failing test for Issue #8 Pretending to be a real dev and do TDD "in the right way". Commiting the failing testing using the sample from Issue #8 - will get the fix in asap. --- .../java/android/content/res/TestIssue8.java | 118 ++++++++++++++++++ src/test/resources/qihoo_jiagu_issue8.xml | Bin 0 -> 49444 bytes 2 files changed, 118 insertions(+) create mode 100644 src/test/java/android/content/res/TestIssue8.java create mode 100644 src/test/resources/qihoo_jiagu_issue8.xml diff --git a/src/test/java/android/content/res/TestIssue8.java b/src/test/java/android/content/res/TestIssue8.java new file mode 100644 index 0000000..8562d1e --- /dev/null +++ b/src/test/java/android/content/res/TestIssue8.java @@ -0,0 +1,118 @@ +package android.content.res; + +import android.content.res.chunk.AttributeType; +import android.content.res.chunk.types.Attribute; +import android.content.res.chunk.types.StartTag; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.runners.Enclosed; +import org.junit.runner.RunWith; +import org.w3c.dom.Document; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.*; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * @author tstrazzere + */ +@RunWith(Enclosed.class) +public class TestIssue8 { + public static class FunctionalTest { + + // Large file with weird tricks that broke tools in the past + String issue8 = "qihoo_jiagu_issue8.xml"; + + AXMLResource underTest; + + @Before + public void setUp() { + underTest = new AXMLResource(); + } + + @Test + public void testPrinting() throws IOException { + InputStream testStream = this.getClass().getClassLoader().getResourceAsStream(issue8); + + underTest = new AXMLResource(testStream); + + underTest.print(); + } + + @Test + public void testToXml() throws IOException, ParserConfigurationException { + InputStream testStream = this.getClass().getClassLoader().getResourceAsStream(issue8); + + underTest = new AXMLResource(testStream); + String xml = underTest.toXML(); + + try { + Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes())); + Node manifestNode = document.getFirstChild(); + NamedNodeMap manifestNodeAttributes = manifestNode.getAttributes(); + assertEquals("http://schemas.android.com/apk/res/android", manifestNodeAttributes.getNamedItem("xmlns:android").getNodeValue()); + assertEquals("3133", manifestNodeAttributes.getNamedItem("android:versionCode").getNodeValue()); + assertEquals("1.9.3", manifestNodeAttributes.getNamedItem("android:versionName").getNodeValue()); + assertEquals("com.faithcomesbyhearing.android.pt.bibleis", manifestNodeAttributes.getNamedItem("package").getNodeValue()); + } catch (SAXException e) { + // Is not xml + assertTrue(false); + } + } + + @Test + public void testInsertApplicationAttribute() throws IOException { + InputStream testStream = this.getClass().getClassLoader().getResourceAsStream(issue8); + + underTest.read(testStream); + + Attribute attribute = new Attribute("android", + "name", + "test", + AttributeType.STRING, + null, + underTest.getStringSection()); + + underTest.injectApplicationAttribute(attribute); + + StartTag startTag = underTest.getApplicationTag(); + + assertTrue(startTag.getAttributes().contains(attribute)); + } + + @Test + public void testWriteInsertedApplicationAttribute() throws IOException { + InputStream testStream = this.getClass().getClassLoader().getResourceAsStream(issue8); + + underTest.read(testStream); + + Attribute attribute = new Attribute("android", + "name", + "test", + AttributeType.STRING, + null, + underTest.getStringSection()); + + underTest.injectApplicationAttribute(attribute); + + File file = File.createTempFile("axml-func-test", "xml-test"); + file.deleteOnExit(); + + underTest.write(new FileOutputStream(file)); + + underTest = new AXMLResource(new FileInputStream(file)); + StartTag startTag = underTest.getApplicationTag(); + + assertEquals(underTest.getStringSection().getString(startTag.getAttributes().get(3).getNameIndex()), + "name"); + assertEquals(underTest.getStringSection().getString(startTag.getAttributes().get(3).getStringDataIndex()), + "test"); + } + } +} diff --git a/src/test/resources/qihoo_jiagu_issue8.xml b/src/test/resources/qihoo_jiagu_issue8.xml new file mode 100644 index 0000000000000000000000000000000000000000..cd4402e7815b954ba87a0b056657f02126075cb0 GIT binary patch literal 49444 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