Unit tests for POIFS EntryUtils
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1207333 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c27488ef36
commit
a0e1b78f34
@ -104,11 +104,16 @@ public class EntryUtils
|
|||||||
* Checks to see if the two Directories hold the same contents.
|
* Checks to see if the two Directories hold the same contents.
|
||||||
* For this to be true, they must have entries with the same names,
|
* For this to be true, they must have entries with the same names,
|
||||||
* no entries in one but not the other, and the size+contents
|
* no entries in one but not the other, and the size+contents
|
||||||
* of each entry must match.
|
* of each entry must match, and they must share names
|
||||||
* TODO Some sort of excepts support
|
* TODO Some sort of excepts support
|
||||||
*/
|
*/
|
||||||
public static boolean areDirectoriesIdentical(DirectoryNode dirA, DirectoryNode dirB) {
|
public static boolean areDirectoriesIdentical(DirectoryEntry dirA, DirectoryEntry dirB) {
|
||||||
// First up, check they have the same number of children
|
// First, check names
|
||||||
|
if (! dirA.getName().equals(dirB.getName())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next up, check they have the same number of children
|
||||||
if (dirA.getEntryCount() != dirB.getEntryCount()) {
|
if (dirA.getEntryCount() != dirB.getEntryCount()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -181,7 +186,7 @@ public class EntryUtils
|
|||||||
* and the same contents. (Their parent directories are
|
* and the same contents. (Their parent directories are
|
||||||
* not checked)
|
* not checked)
|
||||||
*/
|
*/
|
||||||
public static boolean areDocumentsIdentical(DocumentNode docA, DocumentNode docB) throws IOException {
|
public static boolean areDocumentsIdentical(DocumentEntry docA, DocumentEntry docB) throws IOException {
|
||||||
if (! docA.getName().equals(docB.getName())) {
|
if (! docA.getName().equals(docB.getName())) {
|
||||||
// Names don't match, not the same
|
// Names don't match, not the same
|
||||||
return false;
|
return false;
|
||||||
|
@ -17,22 +17,149 @@
|
|||||||
|
|
||||||
package org.apache.poi.poifs.filesystem;
|
package org.apache.poi.poifs.filesystem;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.apache.poi.POIDataSamples;
|
import org.apache.poi.POIDataSamples;
|
||||||
|
|
||||||
public class TestEntryUtils extends TestCase {
|
public class TestEntryUtils extends TestCase {
|
||||||
private static final POIDataSamples dataSamples = POIDataSamples.getPOIFSInstance();
|
private static final POIDataSamples dataSamples = POIDataSamples.getPOIFSInstance();
|
||||||
|
private byte[] dataSmallA = new byte[] { 12, 42, 11, -12, -121 };
|
||||||
|
private byte[] dataSmallB = new byte[] { 11, 73, 21, -92, -103 };
|
||||||
|
|
||||||
public void testCopyRecursively() throws Exception {
|
public void testCopyRecursively() throws Exception {
|
||||||
// TODO
|
POIFSFileSystem fsD = new POIFSFileSystem();
|
||||||
|
POIFSFileSystem fs = new POIFSFileSystem();
|
||||||
|
DirectoryEntry dirA = fs.createDirectory("DirA");
|
||||||
|
DirectoryEntry dirB = fs.createDirectory("DirB");
|
||||||
|
|
||||||
|
DocumentEntry entryR = fs.createDocument(new ByteArrayInputStream(dataSmallA), "EntryRoot");
|
||||||
|
DocumentEntry entryA1 = dirA.createDocument("EntryA1", new ByteArrayInputStream(dataSmallA));
|
||||||
|
DocumentEntry entryA2 = dirA.createDocument("EntryA2", new ByteArrayInputStream(dataSmallB));
|
||||||
|
|
||||||
|
// Copy docs
|
||||||
|
assertEquals(0, fsD.getRoot().getEntryCount());
|
||||||
|
EntryUtils.copyNodeRecursively(entryR, fsD.getRoot());
|
||||||
|
|
||||||
|
assertEquals(1, fsD.getRoot().getEntryCount());
|
||||||
|
assertNotNull(fsD.getRoot().getEntry("EntryRoot"));
|
||||||
|
|
||||||
|
EntryUtils.copyNodeRecursively(entryA1, fsD.getRoot());
|
||||||
|
assertEquals(2, fsD.getRoot().getEntryCount());
|
||||||
|
assertNotNull(fsD.getRoot().getEntry("EntryRoot"));
|
||||||
|
assertNotNull(fsD.getRoot().getEntry("EntryA1"));
|
||||||
|
|
||||||
|
EntryUtils.copyNodeRecursively(entryA2, fsD.getRoot());
|
||||||
|
assertEquals(3, fsD.getRoot().getEntryCount());
|
||||||
|
assertNotNull(fsD.getRoot().getEntry("EntryRoot"));
|
||||||
|
assertNotNull(fsD.getRoot().getEntry("EntryA1"));
|
||||||
|
assertNotNull(fsD.getRoot().getEntry("EntryA2"));
|
||||||
|
|
||||||
|
// Copy directories
|
||||||
|
fsD = new POIFSFileSystem();
|
||||||
|
assertEquals(0, fsD.getRoot().getEntryCount());
|
||||||
|
|
||||||
|
EntryUtils.copyNodeRecursively(dirB, fsD.getRoot());
|
||||||
|
assertEquals(1, fsD.getRoot().getEntryCount());
|
||||||
|
assertNotNull(fsD.getRoot().getEntry("DirB"));
|
||||||
|
assertEquals(0, ((DirectoryEntry)fsD.getRoot().getEntry("DirB")).getEntryCount());
|
||||||
|
|
||||||
|
EntryUtils.copyNodeRecursively(dirA, fsD.getRoot());
|
||||||
|
assertEquals(2, fsD.getRoot().getEntryCount());
|
||||||
|
assertNotNull(fsD.getRoot().getEntry("DirB"));
|
||||||
|
assertEquals(0, ((DirectoryEntry)fsD.getRoot().getEntry("DirB")).getEntryCount());
|
||||||
|
assertNotNull(fsD.getRoot().getEntry("DirA"));
|
||||||
|
assertEquals(2, ((DirectoryEntry)fsD.getRoot().getEntry("DirA")).getEntryCount());
|
||||||
|
|
||||||
|
// Copy the whole lot
|
||||||
|
fsD = new POIFSFileSystem();
|
||||||
|
assertEquals(0, fsD.getRoot().getEntryCount());
|
||||||
|
|
||||||
|
EntryUtils.copyNodes(fs, fsD, new ArrayList<String>());
|
||||||
|
assertEquals(3, fsD.getRoot().getEntryCount());
|
||||||
|
assertNotNull(fsD.getRoot().getEntry(dirA.getName()));
|
||||||
|
assertNotNull(fsD.getRoot().getEntry(dirB.getName()));
|
||||||
|
assertNotNull(fsD.getRoot().getEntry(entryR.getName()));
|
||||||
|
assertEquals(0, ((DirectoryEntry)fsD.getRoot().getEntry("DirB")).getEntryCount());
|
||||||
|
assertEquals(2, ((DirectoryEntry)fsD.getRoot().getEntry("DirA")).getEntryCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAreDocumentsIdentical() throws Exception {
|
public void testAreDocumentsIdentical() throws Exception {
|
||||||
// TODO
|
POIFSFileSystem fs = new POIFSFileSystem();
|
||||||
|
DirectoryEntry dirA = fs.createDirectory("DirA");
|
||||||
|
DirectoryEntry dirB = fs.createDirectory("DirB");
|
||||||
|
|
||||||
|
DocumentEntry entryA1 = dirA.createDocument("Entry1", new ByteArrayInputStream(dataSmallA));
|
||||||
|
DocumentEntry entryA1b = dirA.createDocument("Entry1b", new ByteArrayInputStream(dataSmallA));
|
||||||
|
DocumentEntry entryA2 = dirA.createDocument("Entry2", new ByteArrayInputStream(dataSmallB));
|
||||||
|
DocumentEntry entryB1 = dirB.createDocument("Entry1", new ByteArrayInputStream(dataSmallA));
|
||||||
|
|
||||||
|
|
||||||
|
// Names must match
|
||||||
|
assertEquals(false, entryA1.getName().equals(entryA1b.getName()));
|
||||||
|
assertEquals(false, EntryUtils.areDocumentsIdentical(entryA1, entryA1b));
|
||||||
|
|
||||||
|
// Contents must match
|
||||||
|
assertEquals(false, EntryUtils.areDocumentsIdentical(entryA1, entryA2));
|
||||||
|
|
||||||
|
// Parents don't matter if contents + names are the same
|
||||||
|
assertEquals(false, entryA1.getParent().equals(entryB1.getParent()));
|
||||||
|
assertEquals(true, EntryUtils.areDocumentsIdentical(entryA1, entryB1));
|
||||||
|
|
||||||
|
|
||||||
|
// Can work with NPOIFS + POIFS
|
||||||
|
ByteArrayOutputStream tmpO = new ByteArrayOutputStream();
|
||||||
|
fs.writeFilesystem(tmpO);
|
||||||
|
ByteArrayInputStream tmpI = new ByteArrayInputStream(tmpO.toByteArray());
|
||||||
|
NPOIFSFileSystem nfs = new NPOIFSFileSystem(tmpI);
|
||||||
|
|
||||||
|
DirectoryEntry dN1 = (DirectoryEntry)nfs.getRoot().getEntry("DirA");
|
||||||
|
DirectoryEntry dN2 = (DirectoryEntry)nfs.getRoot().getEntry("DirB");
|
||||||
|
DocumentEntry eNA1 = (DocumentEntry)dN1.getEntry(entryA1.getName());
|
||||||
|
DocumentEntry eNA2 = (DocumentEntry)dN1.getEntry(entryA2.getName());
|
||||||
|
DocumentEntry eNB1 = (DocumentEntry)dN2.getEntry(entryB1.getName());
|
||||||
|
|
||||||
|
assertEquals(false, EntryUtils.areDocumentsIdentical(eNA1, eNA2));
|
||||||
|
assertEquals(true, EntryUtils.areDocumentsIdentical(eNA1, eNB1));
|
||||||
|
|
||||||
|
assertEquals(false, EntryUtils.areDocumentsIdentical(eNA1, entryA1b));
|
||||||
|
assertEquals(false, EntryUtils.areDocumentsIdentical(eNA1, entryA2));
|
||||||
|
|
||||||
|
assertEquals(true, EntryUtils.areDocumentsIdentical(eNA1, entryA1));
|
||||||
|
assertEquals(true, EntryUtils.areDocumentsIdentical(eNA1, entryB1));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAreDirectoriesIdentical() throws Exception {
|
public void testAreDirectoriesIdentical() throws Exception {
|
||||||
// TODO
|
POIFSFileSystem fs = new POIFSFileSystem();
|
||||||
|
DirectoryEntry dirA = fs.createDirectory("DirA");
|
||||||
|
DirectoryEntry dirB = fs.createDirectory("DirB");
|
||||||
|
|
||||||
|
// Names must match
|
||||||
|
assertEquals(false, EntryUtils.areDirectoriesIdentical(dirA, dirB));
|
||||||
|
|
||||||
|
// Empty dirs are fine
|
||||||
|
DirectoryEntry dirA1 = dirA.createDirectory("TheDir");
|
||||||
|
DirectoryEntry dirB1 = dirB.createDirectory("TheDir");
|
||||||
|
assertEquals(0, dirA1.getEntryCount());
|
||||||
|
assertEquals(0, dirB1.getEntryCount());
|
||||||
|
assertEquals(true, EntryUtils.areDirectoriesIdentical(dirA1, dirB1));
|
||||||
|
|
||||||
|
// Otherwise children must match
|
||||||
|
dirA1.createDocument("Entry1", new ByteArrayInputStream(dataSmallA));
|
||||||
|
assertEquals(false, EntryUtils.areDirectoriesIdentical(dirA1, dirB1));
|
||||||
|
|
||||||
|
dirB1.createDocument("Entry1", new ByteArrayInputStream(dataSmallA));
|
||||||
|
assertEquals(true, EntryUtils.areDirectoriesIdentical(dirA1, dirB1));
|
||||||
|
|
||||||
|
dirA1.createDirectory("DD");
|
||||||
|
assertEquals(false, EntryUtils.areDirectoriesIdentical(dirA1, dirB1));
|
||||||
|
dirB1.createDirectory("DD");
|
||||||
|
assertEquals(true, EntryUtils.areDirectoriesIdentical(dirA1, dirB1));
|
||||||
|
|
||||||
|
|
||||||
|
// TODO Excludes support
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user