Skip to content

Commit f706166

Browse files
jvpratJordi Vilalta Prat
authored andcommitted
Add the ability to save to a Writer so the client code isn't forced to use a file.
1 parent 55294d7 commit f706166

File tree

2 files changed

+43
-6
lines changed

2 files changed

+43
-6
lines changed

src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/jaxb/JAXBPlistParser.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
import java.io.File;
2323
import java.io.FileNotFoundException;
2424
import java.io.FileReader;
25+
import java.io.FileWriter;
2526
import java.io.IOException;
27+
import java.io.Writer;
2628

2729
import javax.xml.bind.JAXBContext;
2830
import javax.xml.bind.JAXBException;
@@ -106,11 +108,23 @@ public void save(Plist plist, String projectFile) throws JAXBException
106108
}
107109

108110
public void save(Plist plist, File projectFile) throws JAXBException
111+
{
112+
try
113+
{
114+
save(plist, new FileWriter(projectFile));
115+
}
116+
catch (IOException ex)
117+
{
118+
throw new JAXBException(ex);
119+
}
120+
}
121+
122+
public void save(Plist plist, Writer projectFile) throws JAXBException
109123
{
110124
marshallPlist(plist, projectFile);
111125
}
112126

113-
private void marshallPlist(Plist plist, File projectFile) throws JAXBException
127+
private void marshallPlist(Plist plist, Writer projectFile) throws JAXBException
114128
{
115129
JAXBContext ctx = JAXBContext.newInstance(com.sap.prd.mobile.ios.mios.xcodeprojreader.jaxb.JAXBPlist.class);
116130
Marshaller marshaller = ctx.createMarshaller();

src/test/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/jaxb/JAXBPlistParserTest.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@
2222
import static org.junit.Assert.assertEquals;
2323
import static org.junit.Assert.assertNotNull;
2424

25+
import java.io.ByteArrayInputStream;
2526
import java.io.File;
2627
import java.io.IOException;
2728
import java.io.StringReader;
29+
import java.io.StringWriter;
30+
import java.io.Writer;
2831

2932
import javax.xml.parsers.DocumentBuilder;
3033
import javax.xml.parsers.DocumentBuilderFactory;
@@ -127,10 +130,28 @@ public void save() throws Exception
127130
output.deleteOnExit();
128131
parser.save(plist, output.getAbsolutePath());
129132

130-
assertXMLEqual(new File(fileName), output);
133+
DocumentBuilder db = initDocumentBuilder();
134+
Document expected = db.parse(new File(fileName));
135+
Document actual = db.parse(output);
136+
assertXMLEqual(expected, actual);
131137
}
132138

133-
private void assertXMLEqual(File expected, File actual) throws Exception
139+
@Test
140+
public void saveToWriter() throws Exception
141+
{
142+
JAXBPlistParser parser = new JAXBPlistParser();
143+
Plist plist = parser.load(fileName);
144+
145+
Writer output = new StringWriter();
146+
parser.save(plist, output);
147+
148+
DocumentBuilder db = initDocumentBuilder();
149+
Document expected = db.parse(new File(fileName));
150+
Document actual = db.parse(new ByteArrayInputStream(output.toString().getBytes()));
151+
assertXMLEqual(expected, actual);
152+
}
153+
154+
private DocumentBuilder initDocumentBuilder() throws Exception
134155
{
135156
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
136157
db.setEntityResolver(new EntityResolver() {
@@ -141,11 +162,13 @@ public InputSource resolveEntity(String publicId, String systemId)
141162
return new InputSource(new StringReader(""));
142163
}
143164
});
165+
return db;
166+
}
144167

145-
Document doc1 = db.parse(expected);
146-
Document doc2 = db.parse(actual);
168+
private void assertXMLEqual(Document expected, Document actual) throws Exception
169+
{
147170
XMLUnit.setIgnoreWhitespace(true);
148171
XMLUnit.setIgnoreComments(true);
149-
XMLAssert.assertXMLEqual(doc1, doc2);
172+
XMLAssert.assertXMLEqual(expected, actual);
150173
}
151174
}

0 commit comments

Comments
 (0)