TestMetaDataIPIpublic class TestMetaDataIPI extends TestCase Basing on: src/examples/src/org/apache/poi/hpsf/examples/ModifyDocumentSummaryInformation.java
This class tests reading and writing of meta data. No actual document is created. All information
is stored in a virtal document in a ByteArrayOutputStream |
Fields Summary |
---|
private ByteArrayOutputStream | bout | private POIFSFileSystem | poifs | DirectoryEntry | dir | DocumentSummaryInformation | dsi | SummaryInformation | si |
Constructors Summary |
---|
public TestMetaDataIPI(String s)Standard constructor
super(s);
|
Methods Summary |
---|
public void | closeAndReOpen()Closes the ByteArrayOutputStream and reads it into a ByteArrayInputStream.
When finished writing information this method is used in the tests to
start reading from the created document and then the see if the results match.
try {
dsi.write(dir, DocumentSummaryInformation.DEFAULT_STREAM_NAME);
si.write(dir,SummaryInformation.DEFAULT_STREAM_NAME);
} catch (WritingNotSupportedException e) {
e.printStackTrace();
fail();
} catch (IOException e) {
e.printStackTrace();
fail();
}
si=null;
dsi=null;
try {
poifs.writeFilesystem(bout);
bout.flush();
} catch (IOException e) {
e.printStackTrace();
fail();
}
InputStream is=new ByteArrayInputStream(bout.toByteArray());
assertNotNull(is);
POIFSFileSystem poifs=null;
try {
poifs = new POIFSFileSystem(is);
} catch (IOException e) {
e.printStackTrace();
fail();
}
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
fail();
}
assertNotNull(poifs);
/* Read the document summary information. */
DirectoryEntry dir = poifs.getRoot();
try
{
DocumentEntry dsiEntry = (DocumentEntry)
dir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
DocumentInputStream dis = new DocumentInputStream(dsiEntry);
PropertySet ps = new PropertySet(dis);
dis.close();
dsi = new DocumentSummaryInformation(ps);
}
catch (FileNotFoundException ex)
{
fail();
} catch (IOException e) {
e.printStackTrace();
fail();
} catch (NoPropertySetStreamException e) {
e.printStackTrace();
fail();
} catch (MarkUnsupportedException e) {
e.printStackTrace();
fail();
} catch (UnexpectedPropertySetTypeException e) {
e.printStackTrace();
fail();
}
try
{
DocumentEntry dsiEntry = (DocumentEntry)
dir.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
DocumentInputStream dis = new DocumentInputStream(dsiEntry);
PropertySet ps = new PropertySet(dis);
dis.close();
si = new SummaryInformation(ps);
}
catch (FileNotFoundException ex)
{
/* There is no document summary information yet. We have to create a
* new one. */
si = PropertySetFactory.newSummaryInformation();
assertNotNull(si);
} catch (IOException e) {
e.printStackTrace();
fail();
} catch (NoPropertySetStreamException e) {
e.printStackTrace();
fail();
} catch (MarkUnsupportedException e) {
e.printStackTrace();
fail();
} catch (UnexpectedPropertySetTypeException e) {
e.printStackTrace();
fail();
}
| public java.lang.String | elongate(java.lang.String s)multiplies a string
StringBuffer sb=new StringBuffer();
for (int i=0;i<10000;i++){
sb.append(s);
sb.append(" ");
}
return sb.toString();
| public void | setUp()Setup is used to get the document ready. Gets the DocumentSummaryInformation and the
SummaryInformation to reasonable values
bout=new ByteArrayOutputStream();
poifs= new POIFSFileSystem();
dir = poifs.getRoot();
dsi=null;
try
{
DocumentEntry dsiEntry = (DocumentEntry)
dir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
DocumentInputStream dis = new DocumentInputStream(dsiEntry);
PropertySet ps = new PropertySet(dis);
dis.close();
dsi = new DocumentSummaryInformation(ps);
}
catch (FileNotFoundException ex)
{
/* There is no document summary information yet. We have to create a
* new one. */
dsi = PropertySetFactory.newDocumentSummaryInformation();
assertNotNull(dsi);
} catch (IOException e) {
e.printStackTrace();
fail();
} catch (NoPropertySetStreamException e) {
e.printStackTrace();
fail();
} catch (MarkUnsupportedException e) {
e.printStackTrace();
fail();
} catch (UnexpectedPropertySetTypeException e) {
e.printStackTrace();
fail();
}
assertNotNull(dsi);
try
{
DocumentEntry dsiEntry = (DocumentEntry)
dir.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
DocumentInputStream dis = new DocumentInputStream(dsiEntry);
PropertySet ps = new PropertySet(dis);
dis.close();
si = new SummaryInformation(ps);
}
catch (FileNotFoundException ex)
{
/* There is no document summary information yet. We have to create a
* new one. */
si = PropertySetFactory.newSummaryInformation();
assertNotNull(si);
} catch (IOException e) {
e.printStackTrace();
fail();
} catch (NoPropertySetStreamException e) {
e.printStackTrace();
fail();
} catch (MarkUnsupportedException e) {
e.printStackTrace();
fail();
} catch (UnexpectedPropertySetTypeException e) {
e.printStackTrace();
fail();
}
assertNotNull(dsi);
| public java.lang.String | strangize(java.lang.String s)adds strange characters to the string
StringBuffer sb=new StringBuffer();
String[] umlaute= {"ä","ü","ö","Ü","$","Ö","Ü","É","Ö","@","ç","&"};
char j=0;
Random rand=new Random();
for (int i=0;i<5;i++){
sb.append(s);
sb.append(" ");
j=(char) rand.nextInt(220);
j+=33;
// System.out.println(j);
sb.append(">");
sb.append(new Character(j));
sb.append("=");
sb.append(umlaute[rand.nextInt(umlaute.length)]);
sb.append("<");
}
return sb.toString();
| public java.lang.String | strangizeU(java.lang.String s)adds strange characters to the string with the adding of unicode characters
StringBuffer sb=new StringBuffer();
String[] umlaute= {"ä","ü","ö","Ü","$","Ö","Ü","É","Ö","@","ç","&"};
char j=0;
Random rand=new Random();
for (int i=0;i<5;i++){
sb.append(s);
sb.append(" ");
j=(char) rand.nextInt(220);
j+=33;
// System.out.println(j);
sb.append(">");
sb.append(new Character(j));
sb.append("=");
sb.append(umlaute[rand.nextInt(umlaute.length)]);
sb.append("<");
}
sb.append("äöü\uD840\uDC00");
return sb.toString();
| public void | tearDown()Setting a lot of things to null.
bout=null;
poifs=null;
dir=null;
dsi=null;
| public void | testConvAndExistance()Tests conversion in custom fields and errors
CustomProperties customProperties = dsi.getCustomProperties();
if (customProperties == null){
customProperties = new CustomProperties();
}
/* Insert some custom properties into the container. */
customProperties.put("int", new Integer(12345));
customProperties.put("negint", new Integer(-12345));
customProperties.put("long", new Long(12345));
customProperties.put("neglong", new Long(-12345));
customProperties.put("boolean", new Boolean(true));
customProperties.put("string", "a String");
//customProperties.put("float", new Float(12345.0)); is not valid
//customProperties.put("negfloat", new Float(-12345.1)); is not valid
customProperties.put("double", new Double(12345.2));
customProperties.put("negdouble", new Double(-12345.3));
//customProperties.put("char", new Character('a')); is not valid
Date date=new Date();
customProperties.put("date", date);
dsi.setCustomProperties(customProperties);
closeAndReOpen();
assertNotNull(dsi);
assertNotNull(si);
/* Change the category to "POI example". Any former category value will
* be lost. If there has been no category yet, it will be created. */
assertNull(dsi.getCategory());
assertNull(dsi.getCompany());
assertNull(dsi.getManager());
assertNull(si.getAuthor());
assertNull(si.getTitle());
assertNull(si.getComments());
assertNull(si.getKeywords());
assertNull(si.getSubject());
/* Read the custom properties. If there are no custom properties
* yet, the application has to create a new CustomProperties object.
* It will serve as a container for custom properties. */
customProperties = dsi.getCustomProperties();
if (customProperties == null){
fail();
}
/* Insert some custom properties into the container. */
Integer a3=(Integer) customProperties.get("int");
assertEquals("int",new Integer(12345),a3);
a3=(Integer) customProperties.get("negint");
assertEquals("negint",new Integer(-12345),a3);
Long al=(Long) customProperties.get("neglong");
assertEquals("neglong",new Long(-12345),al);
al=(Long) customProperties.get("long");
assertEquals("long",new Long(12345),al);
Boolean a4=(Boolean) customProperties.get("boolean");
assertEquals("boolean",new Boolean(true),a4);
Date a5=(Date) customProperties.get("date");
assertEquals("Custom Date:",date,a5);
Double d=(Double) customProperties.get("double");
assertEquals("int",new Double(12345.2),d);
d=(Double) customProperties.get("negdouble");
assertEquals("string",new Double(-12345.3),d);
String s=(String) customProperties.get("string");
assertEquals("sring","a String",s);
Object o=null;
o=customProperties.get("string");
if (!(o instanceof String)){
fail();
}
o=customProperties.get("boolean");
if (!(o instanceof Boolean)){
fail();
}
o=customProperties.get("int");
if (!(o instanceof Integer)){
fail();
}
o=customProperties.get("negint");
if (!(o instanceof Integer)){
fail();
}
o=customProperties.get("long");
if (!(o instanceof Long)){
fail();
}
o=customProperties.get("neglong");
if (!(o instanceof Long)){
fail();
}
o=customProperties.get("double");
if (!(o instanceof Double)){
fail();
}
o=customProperties.get("negdouble");
if (!(o instanceof Double)){
fail();
}
o=customProperties.get("date");
if (!(o instanceof Date)){
fail();
}
| public void | testFour()Iterative testing: writing, reading etc.
for (int i=1;i<100;i++){
setUp();
testThree();
tearDown();
}
| public void | testOne()Sets the most important information in DocumentSummaryInformation and Summary Information and rereads it
//DocumentSummaryInformation
dsi.setCompany("xxxCompanyxxx");
dsi.setManager("xxxManagerxxx");
dsi.setCategory("xxxCategoryxxx");
//SummaryInformation
si.setTitle("xxxTitlexxx");
si.setAuthor("xxxAuthorxxx");
si.setComments("xxxCommentsxxx");
si.setKeywords("xxxKeyWordsxxx");
si.setSubject("xxxSubjectxxx");
//Custom Properties (in DocumentSummaryInformation
CustomProperties customProperties = dsi.getCustomProperties();
if (customProperties == null){
customProperties = new CustomProperties();
}
/* Insert some custom properties into the container. */
customProperties.put("Key1", "Value1");
customProperties.put("Schlüssel2", "Wert2");
customProperties.put("Sample Integer", new Integer(12345));
customProperties.put("Sample Boolean", new Boolean(true));
Date date=new Date();
customProperties.put("Sample Date", date);
customProperties.put("Sample Double", new Double(-1.0001));
customProperties.put("Sample Negative Integer", new Integer(-100000));
dsi.setCustomProperties(customProperties);
//start reading
closeAndReOpen();
//testing
assertNotNull(dsi);
assertNotNull(si);
assertEquals("Category","xxxCategoryxxx",dsi.getCategory());
assertEquals("Company","xxxCompanyxxx",dsi.getCompany());
assertEquals("Manager","xxxManagerxxx",dsi.getManager());
assertEquals("","xxxAuthorxxx",si.getAuthor());
assertEquals("","xxxTitlexxx",si.getTitle());
assertEquals("","xxxCommentsxxx",si.getComments());
assertEquals("","xxxKeyWordsxxx",si.getKeywords());
assertEquals("","xxxSubjectxxx",si.getSubject());
/* Read the custom properties. If there are no custom properties yet,
* the application has to create a new CustomProperties object. It will
* serve as a container for custom properties. */
customProperties = dsi.getCustomProperties();
if (customProperties == null){
fail();
}
/* Insert some custom properties into the container. */
String a1=(String) customProperties.get("Key1");
assertEquals("Key1","Value1",a1);
String a2=(String) customProperties.get("Schlüssel2");
assertEquals("Schlüssel2","Wert2",a2);
Integer a3=(Integer) customProperties.get("Sample Integer");
assertEquals("Sample Number",new Integer(12345),a3);
Boolean a4=(Boolean) customProperties.get("Sample Boolean");
assertEquals("Sample Boolean",new Boolean(true),a4);
Date a5=(Date) customProperties.get("Sample Date");
assertEquals("Custom Date:",date,a5);
Double a6=(Double) customProperties.get("Sample Double");
assertEquals("Custom Float",new Double(-1.0001),a6);
Integer a7=(Integer) customProperties.get("Sample Negative Integer");
assertEquals("Neg", new Integer(-100000),a7);
| public void | testSix()Iterative testing of the unicode test
for (int i=1;i<100;i++){
setUp();
testUnicode();
tearDown();
}
| public void | testThree()Tests with strange characters in keys and data (Umlaute etc.)
String company=strangize("company");
String manager=strangize("manager");
String category=strangize("category");
String title=strangize("title");
String author=strangize("author");
String comments=strangize("comments");
String keywords=strangize("keywords");
String subject=strangize("subject");
String p1=strangize("p1");
String p2=strangize("p2");
String k1=strangize("k1");
String k2=strangize("k2");
dsi.setCompany(company);
dsi.setManager(manager);
dsi.setCategory(category);
si.setTitle(title);
si.setAuthor(author);
si.setComments(comments);
si.setKeywords(keywords);
si.setSubject(subject);
CustomProperties customProperties = dsi.getCustomProperties();
if (customProperties == null){
customProperties = new CustomProperties();
}
/* Insert some custom properties into the container. */
customProperties.put(k1, p1);
customProperties.put(k2, p2);
customProperties.put("Sample Number", new Integer(12345));
customProperties.put("Sample Boolean", new Boolean(false));
Date date=new Date(0);
customProperties.put("Sample Date", date);
dsi.setCustomProperties(customProperties);
closeAndReOpen();
assertNotNull(dsi);
assertNotNull(si);
/* Change the category to "POI example". Any former category value will
* be lost. If there has been no category yet, it will be created. */
assertEquals("Category",category,dsi.getCategory());
assertEquals("Company",company,dsi.getCompany());
assertEquals("Manager",manager,dsi.getManager());
assertEquals("",author,si.getAuthor());
assertEquals("",title,si.getTitle());
assertEquals("",comments,si.getComments());
assertEquals("",keywords,si.getKeywords());
assertEquals("",subject,si.getSubject());
/* Read the custom properties. If there are no custom properties yet,
* the application has to create a new CustomProperties object. It will
* serve as a container for custom properties. */
customProperties = dsi.getCustomProperties();
if (customProperties == null){
fail();
}
/* Insert some custom properties into the container. */
// System.out.println(k1);
String a1=(String) customProperties.get(k1);
assertEquals("Key1",p1,a1);
String a2=(String) customProperties.get(k2);
assertEquals("Schlüssel2",p2,a2);
Integer a3=(Integer) customProperties.get("Sample Number");
assertEquals("Sample Number",new Integer(12345),a3);
Boolean a4=(Boolean) customProperties.get("Sample Boolean");
assertEquals("Sample Boolean",new Boolean(false),a4);
Date a5=(Date) customProperties.get("Sample Date");
assertEquals("Custom Date:",date,a5);
| public void | testTwo()Test very long input in each of the fields (approx 30-60KB each)
String company=elongate("company");
String manager=elongate("manager");
String category=elongate("category");
String title=elongate("title");
String author=elongate("author");
String comments=elongate("comments");
String keywords=elongate("keywords");
String subject=elongate("subject");
String p1=elongate("p1");
String p2=elongate("p2");
String k1=elongate("k1");
String k2=elongate("k2");
dsi.setCompany(company);
dsi.setManager(manager);
dsi.setCategory(category);
si.setTitle(title);
si.setAuthor(author);
si.setComments(comments);
si.setKeywords(keywords);
si.setSubject(subject);
CustomProperties customProperties = dsi.getCustomProperties();
if (customProperties == null){
customProperties = new CustomProperties();
}
/* Insert some custom properties into the container. */
customProperties.put(k1, p1);
customProperties.put(k2, p2);
customProperties.put("Sample Number", new Integer(12345));
customProperties.put("Sample Boolean", new Boolean(true));
Date date=new Date();
customProperties.put("Sample Date", date);
dsi.setCustomProperties(customProperties);
closeAndReOpen();
assertNotNull(dsi);
assertNotNull(si);
/* Change the category to "POI example". Any former category value will
* be lost. If there has been no category yet, it will be created. */
assertEquals("Category",category,dsi.getCategory());
assertEquals("Company",company,dsi.getCompany());
assertEquals("Manager",manager,dsi.getManager());
assertEquals("",author,si.getAuthor());
assertEquals("",title,si.getTitle());
assertEquals("",comments,si.getComments());
assertEquals("",keywords,si.getKeywords());
assertEquals("",subject,si.getSubject());
/* Read the custom properties. If there are no custom properties
* yet, the application has to create a new CustomProperties object.
* It will serve as a container for custom properties. */
customProperties = dsi.getCustomProperties();
if (customProperties == null){
fail();
}
/* Insert some custom properties into the container. */
String a1=(String) customProperties.get(k1);
assertEquals("Key1",p1,a1);
String a2=(String) customProperties.get(k2);
assertEquals("Schlüssel2",p2,a2);
Integer a3=(Integer) customProperties.get("Sample Number");
assertEquals("Sample Number",new Integer(12345),a3);
Boolean a4=(Boolean) customProperties.get("Sample Boolean");
assertEquals("Sample Boolean",new Boolean(true),a4);
Date a5=(Date) customProperties.get("Sample Date");
assertEquals("Custom Date:",date,a5);
| public void | testUnicode()Unicode test
String company=strangizeU("company");
String manager=strangizeU("manager");
String category=strangizeU("category");
String title=strangizeU("title");
String author=strangizeU("author");
String comments=strangizeU("comments");
String keywords=strangizeU("keywords");
String subject=strangizeU("subject");
String p1=strangizeU("p1");
String p2=strangizeU("p2");
String k1=strangizeU("k1");
String k2=strangizeU("k2");
dsi.setCompany(company);
dsi.setManager(manager);
dsi.setCategory(category);
si.setTitle(title);
si.setAuthor(author);
si.setComments(comments);
si.setKeywords(keywords);
si.setSubject(subject);
CustomProperties customProperties = dsi.getCustomProperties();
if (customProperties == null){
customProperties = new CustomProperties();
}
/* Insert some custom properties into the container. */
customProperties.put(k1, p1);
customProperties.put(k2, p2);
customProperties.put("Sample Number", new Integer(12345));
customProperties.put("Sample Boolean", new Boolean(true));
Date date=new Date();
customProperties.put("Sample Date", date);
dsi.setCustomProperties(customProperties);
closeAndReOpen();
assertNotNull(dsi);
assertNotNull(si);
/* Change the category to "POI example". Any former category value will
* be lost. If there has been no category yet, it will be created. */
assertEquals("Category",category,dsi.getCategory());
assertEquals("Company",company,dsi.getCompany());
assertEquals("Manager",manager,dsi.getManager());
assertEquals("",author,si.getAuthor());
assertEquals("",title,si.getTitle());
assertEquals("",comments,si.getComments());
assertEquals("",keywords,si.getKeywords());
assertEquals("",subject,si.getSubject());
/* Read the custom properties. If there are no custom properties yet,
* the application has to create a new CustomProperties object. It will
* serve as a container for custom properties. */
customProperties = dsi.getCustomProperties();
if (customProperties == null){
fail();
}
/* Insert some custom properties into the container. */
// System.out.println(k1);
String a1=(String) customProperties.get(k1);
assertEquals("Key1",p1,a1);
String a2=(String) customProperties.get(k2);
assertEquals("Schlüssel2",p2,a2);
Integer a3=(Integer) customProperties.get("Sample Number");
assertEquals("Sample Number",new Integer(12345),a3);
Boolean a4=(Boolean) customProperties.get("Sample Boolean");
assertEquals("Sample Boolean",new Boolean(true),a4);
Date a5=(Date) customProperties.get("Sample Date");
assertEquals("Custom Date:",date,a5);
|
|