From: Nick Burch
Date: Sat, 26 Apr 2014 21:51:28 +0000 (+0000)
Subject: Convert the HPSF test to JUnit 4, and add a bit more testing for NPOIFS
X-Git-Tag: REL_3_11_BETA1~158
X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=dcecea15dacd764c2b8da657caa2c0e4f4c18ecb;p=poi.git
Convert the HPSF test to JUnit 4, and add a bit more testing for NPOIFS
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1590309 13f79535-47bb-0310-9956-ffa450edef68
---
diff --git a/src/java/org/apache/poi/poifs/filesystem/NPOIFSDocument.java b/src/java/org/apache/poi/poifs/filesystem/NPOIFSDocument.java
index 99613c5ea1..7846ed0dfc 100644
--- a/src/java/org/apache/poi/poifs/filesystem/NPOIFSDocument.java
+++ b/src/java/org/apache/poi/poifs/filesystem/NPOIFSDocument.java
@@ -143,6 +143,8 @@ public final class NPOIFSDocument implements POIFSViewable {
os.write(buf, 0, readBytes);
}
+ os.close();
+
return length;
}
diff --git a/src/testcases/org/apache/poi/hpsf/basic/TestWrite.java b/src/testcases/org/apache/poi/hpsf/basic/TestWrite.java
index e4cf9b5ebd..f6eba13303 100644
--- a/src/testcases/org/apache/poi/hpsf/basic/TestWrite.java
+++ b/src/testcases/org/apache/poi/hpsf/basic/TestWrite.java
@@ -17,6 +17,11 @@
package org.apache.poi.hpsf.basic;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -32,8 +37,6 @@ import java.util.Date;
import java.util.HashMap;
import java.util.Map;
-import junit.framework.TestCase;
-
import org.apache.poi.POIDataSamples;
import org.apache.poi.hpsf.ClassID;
import org.apache.poi.hpsf.DocumentSummaryInformation;
@@ -68,14 +71,14 @@ import org.apache.poi.util.CodePageUtil;
import org.apache.poi.util.IOUtils;
import org.apache.poi.util.LittleEndian;
import org.apache.poi.util.TempFile;
-import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
/**
* Tests HPSF's writing functionality.
- *
- * @author Rainer Klute (klute@rainer-klute.de)
*/
-public class TestWrite extends TestCase
+public class TestWrite
{
private static final POIDataSamples _samples = POIDataSamples.getHPSFInstance();
@@ -98,24 +101,20 @@ public class TestWrite extends TestCase
POIFile[] poiFiles;
-
- /**
- * @see TestCase#setUp()
- */
+ @Before
public void setUp()
{
VariantSupport.setLogUnsupportedTypes(false);
}
-
-
/**
* Writes an empty property set to a POIFS and reads it back
* in.
*
* @exception IOException if an I/O exception occurs
*/
- public void testNoFormatID() throws IOException
+ @Test
+ public void withoutAFormatID() throws IOException
{
final File filename = TempFile.createTempFile(POI_FS, ".doc");
@@ -138,11 +137,11 @@ public class TestWrite extends TestCase
SummaryInformation.DEFAULT_STREAM_NAME);
poiFs.writeFilesystem(out);
out.close();
- Assert.fail("Should have thrown a NoFormatIDException.");
+ fail("Should have thrown a NoFormatIDException.");
}
catch (Exception ex)
{
- Assert.assertTrue(ex instanceof NoFormatIDException);
+ assertTrue(ex instanceof NoFormatIDException);
}
finally
{
@@ -160,7 +159,8 @@ public class TestWrite extends TestCase
* @exception UnsupportedVariantTypeException if HPSF does not yet support
* a variant type to be written
*/
- public void testWriteEmptyPropertySet()
+ @Test
+ public void writeEmptyPropertySet()
throws IOException, UnsupportedVariantTypeException
{
final File dataDir = _samples.getFile("");
@@ -200,7 +200,8 @@ public class TestWrite extends TestCase
* @exception UnsupportedVariantTypeException if HPSF does not yet support
* a variant type to be written
*/
- public void testWriteSimplePropertySet()
+ @Test
+ public void writeSimplePropertySet()
throws IOException, UnsupportedVariantTypeException
{
final String AUTHOR = "Rainer Klute";
@@ -249,14 +250,14 @@ public class TestWrite extends TestCase
},
SummaryInformation.DEFAULT_STREAM_NAME);
r.read(new FileInputStream(filename));
- Assert.assertNotNull(psa[0]);
- Assert.assertTrue(psa[0].isSummaryInformation());
+ assertNotNull(psa[0]);
+ assertTrue(psa[0].isSummaryInformation());
final Section s = (Section) (psa[0].getSections().get(0));
Object p1 = s.getProperty(PropertyIDMap.PID_AUTHOR);
Object p2 = s.getProperty(PropertyIDMap.PID_TITLE);
- Assert.assertEquals(AUTHOR, p1);
- Assert.assertEquals(TITLE, p2);
+ assertEquals(AUTHOR, p1);
+ assertEquals(TITLE, p2);
}
@@ -269,7 +270,8 @@ public class TestWrite extends TestCase
* @exception WritingNotSupportedException if HPSF does not yet support
* a variant type to be written
*/
- public void testWriteTwoSections()
+ @Test
+ public void writeTwoSections()
throws WritingNotSupportedException, IOException
{
final String STREAM_NAME = "PropertySetStream";
@@ -326,14 +328,14 @@ public class TestWrite extends TestCase
},
STREAM_NAME);
r.read(new FileInputStream(filename));
- Assert.assertNotNull(psa[0]);
+ assertNotNull(psa[0]);
Section s = (Section) (psa[0].getSections().get(0));
assertEquals(s.getFormatID(), formatID);
Object p = s.getProperty(2);
- Assert.assertEquals(SECTION1, p);
+ assertEquals(SECTION1, p);
s = (Section) (psa[0].getSections().get(1));
p = s.getProperty(2);
- Assert.assertEquals(SECTION2, p);
+ assertEquals(SECTION2, p);
}
@@ -366,7 +368,8 @@ public class TestWrite extends TestCase
* Writes and reads back various variant types and checks whether the
* stuff that has been read back equals the stuff that was written.
*/
- public void testVariantTypes()
+ @Test
+ public void variantTypes()
{
Throwable t = null;
final int codepage = CODEPAGE_DEFAULT;
@@ -451,7 +454,8 @@ public class TestWrite extends TestCase
* checks whether the stuff that has been read back equals the stuff that
* was written.
*/
- public void testCodepages()
+ @Test
+ public void codepages()
{
Throwable thr = null;
final int[] validCodepages = new int[]
@@ -537,7 +541,8 @@ public class TestWrite extends TestCase
* Tests whether writing 8-bit characters to a Unicode property
* succeeds.
*/
- public void testUnicodeWrite8Bit()
+ @Test
+ public void unicodeWrite8Bit()
{
final String TITLE = "This is a sample title";
final MutablePropertySet mps = new MutablePropertySet();
@@ -673,7 +678,8 @@ public class TestWrite extends TestCase
*
* @throws IOException
*/
- public void testRecreate() throws IOException
+ @Test
+ public void recreate() throws IOException
{
final File dataDir = _samples.getFile("");
final File[] fileList = dataDir.listFiles(new FileFilter()
@@ -757,7 +763,8 @@ public class TestWrite extends TestCase
* @throws IOException
* @throws HPSFException
*/
- public void testDictionary() throws IOException, HPSFException
+ @Test
+ public void dictionary() throws IOException, HPSFException
{
final File copy = TempFile.createTempFile("Test-HPSF", "ole2");
copy.deleteOnExit();
@@ -782,7 +789,7 @@ public class TestWrite extends TestCase
/* Read back: */
final POIFile[] psf = Util.readPropertySets(copy);
- Assert.assertEquals(1, psf.length);
+ assertEquals(1, psf.length);
final byte[] bytes = psf[0].getBytes();
final InputStream in = new ByteArrayInputStream(bytes);
final PropertySet ps2 = PropertySetFactory.create(in);
@@ -800,7 +807,9 @@ public class TestWrite extends TestCase
* Tests that when using NPOIFS, we can do an in-place write
* without needing to stream in + out the whole kitchen sink
*/
- public void DISABLEDtestInPlaceNPOIFSWrite() throws Exception {
+ @Test
+ @Ignore
+ public void inPlaceNPOIFSWrite() throws Exception {
NPOIFSFileSystem fs = null;
DirectoryEntry root = null;
DocumentNode sinfDoc = null;
@@ -808,20 +817,23 @@ public class TestWrite extends TestCase
SummaryInformation sinf = null;
DocumentSummaryInformation dinf = null;
+ // We need to work on a File for in-place changes, so create a temp one
final File copy = TempFile.createTempFile("Test-HPSF", "ole2");
copy.deleteOnExit();
- // Copy a test file over to a temp location
+ // Copy a test file over to our temp location
InputStream inp = _samples.openResourceAsStream("TestShiftJIS.doc");
FileOutputStream out = new FileOutputStream(copy);
IOUtils.copy(inp, out);
inp.close();
out.close();
+
// Open the copy in read/write mode
fs = new NPOIFSFileSystem(copy);
root = fs.getRoot();
+
// Read the properties in there
sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(sinfDoc));
@@ -831,6 +843,7 @@ public class TestWrite extends TestCase
dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(dinfDoc));
assertEquals(131077, dinf.getOSVersion());
+
// Check they start as we expect
assertEquals("Reiichiro Hori", sinf.getAuthor());
assertEquals("Microsoft Word 9.0", sinf.getApplicationName());
@@ -839,7 +852,41 @@ public class TestWrite extends TestCase
assertEquals("", dinf.getCompany());
assertEquals(null, dinf.getManager());
- // Alter a few of them
+
+ // Have them write themselves in-place with no changes
+ sinf.write(new NDocumentOutputStream(sinfDoc));
+ dinf.write(new NDocumentOutputStream(dinfDoc));
+
+ // And also write to some bytes for checking
+ ByteArrayOutputStream sinfBytes = new ByteArrayOutputStream();
+ sinf.write(sinfBytes);
+ ByteArrayOutputStream dinfBytes = new ByteArrayOutputStream();
+ dinf.write(dinfBytes);
+
+
+ // Check that the filesystem can give us back the same bytes
+ sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
+ dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
+
+ // TODO
+
+
+ // Read back in as-is
+ sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(sinfDoc));
+ assertEquals(131077, sinf.getOSVersion());
+
+ dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(dinfDoc));
+ assertEquals(131077, dinf.getOSVersion());
+
+ assertEquals("Reiichiro Hori", sinf.getAuthor());
+ assertEquals("Microsoft Word 9.0", sinf.getApplicationName());
+ assertEquals("\u7b2c1\u7ae0", sinf.getTitle());
+
+ assertEquals("", dinf.getCompany());
+ assertEquals(null, dinf.getManager());
+
+
+ // Now alter a few of them
sinf.setAuthor("Changed Author");
sinf.setTitle("Le titre \u00e9tait chang\u00e9");
dinf.setManager("Changed Manager");
@@ -850,7 +897,7 @@ public class TestWrite extends TestCase
dinf.write(new NDocumentOutputStream(dinfDoc));
- // Read as-is
+ // Read them back in again
sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(sinfDoc));
assertEquals(131077, sinf.getOSVersion());
@@ -867,7 +914,7 @@ public class TestWrite extends TestCase
assertEquals("Changed Manager", dinf.getManager());
- // Close, re-load
+ // Close the whole filesystem, and open it once more
fs.writeFilesystem();
fs.close();
@@ -903,7 +950,8 @@ public class TestWrite extends TestCase
* @throws IOException
* @throws HPSFException
*/
- public void testDictionaryWithInvalidCodepage() throws IOException, HPSFException
+ @Test
+ public void dictionaryWithInvalidCodepage() throws IOException, HPSFException
{
try
{