You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2015/07/19 21:00:38 UTC

svn commit: r1691843 [20/30] - in /poi/branches/common_sl: ./ .settings/ legal/ osgi/ osgi/src/ src/examples/src/org/apache/poi/hpsf/examples/ src/examples/src/org/apache/poi/hssf/usermodel/examples/ src/examples/src/org/apache/poi/ss/examples/ src/exa...

Modified: poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/extractor/TestExtractorFactory.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/extractor/TestExtractorFactory.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/extractor/TestExtractorFactory.java (original)
+++ poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/extractor/TestExtractorFactory.java Sun Jul 19 19:00:32 2015
@@ -25,6 +25,7 @@ import junit.framework.TestCase;
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.POIOLE2TextExtractor;
 import org.apache.poi.POITextExtractor;
+import org.apache.poi.POIXMLException;
 import org.apache.poi.POIXMLTextExtractor;
 import org.apache.poi.hdgf.extractor.VisioTextExtractor;
 import org.apache.poi.hpbf.extractor.PublisherTextExtractor;
@@ -47,252 +48,290 @@ import org.apache.poi.xwpf.extractor.XWP
  * Test that the extractor factory plays nicely
  */
 public class TestExtractorFactory extends TestCase {
+    private File txt;
 
-   private File txt;
+    private File xls;
+    private File xlsx;
+    private File xlsxStrict;
+    private File xltx;
+    private File xlsEmb;
+
+    private File doc;
+    private File doc6;
+    private File doc95;
+    private File docx;
+    private File dotx;
+    private File docEmb;
+    private File docEmbOOXML;
+
+    private File ppt;
+    private File pptx;
+
+    private File msg;
+    private File msgEmb;
+    private File msgEmbMsg;
+
+    private File vsd;
+    private File vsdx;
+
+    private File pub;
+
+    private File getFileAndCheck(POIDataSamples samples, String name) {
+        File file = samples.getFile(name);
+
+        assertNotNull("Did not get a file for " + name, file);
+        assertTrue("Did not get a type file for " + name, file.isFile());
+        assertTrue("File did not exist: " + name, file.exists());
+
+        return file;
+    }
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        POIDataSamples ssTests = POIDataSamples.getSpreadSheetInstance();
+        xls = getFileAndCheck(ssTests, "SampleSS.xls");
+        xlsx = getFileAndCheck(ssTests, "SampleSS.xlsx");
+        xlsxStrict = getFileAndCheck(ssTests, "SampleSS.strict.xlsx");
+        xltx = getFileAndCheck(ssTests, "test.xltx");
+        xlsEmb = getFileAndCheck(ssTests, "excel_with_embeded.xls");
+
+        POIDataSamples wpTests = POIDataSamples.getDocumentInstance();
+        doc = getFileAndCheck(wpTests, "SampleDoc.doc");
+        doc6 = getFileAndCheck(wpTests, "Word6.doc");
+        doc95 = getFileAndCheck(wpTests, "Word95.doc");
+        docx = getFileAndCheck(wpTests, "SampleDoc.docx");
+        dotx = getFileAndCheck(wpTests, "test.dotx");
+        docEmb = getFileAndCheck(wpTests, "word_with_embeded.doc");
+        docEmbOOXML = getFileAndCheck(wpTests, "word_with_embeded_ooxml.doc");
+
+        POIDataSamples slTests = POIDataSamples.getSlideShowInstance();
+        ppt = getFileAndCheck(slTests, "SampleShow.ppt");
+        pptx = getFileAndCheck(slTests, "SampleShow.pptx");
+        txt = getFileAndCheck(slTests, "SampleShow.txt");
+
+        POIDataSamples dgTests = POIDataSamples.getDiagramInstance();
+        vsd = getFileAndCheck(dgTests, "Test_Visio-Some_Random_Text.vsd");
+        vsdx = getFileAndCheck(dgTests, "test.vsdx");
+
+        POIDataSamples pubTests = POIDataSamples.getPublisherInstance();
+        pub = getFileAndCheck(pubTests, "Simple.pub");
+
+        POIDataSamples olTests = POIDataSamples.getHSMFInstance();
+        msg = getFileAndCheck(olTests, "quick.msg");
+        msgEmb = getFileAndCheck(olTests, "attachment_test_msg.msg");
+        msgEmbMsg = getFileAndCheck(olTests, "attachment_msg_pdf.msg");
+    }
+
+    public void testFile() throws Exception {
+        // Excel
+        POITextExtractor xlsExtractor = ExtractorFactory.createExtractor(xls);
+        assertNotNull("Had empty extractor for " + xls, xlsExtractor);
+        assertTrue("Expected instanceof ExcelExtractor, but had: " + xlsExtractor.getClass(), 
+                xlsExtractor
+                instanceof ExcelExtractor
+        );
+        assertTrue(
+                xlsExtractor.getText().length() > 200
+        );
+        xlsExtractor.close();
+
+        POITextExtractor extractor = ExtractorFactory.createExtractor(xlsx);
+        assertTrue(
+                extractor
+                instanceof XSSFExcelExtractor
+        );
+        extractor.close();
+
+        extractor = ExtractorFactory.createExtractor(xlsx);
+        assertTrue(
+                extractor.getText().length() > 200
+        );
+        extractor.close();
+
+        extractor = ExtractorFactory.createExtractor(xltx);
+        assertTrue(
+                extractor
+                instanceof XSSFExcelExtractor
+        );
+        extractor.close();
+
+        extractor = ExtractorFactory.createExtractor(xltx);
+        assertTrue(
+                extractor.getText().contains("test")
+        );
+        extractor.close();
+
+        // TODO Support OOXML-Strict, see bug #57699
+        try {
+            extractor = ExtractorFactory.createExtractor(xlsxStrict);
+            fail("OOXML-Strict isn't yet supported");
+        } catch (POIXMLException e) {
+            // Expected, for now
+        }
+//        extractor = ExtractorFactory.createExtractor(xlsxStrict);
+//        assertTrue(
+//                extractor
+//                instanceof XSSFExcelExtractor
+//        );
+//        extractor.close();
+//
+//        extractor = ExtractorFactory.createExtractor(xlsxStrict);
+//        assertTrue(
+//                extractor.getText().contains("test")
+//        );
+//        extractor.close();
+
+
+        // Word
+        assertTrue(
+                ExtractorFactory.createExtractor(doc)
+                instanceof WordExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(doc).getText().length() > 120
+        );
+
+        assertTrue(
+                ExtractorFactory.createExtractor(doc6)
+                instanceof Word6Extractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(doc6).getText().length() > 20
+        );
+
+        assertTrue(
+                ExtractorFactory.createExtractor(doc95)
+                instanceof Word6Extractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(doc95).getText().length() > 120
+        );
+
+        extractor = ExtractorFactory.createExtractor(docx);
+        assertTrue(
+                extractor instanceof XWPFWordExtractor
+        );
+        extractor.close();
+
+        extractor = ExtractorFactory.createExtractor(docx);
+        assertTrue(
+                extractor.getText().length() > 120
+        );
+        extractor.close();
+
+        extractor = ExtractorFactory.createExtractor(dotx);
+        assertTrue(
+                extractor instanceof XWPFWordExtractor
+        );
+        extractor.close();
+
+        extractor = ExtractorFactory.createExtractor(dotx);
+        assertTrue(
+                extractor.getText().contains("Test")
+        );
+        extractor.close();
+
+        // PowerPoint
+        assertTrue(
+                ExtractorFactory.createExtractor(ppt)
+                instanceof PowerPointExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(ppt).getText().length() > 120
+        );
+
+        extractor = ExtractorFactory.createExtractor(pptx);
+        assertTrue(
+                extractor
+                instanceof XSLFPowerPointExtractor
+        );
+        extractor.close();
+
+        extractor = ExtractorFactory.createExtractor(pptx);
+        assertTrue(
+                extractor.getText().length() > 120
+        );
+        extractor.close();
+
+        // Visio - binary
+        assertTrue(
+                ExtractorFactory.createExtractor(vsd)
+                instanceof VisioTextExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(vsd).getText().length() > 50
+        );
+        // Visio - vsdx
+        try {
+            ExtractorFactory.createExtractor(vsdx);
+            fail();
+        } catch(IllegalArgumentException e) {
+            // Good
+        }
+
+        // Publisher
+        assertTrue(
+                ExtractorFactory.createExtractor(pub)
+                instanceof PublisherTextExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(pub).getText().length() > 50
+        );
+
+        // Outlook msg
+        assertTrue(
+                ExtractorFactory.createExtractor(msg)
+                instanceof OutlookTextExtactor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(msg).getText().length() > 50
+        );
+
+        // Text
+        try {
+            ExtractorFactory.createExtractor(txt);
+            fail();
+        } catch(IllegalArgumentException e) {
+            // Good
+        }
+    }
+
+    public void testInputStream() throws Exception {
+        // Excel
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(xls))
+                instanceof ExcelExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(xls)).getText().length() > 200
+        );
+
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(xlsx))
+                instanceof XSSFExcelExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(xlsx)).getText().length() > 200
+        );
+        // TODO Support OOXML-Strict, see bug #57699
+//        assertTrue(
+//                ExtractorFactory.createExtractor(new FileInputStream(xlsxStrict))
+//                instanceof XSSFExcelExtractor
+//        );
+//        assertTrue(
+//                ExtractorFactory.createExtractor(new FileInputStream(xlsxStrict)).getText().length() > 200
+//        );
+
+        // Word
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(doc))
+                instanceof WordExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(doc)).getText().length() > 120
+        );
 
-   private File xls;
-   private File xlsx;
-   private File xltx;
-   private File xlsEmb;
-
-   private File doc;
-   private File doc6;
-   private File doc95;
-   private File docx;
-   private File dotx;
-   private File docEmb;
-   private File docEmbOOXML;
-
-   private File ppt;
-   private File pptx;
-
-   private File msg;
-   private File msgEmb;
-   private File msgEmbMsg;
-   
-   private File vsd;
-   
-   private File pub;
-
-   private File getFileAndCheck(POIDataSamples samples, String name) {
-       File file = samples.getFile(name);
-       
-       assertNotNull("Did not get a file for " + name, file);
-       assertTrue("Did not get a type file for " + name, file.isFile());
-       assertTrue("File did not exist: " + name, file.exists());
-       
-       return file;
-   }
-   @Override
-   protected void setUp() throws Exception {
-      super.setUp();
-
-      POIDataSamples ssTests = POIDataSamples.getSpreadSheetInstance();
-      xls = getFileAndCheck(ssTests, "SampleSS.xls");
-      xlsx = getFileAndCheck(ssTests, "SampleSS.xlsx");
-      xltx = getFileAndCheck(ssTests, "test.xltx");
-      xlsEmb = getFileAndCheck(ssTests, "excel_with_embeded.xls");
-
-      POIDataSamples wpTests = POIDataSamples.getDocumentInstance();
-      doc = getFileAndCheck(wpTests, "SampleDoc.doc");
-      doc6 = getFileAndCheck(wpTests, "Word6.doc");
-      doc95 = getFileAndCheck(wpTests, "Word95.doc");
-      docx = getFileAndCheck(wpTests, "SampleDoc.docx");
-      dotx = getFileAndCheck(wpTests, "test.dotx");
-      docEmb = getFileAndCheck(wpTests, "word_with_embeded.doc");
-      docEmbOOXML = getFileAndCheck(wpTests, "word_with_embeded_ooxml.doc");
-
-      POIDataSamples slTests = POIDataSamples.getSlideShowInstance();
-      ppt = getFileAndCheck(slTests, "SampleShow.ppt");
-      pptx = getFileAndCheck(slTests, "SampleShow.pptx");
-      txt = getFileAndCheck(slTests, "SampleShow.txt");
-
-      POIDataSamples dgTests = POIDataSamples.getDiagramInstance();
-      vsd = getFileAndCheck(dgTests, "Test_Visio-Some_Random_Text.vsd");
-      
-      POIDataSamples pubTests = POIDataSamples.getPublisherInstance();
-      pub = getFileAndCheck(pubTests, "Simple.pub");
-      
-      POIDataSamples olTests = POIDataSamples.getHSMFInstance();
-      msg = getFileAndCheck(olTests, "quick.msg");
-      msgEmb = getFileAndCheck(olTests, "attachment_test_msg.msg");
-      msgEmbMsg = getFileAndCheck(olTests, "attachment_msg_pdf.msg");
-   }
-
-   public void testFile() throws Exception {
-      // Excel
-      POITextExtractor xlsExtractor = ExtractorFactory.createExtractor(xls);
-      assertNotNull("Had empty extractor for " + xls, xlsExtractor);
-      assertTrue("Expected instanceof ExcelExtractor, but had: " + xlsExtractor.getClass(), 
-            xlsExtractor
-            instanceof ExcelExtractor
-      );
-      assertTrue(
-            xlsExtractor.getText().length() > 200
-      );
-      xlsExtractor.close();
-
-      POITextExtractor extractor = ExtractorFactory.createExtractor(xlsx);
-      assertTrue(
-            extractor
-            instanceof XSSFExcelExtractor
-      );
-      extractor.close();
-
-      extractor = ExtractorFactory.createExtractor(xlsx);
-      assertTrue(
-            extractor.getText().length() > 200
-      );
-      extractor.close();
-
-      extractor = ExtractorFactory.createExtractor(xltx);
-      assertTrue(
-            extractor
-            instanceof XSSFExcelExtractor
-      );
-      extractor.close();
-
-      extractor = ExtractorFactory.createExtractor(xltx);
-      assertTrue(
-            extractor.getText().contains("test")
-      );
-      extractor.close();
-
-
-      // Word
-      assertTrue(
-            ExtractorFactory.createExtractor(doc)
-            instanceof WordExtractor
-      );
-      assertTrue(
-            ExtractorFactory.createExtractor(doc).getText().length() > 120
-      );
-
-      assertTrue(
-            ExtractorFactory.createExtractor(doc6)
-            instanceof Word6Extractor
-      );
-      assertTrue(
-            ExtractorFactory.createExtractor(doc6).getText().length() > 20
-      );
-      
-      assertTrue(
-            ExtractorFactory.createExtractor(doc95)
-            instanceof Word6Extractor
-      );
-      assertTrue(
-            ExtractorFactory.createExtractor(doc95).getText().length() > 120
-      );
-          
-      extractor = ExtractorFactory.createExtractor(docx);
-      assertTrue(
-            extractor instanceof XWPFWordExtractor
-      );
-      extractor.close();
-      
-      extractor = ExtractorFactory.createExtractor(docx);
-      assertTrue(
-            extractor.getText().length() > 120
-      );
-      extractor.close();
-
-      extractor = ExtractorFactory.createExtractor(dotx);
-      assertTrue(
-            extractor instanceof XWPFWordExtractor
-      );
-      extractor.close();
-      
-      extractor = ExtractorFactory.createExtractor(dotx);
-      assertTrue(
-            extractor.getText().contains("Test")
-      );
-      extractor.close();
-
-      // PowerPoint
-      assertTrue(
-            ExtractorFactory.createExtractor(ppt)
-            instanceof PowerPointExtractor
-      );
-      assertTrue(
-            ExtractorFactory.createExtractor(ppt).getText().length() > 120
-      );
-
-      extractor = ExtractorFactory.createExtractor(pptx);
-      assertTrue(
-            extractor
-            instanceof XSLFPowerPointExtractor
-      );
-      extractor.close();
-
-      extractor = ExtractorFactory.createExtractor(pptx);
-      assertTrue(
-            extractor.getText().length() > 120
-      );
-      extractor.close();
-
-      // Visio
-      assertTrue(
-            ExtractorFactory.createExtractor(vsd)
-            instanceof VisioTextExtractor
-      );
-      assertTrue(
-            ExtractorFactory.createExtractor(vsd).getText().length() > 50
-      );
-      
-      // Publisher
-      assertTrue(
-            ExtractorFactory.createExtractor(pub)
-            instanceof PublisherTextExtractor
-      );
-      assertTrue(
-            ExtractorFactory.createExtractor(pub).getText().length() > 50
-      );
-      
-      // Outlook msg
-      assertTrue(
-            ExtractorFactory.createExtractor(msg)
-            instanceof OutlookTextExtactor
-      );
-      assertTrue(
-            ExtractorFactory.createExtractor(msg).getText().length() > 50
-      );
-
-      // Text
-      try {
-         ExtractorFactory.createExtractor(txt);
-         fail();
-      } catch(IllegalArgumentException e) {
-         // Good
-      }
-	}
-	
-	public void testInputStream() throws Exception {
-		// Excel
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(xls))
-				instanceof ExcelExtractor
-		);
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(xls)).getText().length() > 200
-		);
-		
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(xlsx))
-				instanceof XSSFExcelExtractor
-		);
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(xlsx)).getText().length() > 200
-		);
-		
-		// Word
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(doc))
-				instanceof WordExtractor
-		);
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(doc)).getText().length() > 120
-		);
-		
         assertTrue(
                 ExtractorFactory.createExtractor(new FileInputStream(doc6))
                 instanceof Word6Extractor
@@ -300,7 +339,7 @@ public class TestExtractorFactory extend
         assertTrue(
                 ExtractorFactory.createExtractor(new FileInputStream(doc6)).getText().length() > 20
         );
-        
+
         assertTrue(
                 ExtractorFactory.createExtractor(new FileInputStream(doc95))
                 instanceof Word6Extractor
@@ -308,92 +347,99 @@ public class TestExtractorFactory extend
         assertTrue(
                 ExtractorFactory.createExtractor(new FileInputStream(doc95)).getText().length() > 120
         );
-        
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(docx))
-				instanceof XWPFWordExtractor
-		);
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(docx)).getText().length() > 120
-		);
-		
-		// PowerPoint
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(ppt))
-				instanceof PowerPointExtractor
-		);
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(ppt)).getText().length() > 120
-		);
-		
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(pptx))
-				instanceof XSLFPowerPointExtractor
-		);
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(pptx)).getText().length() > 120
-		);
-		
-		// Visio
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(vsd))
-				instanceof VisioTextExtractor
-		);
-		assertTrue(
-				ExtractorFactory.createExtractor(new FileInputStream(vsd)).getText().length() > 50
-		);
-		
-      // Publisher
-      assertTrue(
-            ExtractorFactory.createExtractor(new FileInputStream(pub))
-            instanceof PublisherTextExtractor
-      );
-      assertTrue(
-            ExtractorFactory.createExtractor(new FileInputStream(pub)).getText().length() > 50
-      );
-      
-		// Outlook msg
-      assertTrue(
-            ExtractorFactory.createExtractor(new FileInputStream(msg))
-            instanceof OutlookTextExtactor
-      );
-      assertTrue(
-            ExtractorFactory.createExtractor(new FileInputStream(msg)).getText().length() > 50
-      );
-		
-		// Text
-		try {
-			FileInputStream stream = new FileInputStream(txt);
-			try {
+
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(docx))
+                instanceof XWPFWordExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(docx)).getText().length() > 120
+        );
+
+        // PowerPoint
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(ppt))
+                instanceof PowerPointExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(ppt)).getText().length() > 120
+        );
+
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(pptx))
+                instanceof XSLFPowerPointExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(pptx)).getText().length() > 120
+        );
+
+        // Visio
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(vsd))
+                instanceof VisioTextExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(vsd)).getText().length() > 50
+        );
+        // Visio - vsdx
+        try {
+            ExtractorFactory.createExtractor(new FileInputStream(vsdx));
+            fail();
+        } catch(IllegalArgumentException e) {
+            // Good
+        }
+
+        // Publisher
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(pub))
+                instanceof PublisherTextExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(pub)).getText().length() > 50
+        );
+
+        // Outlook msg
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(msg))
+                instanceof OutlookTextExtactor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new FileInputStream(msg)).getText().length() > 50
+        );
+
+        // Text
+        try {
+            FileInputStream stream = new FileInputStream(txt);
+            try {
                 ExtractorFactory.createExtractor(stream);
-    			fail();
-			} finally {
-			    stream.close();
-			}
-		} catch(IllegalArgumentException e) {
-			// Good
-		}
-	}
-	
-	public void testPOIFS() throws Exception {
-		// Excel
-		assertTrue(
-				ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)))
-				instanceof ExcelExtractor
-		);
-		assertTrue(
-				ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls))).getText().length() > 200
-		);
-		
-		// Word
-		assertTrue(
-				ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(doc)))
-				instanceof WordExtractor
-		);
-		assertTrue(
-				ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(doc))).getText().length() > 120
-		);
-		
+                fail();
+            } finally {
+                stream.close();
+            }
+        } catch(IllegalArgumentException e) {
+            // Good
+        }
+    }
+
+    public void testPOIFS() throws Exception {
+        // Excel
+        assertTrue(
+                ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)))
+                instanceof ExcelExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls))).getText().length() > 200
+        );
+
+        // Word
+        assertTrue(
+                ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(doc)))
+                instanceof WordExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(doc))).getText().length() > 120
+        );
+
         assertTrue(
                 ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(doc6)))
                 instanceof Word6Extractor
@@ -401,7 +447,7 @@ public class TestExtractorFactory extend
         assertTrue(
                 ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(doc6))).getText().length() > 20
         );
-        
+
         assertTrue(
                 ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(doc95)))
                 instanceof Word6Extractor
@@ -409,297 +455,297 @@ public class TestExtractorFactory extend
         assertTrue(
                 ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(doc95))).getText().length() > 120
         );
-        
-		// PowerPoint
-		assertTrue(
-				ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(ppt)))
-				instanceof PowerPointExtractor
-		);
-		assertTrue(
-				ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(ppt))).getText().length() > 120
-		);
-		
-		// Visio
-		assertTrue(
-				ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(vsd)))
-				instanceof VisioTextExtractor
-		);
-		assertTrue(
-				ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(vsd))).getText().length() > 50
-		);
-      
-      // Publisher
-      assertTrue(
-            ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(pub)))
-            instanceof PublisherTextExtractor
-      );
-      assertTrue(
-            ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(pub))).getText().length() > 50
-      );
-		
-      // Outlook msg
-      assertTrue(
-            ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(msg)))
-            instanceof OutlookTextExtactor
-      );
-      assertTrue(
-            ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(msg))).getText().length() > 50
-      );
-      
-		// Text
-		try {
-			ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(txt)));
-			fail();
-		} catch(IOException e) {
-			// Good
-		}
-	}
-	
-	public void testPackage() throws Exception {
-		// Excel
-		POIXMLTextExtractor extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString(), PackageAccess.READ));
-        assertTrue(
-				extractor
-				instanceof XSSFExcelExtractor
-		);
+
+        // PowerPoint
+        assertTrue(
+                ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(ppt)))
+                instanceof PowerPointExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(ppt))).getText().length() > 120
+        );
+
+        // Visio
+        assertTrue(
+                ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(vsd)))
+                instanceof VisioTextExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(vsd))).getText().length() > 50
+        );
+
+        // Publisher
+        assertTrue(
+                ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(pub)))
+                instanceof PublisherTextExtractor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(pub))).getText().length() > 50
+        );
+
+        // Outlook msg
+        assertTrue(
+                ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(msg)))
+                instanceof OutlookTextExtactor
+        );
+        assertTrue(
+                ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(msg))).getText().length() > 50
+        );
+
+        // Text
+        try {
+            ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(txt)));
+            fail();
+        } catch(IOException e) {
+            // Good
+        }
+    }
+
+    public void testPackage() throws Exception {
+        // Excel
+        POIXMLTextExtractor extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString(), PackageAccess.READ));
+        assertTrue(
+                extractor
+                instanceof XSSFExcelExtractor
+        );
         extractor.close();
-		extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString()));
+        extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString()));
         assertTrue(extractor.getText().length() > 200);
         extractor.close();
-		
-		// Word
-		extractor = ExtractorFactory.createExtractor(OPCPackage.open(docx.toString()));
-        assertTrue(
-				extractor
-				instanceof XWPFWordExtractor
-		);
-        extractor.close();
-        
-		extractor = ExtractorFactory.createExtractor(OPCPackage.open(docx.toString()));
-        assertTrue(
-				extractor.getText().length() > 120
-		);
-        extractor.close();
-		
-		// PowerPoint
-		extractor = ExtractorFactory.createExtractor(OPCPackage.open(pptx.toString()));
-        assertTrue(
-				extractor
-				instanceof XSLFPowerPointExtractor
-		);
-        extractor.close();
-
-		extractor = ExtractorFactory.createExtractor(OPCPackage.open(pptx.toString()));
-        assertTrue(
-				extractor.getText().length() > 120
-		);
-        extractor.close();
-		
-		// Text
-		try {
-			ExtractorFactory.createExtractor(OPCPackage.open(txt.toString()));
-			fail();
-		} catch(InvalidOperationException e) {
-			// Good
-		}
-	}
-	
-	public void testPreferEventBased() throws Exception {
-	   assertFalse(ExtractorFactory.getPreferEventExtractor());
-	   assertFalse(ExtractorFactory.getThreadPrefersEventExtractors());
-	   assertNull(ExtractorFactory.getAllThreadsPreferEventExtractors());
-	   
-	   ExtractorFactory.setThreadPrefersEventExtractors(true);
-	   
-      assertTrue(ExtractorFactory.getPreferEventExtractor());
-      assertTrue(ExtractorFactory.getThreadPrefersEventExtractors());
-      assertNull(ExtractorFactory.getAllThreadsPreferEventExtractors());
-      
-      ExtractorFactory.setAllThreadsPreferEventExtractors(false);
-      
-      assertFalse(ExtractorFactory.getPreferEventExtractor());
-      assertTrue(ExtractorFactory.getThreadPrefersEventExtractors());
-      assertEquals(Boolean.FALSE, ExtractorFactory.getAllThreadsPreferEventExtractors());
-      
-      ExtractorFactory.setAllThreadsPreferEventExtractors(null);
-      
-      assertTrue(ExtractorFactory.getPreferEventExtractor());
-      assertTrue(ExtractorFactory.getThreadPrefersEventExtractors());
-      assertNull(ExtractorFactory.getAllThreadsPreferEventExtractors());
-      
-      
-      // Check we get the right extractors now
-      POITextExtractor extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
-      assertTrue(
-            extractor
-            instanceof EventBasedExcelExtractor
-      );
-      extractor.close();
-      extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
-      assertTrue(
-            extractor.getText().length() > 200
-      );
-      extractor.close();
-      
-      extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString(), PackageAccess.READ));
-      assertTrue(extractor instanceof XSSFEventBasedExcelExtractor);
-      extractor.close();
-
-      extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString(), PackageAccess.READ));
-      assertTrue(
-            extractor.getText().length() > 200
-      );
-      extractor.close();
-      
-      
-      // Put back to normal
-      ExtractorFactory.setThreadPrefersEventExtractors(false);
-      assertFalse(ExtractorFactory.getPreferEventExtractor());
-      assertFalse(ExtractorFactory.getThreadPrefersEventExtractors());
-      assertNull(ExtractorFactory.getAllThreadsPreferEventExtractors());
-      
-      // And back
-      extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
-      assertTrue(
-            extractor
-            instanceof ExcelExtractor
-      );
-      extractor.close();
-      extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
-      assertTrue(
-            extractor.getText().length() > 200
-      );
-      extractor.close();
-      
-      extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString(), PackageAccess.READ));
-      assertTrue(
-            extractor
-            instanceof XSSFExcelExtractor
-      );
-      extractor.close();
-      extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString()));
-      assertTrue(
-            extractor.getText().length() > 200
-      );
-      extractor.close();
-	}
-
-   /**
-    * Test embeded docs text extraction. For now, only
-    *  does poifs embeded, but will do ooxml ones 
-    *  at some point.
-    */
-   public void testEmbeded() throws Exception {
-      POIOLE2TextExtractor ext;
-      POITextExtractor[] embeds;
-
-      // No embedings
-      ext = (POIOLE2TextExtractor)
-      ExtractorFactory.createExtractor(xls);
-      embeds = ExtractorFactory.getEmbededDocsTextExtractors(ext);
-      assertEquals(0, embeds.length);
-
-      // Excel
-      ext = (POIOLE2TextExtractor)
-      ExtractorFactory.createExtractor(xlsEmb);
-      embeds = ExtractorFactory.getEmbededDocsTextExtractors(ext);
-
-      assertEquals(6, embeds.length);
-      int numWord = 0, numXls = 0, numPpt = 0, numMsg = 0, numWordX;
-      for(int i=0; i<embeds.length; i++) {
-         assertTrue(embeds[i].getText().length() > 20);
-
-         if(embeds[i] instanceof PowerPointExtractor) numPpt++;
-         else if(embeds[i] instanceof ExcelExtractor) numXls++;
-         else if(embeds[i] instanceof WordExtractor) numWord++;
-         else if(embeds[i] instanceof OutlookTextExtactor) numMsg++;
-      }
-      assertEquals(2, numPpt);
-      assertEquals(2, numXls);
-      assertEquals(2, numWord);
-      assertEquals(0, numMsg);
-
-      // Word
-      ext = (POIOLE2TextExtractor)
-      ExtractorFactory.createExtractor(docEmb);
-      embeds = ExtractorFactory.getEmbededDocsTextExtractors(ext);
-
-      numWord = 0; numXls = 0; numPpt = 0; numMsg = 0;
-      assertEquals(4, embeds.length);
-      for(int i=0; i<embeds.length; i++) {
-         assertTrue(embeds[i].getText().length() > 20);
-         if(embeds[i] instanceof PowerPointExtractor) numPpt++;
-         else if(embeds[i] instanceof ExcelExtractor) numXls++;
-         else if(embeds[i] instanceof WordExtractor) numWord++;
-         else if(embeds[i] instanceof OutlookTextExtactor) numMsg++;
-      }
-      assertEquals(1, numPpt);
-      assertEquals(2, numXls);
-      assertEquals(1, numWord);
-      assertEquals(0, numMsg);
-      
-      // Word which contains an OOXML file
-      ext = (POIOLE2TextExtractor)
-      ExtractorFactory.createExtractor(docEmbOOXML);
-      embeds = ExtractorFactory.getEmbededDocsTextExtractors(ext);
-
-      numWord = 0; numXls = 0; numPpt = 0; numMsg = 0; numWordX = 0;
-      assertEquals(3, embeds.length);
-      for(int i=0; i<embeds.length; i++) {
-         assertTrue(embeds[i].getText().length() > 20);
-         if(embeds[i] instanceof PowerPointExtractor) numPpt++;
-         else if(embeds[i] instanceof ExcelExtractor) numXls++;
-         else if(embeds[i] instanceof WordExtractor) numWord++;
-         else if(embeds[i] instanceof OutlookTextExtactor) numMsg++;
-         else if(embeds[i] instanceof XWPFWordExtractor) numWordX++;
-      }
-      assertEquals(1, numPpt);
-      assertEquals(1, numXls);
-      assertEquals(0, numWord);
-      assertEquals(1, numWordX);
-      assertEquals(0, numMsg);
-      
-      // Outlook
-      ext = (OutlookTextExtactor)
-      ExtractorFactory.createExtractor(msgEmb);
-      embeds = ExtractorFactory.getEmbededDocsTextExtractors(ext);
-
-      numWord = 0; numXls = 0; numPpt = 0; numMsg = 0;
-      assertEquals(1, embeds.length);
-      for(int i=0; i<embeds.length; i++) {
-         assertTrue(embeds[i].getText().length() > 20);
-         if(embeds[i] instanceof PowerPointExtractor) numPpt++;
-         else if(embeds[i] instanceof ExcelExtractor) numXls++;
-         else if(embeds[i] instanceof WordExtractor) numWord++;
-         else if(embeds[i] instanceof OutlookTextExtactor) numMsg++;
-      }
-      assertEquals(0, numPpt);
-      assertEquals(0, numXls);
-      assertEquals(1, numWord);
-      assertEquals(0, numMsg);
-      
-      // Outlook with another outlook file in it
-      ext = (OutlookTextExtactor)
-      ExtractorFactory.createExtractor(msgEmbMsg);
-      embeds = ExtractorFactory.getEmbededDocsTextExtractors(ext);
-
-      numWord = 0; numXls = 0; numPpt = 0; numMsg = 0;
-      assertEquals(1, embeds.length);
-      for(int i=0; i<embeds.length; i++) {
-         assertTrue(embeds[i].getText().length() > 20);
-         if(embeds[i] instanceof PowerPointExtractor) numPpt++;
-         else if(embeds[i] instanceof ExcelExtractor) numXls++;
-         else if(embeds[i] instanceof WordExtractor) numWord++;
-         else if(embeds[i] instanceof OutlookTextExtactor) numMsg++;
-      }
-      assertEquals(0, numPpt);
-      assertEquals(0, numXls);
-      assertEquals(0, numWord);
-      assertEquals(1, numMsg);
-      
-
-      // TODO - PowerPoint
-      // TODO - Publisher
-      // TODO - Visio
-   }
+
+        // Word
+        extractor = ExtractorFactory.createExtractor(OPCPackage.open(docx.toString()));
+        assertTrue(
+                extractor
+                instanceof XWPFWordExtractor
+        );
+        extractor.close();
+
+        extractor = ExtractorFactory.createExtractor(OPCPackage.open(docx.toString()));
+        assertTrue(
+                extractor.getText().length() > 120
+        );
+        extractor.close();
+
+        // PowerPoint
+        extractor = ExtractorFactory.createExtractor(OPCPackage.open(pptx.toString()));
+        assertTrue(
+                extractor
+                instanceof XSLFPowerPointExtractor
+        );
+        extractor.close();
+
+        extractor = ExtractorFactory.createExtractor(OPCPackage.open(pptx.toString()));
+        assertTrue(
+                extractor.getText().length() > 120
+        );
+        extractor.close();
+
+        // Text
+        try {
+            ExtractorFactory.createExtractor(OPCPackage.open(txt.toString()));
+            fail();
+        } catch(InvalidOperationException e) {
+            // Good
+        }
+    }
+
+    public void testPreferEventBased() throws Exception {
+        assertFalse(ExtractorFactory.getPreferEventExtractor());
+        assertFalse(ExtractorFactory.getThreadPrefersEventExtractors());
+        assertNull(ExtractorFactory.getAllThreadsPreferEventExtractors());
+
+        ExtractorFactory.setThreadPrefersEventExtractors(true);
+
+        assertTrue(ExtractorFactory.getPreferEventExtractor());
+        assertTrue(ExtractorFactory.getThreadPrefersEventExtractors());
+        assertNull(ExtractorFactory.getAllThreadsPreferEventExtractors());
+
+        ExtractorFactory.setAllThreadsPreferEventExtractors(false);
+
+        assertFalse(ExtractorFactory.getPreferEventExtractor());
+        assertTrue(ExtractorFactory.getThreadPrefersEventExtractors());
+        assertEquals(Boolean.FALSE, ExtractorFactory.getAllThreadsPreferEventExtractors());
+
+        ExtractorFactory.setAllThreadsPreferEventExtractors(null);
+
+        assertTrue(ExtractorFactory.getPreferEventExtractor());
+        assertTrue(ExtractorFactory.getThreadPrefersEventExtractors());
+        assertNull(ExtractorFactory.getAllThreadsPreferEventExtractors());
+
+
+        // Check we get the right extractors now
+        POITextExtractor extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
+        assertTrue(
+                extractor
+                instanceof EventBasedExcelExtractor
+        );
+        extractor.close();
+        extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
+        assertTrue(
+                extractor.getText().length() > 200
+        );
+        extractor.close();
+
+        extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString(), PackageAccess.READ));
+        assertTrue(extractor instanceof XSSFEventBasedExcelExtractor);
+        extractor.close();
+
+        extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString(), PackageAccess.READ));
+        assertTrue(
+                extractor.getText().length() > 200
+        );
+        extractor.close();
+
+
+        // Put back to normal
+        ExtractorFactory.setThreadPrefersEventExtractors(false);
+        assertFalse(ExtractorFactory.getPreferEventExtractor());
+        assertFalse(ExtractorFactory.getThreadPrefersEventExtractors());
+        assertNull(ExtractorFactory.getAllThreadsPreferEventExtractors());
+
+        // And back
+        extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
+        assertTrue(
+                extractor
+                instanceof ExcelExtractor
+        );
+        extractor.close();
+        extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
+        assertTrue(
+                extractor.getText().length() > 200
+        );
+        extractor.close();
+
+        extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString(), PackageAccess.READ));
+        assertTrue(
+                extractor
+                instanceof XSSFExcelExtractor
+        );
+        extractor.close();
+        extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString()));
+        assertTrue(
+                extractor.getText().length() > 200
+        );
+        extractor.close();
+    }
+
+    /**
+     * Test embeded docs text extraction. For now, only
+     *  does poifs embeded, but will do ooxml ones 
+     *  at some point.
+     */
+    public void testEmbeded() throws Exception {
+        POIOLE2TextExtractor ext;
+        POITextExtractor[] embeds;
+
+        // No embedings
+        ext = (POIOLE2TextExtractor)
+                ExtractorFactory.createExtractor(xls);
+        embeds = ExtractorFactory.getEmbededDocsTextExtractors(ext);
+        assertEquals(0, embeds.length);
+
+        // Excel
+        ext = (POIOLE2TextExtractor)
+                ExtractorFactory.createExtractor(xlsEmb);
+        embeds = ExtractorFactory.getEmbededDocsTextExtractors(ext);
+
+        assertEquals(6, embeds.length);
+        int numWord = 0, numXls = 0, numPpt = 0, numMsg = 0, numWordX;
+        for(int i=0; i<embeds.length; i++) {
+            assertTrue(embeds[i].getText().length() > 20);
+
+            if(embeds[i] instanceof PowerPointExtractor) numPpt++;
+            else if(embeds[i] instanceof ExcelExtractor) numXls++;
+            else if(embeds[i] instanceof WordExtractor) numWord++;
+            else if(embeds[i] instanceof OutlookTextExtactor) numMsg++;
+        }
+        assertEquals(2, numPpt);
+        assertEquals(2, numXls);
+        assertEquals(2, numWord);
+        assertEquals(0, numMsg);
+
+        // Word
+        ext = (POIOLE2TextExtractor)
+                ExtractorFactory.createExtractor(docEmb);
+        embeds = ExtractorFactory.getEmbededDocsTextExtractors(ext);
+
+        numWord = 0; numXls = 0; numPpt = 0; numMsg = 0;
+        assertEquals(4, embeds.length);
+        for(int i=0; i<embeds.length; i++) {
+            assertTrue(embeds[i].getText().length() > 20);
+            if(embeds[i] instanceof PowerPointExtractor) numPpt++;
+            else if(embeds[i] instanceof ExcelExtractor) numXls++;
+            else if(embeds[i] instanceof WordExtractor) numWord++;
+            else if(embeds[i] instanceof OutlookTextExtactor) numMsg++;
+        }
+        assertEquals(1, numPpt);
+        assertEquals(2, numXls);
+        assertEquals(1, numWord);
+        assertEquals(0, numMsg);
+
+        // Word which contains an OOXML file
+        ext = (POIOLE2TextExtractor)
+                ExtractorFactory.createExtractor(docEmbOOXML);
+        embeds = ExtractorFactory.getEmbededDocsTextExtractors(ext);
+
+        numWord = 0; numXls = 0; numPpt = 0; numMsg = 0; numWordX = 0;
+        assertEquals(3, embeds.length);
+        for(int i=0; i<embeds.length; i++) {
+            assertTrue(embeds[i].getText().length() > 20);
+            if(embeds[i] instanceof PowerPointExtractor) numPpt++;
+            else if(embeds[i] instanceof ExcelExtractor) numXls++;
+            else if(embeds[i] instanceof WordExtractor) numWord++;
+            else if(embeds[i] instanceof OutlookTextExtactor) numMsg++;
+            else if(embeds[i] instanceof XWPFWordExtractor) numWordX++;
+        }
+        assertEquals(1, numPpt);
+        assertEquals(1, numXls);
+        assertEquals(0, numWord);
+        assertEquals(1, numWordX);
+        assertEquals(0, numMsg);
+
+        // Outlook
+        ext = (OutlookTextExtactor)
+                ExtractorFactory.createExtractor(msgEmb);
+        embeds = ExtractorFactory.getEmbededDocsTextExtractors(ext);
+
+        numWord = 0; numXls = 0; numPpt = 0; numMsg = 0;
+        assertEquals(1, embeds.length);
+        for(int i=0; i<embeds.length; i++) {
+            assertTrue(embeds[i].getText().length() > 20);
+            if(embeds[i] instanceof PowerPointExtractor) numPpt++;
+            else if(embeds[i] instanceof ExcelExtractor) numXls++;
+            else if(embeds[i] instanceof WordExtractor) numWord++;
+            else if(embeds[i] instanceof OutlookTextExtactor) numMsg++;
+        }
+        assertEquals(0, numPpt);
+        assertEquals(0, numXls);
+        assertEquals(1, numWord);
+        assertEquals(0, numMsg);
+
+        // Outlook with another outlook file in it
+        ext = (OutlookTextExtactor)
+                ExtractorFactory.createExtractor(msgEmbMsg);
+        embeds = ExtractorFactory.getEmbededDocsTextExtractors(ext);
+
+        numWord = 0; numXls = 0; numPpt = 0; numMsg = 0;
+        assertEquals(1, embeds.length);
+        for(int i=0; i<embeds.length; i++) {
+            assertTrue(embeds[i].getText().length() > 20);
+            if(embeds[i] instanceof PowerPointExtractor) numPpt++;
+            else if(embeds[i] instanceof ExcelExtractor) numXls++;
+            else if(embeds[i] instanceof WordExtractor) numWord++;
+            else if(embeds[i] instanceof OutlookTextExtactor) numMsg++;
+        }
+        assertEquals(0, numPpt);
+        assertEquals(0, numXls);
+        assertEquals(0, numWord);
+        assertEquals(1, numMsg);
+
+
+        // TODO - PowerPoint
+        // TODO - Publisher
+        // TODO - Visio
+    }
 }

Modified: poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/openxml4j/opc/AllOpenXML4JTests.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/openxml4j/opc/AllOpenXML4JTests.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/openxml4j/opc/AllOpenXML4JTests.java (original)
+++ poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/openxml4j/opc/AllOpenXML4JTests.java Sun Jul 19 19:00:32 2015
@@ -17,28 +17,24 @@
 
 package org.apache.poi.openxml4j.opc;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.apache.poi.openxml4j.opc.compliance.AllOpenXML4JComplianceTests;
 import org.apache.poi.openxml4j.opc.internal.AllOpenXML4JInternalTests;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
 
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+      TestContentType.class
+    , TestFileHelper.class
+    , TestListParts.class
+    , TestPackage.class
+    , TestPackageCoreProperties.class
+    , TestPackagePartName.class
+    , TestPackageThumbnail.class
+    , TestPackagingURIHelper.class
+    , TestRelationships.class
+    , AllOpenXML4JComplianceTests.class
+    , AllOpenXML4JInternalTests.class
+})
 public final class AllOpenXML4JTests {
-
-	public static Test suite() {
-
-		TestSuite suite = new TestSuite(AllOpenXML4JTests.class.getName());
-		suite.addTestSuite(TestContentType.class);
-		suite.addTestSuite(TestFileHelper.class);
-		suite.addTestSuite(TestListParts.class);
-		suite.addTestSuite(TestPackage.class);
-		suite.addTestSuite(TestPackageCoreProperties.class);
-		suite.addTestSuite(TestPackagePartName.class);
-		suite.addTestSuite(TestPackageThumbnail.class);
-		suite.addTestSuite(TestPackagingURIHelper.class);
-		suite.addTestSuite(TestRelationships.class);
-		suite.addTest(AllOpenXML4JComplianceTests.suite());
-		suite.addTest(AllOpenXML4JInternalTests.suite());
-		return suite;
-	}
 }

Modified: poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java (original)
+++ poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java Sun Jul 19 19:00:32 2015
@@ -17,6 +17,14 @@
 
 package org.apache.poi.openxml4j.opc;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -25,35 +33,47 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
 import java.net.URI;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.List;
 import java.util.TreeMap;
 import java.util.regex.Pattern;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipOutputStream;
 
-import junit.framework.TestCase;
-
+import org.apache.poi.POIXMLException;
 import org.apache.poi.openxml4j.OpenXML4JTestDataSamples;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.openxml4j.exceptions.InvalidOperationException;
 import org.apache.poi.openxml4j.opc.internal.ContentTypeManager;
 import org.apache.poi.openxml4j.opc.internal.FileHelper;
 import org.apache.poi.openxml4j.opc.internal.PackagePropertiesPart;
+import org.apache.poi.openxml4j.opc.internal.ZipHelper;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.apache.poi.util.DocumentHelper;
+import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
 import org.apache.poi.util.TempFile;
+import org.junit.Ignore;
+import org.junit.Test;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
-public final class TestPackage extends TestCase {
+public final class TestPackage {
     private static final POILogger logger = POILogFactory.getLogger(TestPackage.class);
 
 	/**
 	 * Test that just opening and closing the file doesn't alter the document.
 	 */
-	public void testOpenSave() throws Exception {
+    @Test
+	public void openSave() throws Exception {
 		String originalFile = OpenXML4JTestDataSamples.getSampleFileName("TestPackageCommon.docx");
 		File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageOpenSaveTMP.docx");
 
@@ -75,7 +95,8 @@ public final class TestPackage extends T
 	 * Test that when we create a new Package, we give it
 	 *  the correct default content types
 	 */
-	public void testCreateGetsContentTypes() throws Exception {
+    @Test
+	public void createGetsContentTypes() throws Exception {
 		File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestCreatePackageTMP.docx");
 
 		// Zap the target file, in case of an earlier run
@@ -107,7 +128,8 @@ public final class TestPackage extends T
 	/**
 	 * Test package creation.
 	 */
-	public void testCreatePackageAddPart() throws Exception {
+    @Test
+	public void createPackageAddPart() throws Exception {
 		File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestCreatePackageTMP.docx");
 
 		File expectedFile = OpenXML4JTestDataSamples.getSampleFile("TestCreatePackageOUTPUT.docx");
@@ -153,7 +175,8 @@ public final class TestPackage extends T
 	 *  document and another part, save and re-load and
 	 *  have everything setup as expected
 	 */
-	public void testCreatePackageWithCoreDocument() throws Exception {
+    @Test
+	public void createPackageWithCoreDocument() throws Exception {
 		ByteArrayOutputStream baos = new ByteArrayOutputStream();
 		OPCPackage pkg = OPCPackage.create(baos);
 
@@ -247,7 +270,8 @@ public final class TestPackage extends T
     /**
 	 * Test package opening.
 	 */
-	public void testOpenPackage() throws Exception {
+    @Test
+	public void openPackage() throws Exception {
 		File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestOpenPackageTMP.docx");
 
 		File inputFile = OpenXML4JTestDataSamples.getSampleFile("TestOpenPackageINPUT.docx");
@@ -306,7 +330,8 @@ public final class TestPackage extends T
 	 *  OutputStream, in addition to the normal writing
 	 *  to a file
 	 */
-	public void testSaveToOutputStream() throws Exception {
+    @Test
+	public void saveToOutputStream() throws Exception {
 		String originalFile = OpenXML4JTestDataSamples.getSampleFileName("TestPackageCommon.docx");
 		File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageOpenSaveTMP.docx");
 
@@ -334,7 +359,8 @@ public final class TestPackage extends T
 	 *  simple InputStream, in addition to the normal
 	 *  reading from a file
 	 */
-	public void testOpenFromInputStream() throws Exception {
+    @Test
+	public void openFromInputStream() throws Exception {
 		String originalFile = OpenXML4JTestDataSamples.getSampleFileName("TestPackageCommon.docx");
 
 		FileInputStream finp = new FileInputStream(originalFile);
@@ -353,7 +379,9 @@ public final class TestPackage extends T
     /**
      * TODO: fix and enable
      */
-    public void disabled_testRemovePartRecursive() throws Exception {
+    @Test
+    @Ignore
+    public void removePartRecursive() throws Exception {
 		String originalFile = OpenXML4JTestDataSamples.getSampleFileName("TestPackageCommon.docx");
 		File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageRemovePartRecursiveOUTPUT.docx");
 		File tempFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageRemovePartRecursiveTMP.docx");
@@ -369,7 +397,8 @@ public final class TestPackage extends T
 		assertTrue(targetFile.delete());
 	}
 
-	public void testDeletePart() throws InvalidFormatException {
+    @Test
+	public void deletePart() throws InvalidFormatException {
 		TreeMap<PackagePartName, String> expectedValues;
 		TreeMap<PackagePartName, String> values;
 
@@ -426,7 +455,8 @@ public final class TestPackage extends T
 		p.revert();
 	}
 
-	public void testDeletePartRecursive() throws InvalidFormatException {
+    @Test
+	public void deletePartRecursive() throws InvalidFormatException {
 		TreeMap<PackagePartName, String> expectedValues;
 		TreeMap<PackagePartName, String> values;
 
@@ -468,7 +498,8 @@ public final class TestPackage extends T
 	 * Test that we can open a file by path, and then
 	 *  write changes to it.
 	 */
-	public void testOpenFileThenOverwrite() throws Exception {
+    @Test
+	public void openFileThenOverwrite() throws Exception {
         File tempFile = TempFile.createTempFile("poiTesting","tmp");
         File origFile = OpenXML4JTestDataSamples.getSampleFile("TestPackageCommon.docx");
         FileHelper.copyFile(origFile, tempFile);
@@ -505,7 +536,8 @@ public final class TestPackage extends T
      * Test that we can open a file by path, save it
      *  to another file, then delete both
      */
-    public void testOpenFileThenSaveDelete() throws Exception {
+    @Test
+    public void openFileThenSaveDelete() throws Exception {
         File tempFile = TempFile.createTempFile("poiTesting","tmp");
         File tempFile2 = TempFile.createTempFile("poiTesting","tmp");
         File origFile = OpenXML4JTestDataSamples.getSampleFile("TestPackageCommon.docx");
@@ -529,7 +561,8 @@ public final class TestPackage extends T
 		return (ContentTypeManager)f.get(pkg);
 	}
 
-    public void testGetPartsByName() throws Exception {
+    @Test
+    public void getPartsByName() throws Exception {
         String filepath =  OpenXML4JTestDataSamples.getSampleFileName("sample.docx");
 
         OPCPackage pkg = OPCPackage.open(filepath, PackageAccess.READ_WRITE);
@@ -553,7 +586,8 @@ public final class TestPackage extends T
         }
     }
     
-    public void testGetPartSize() throws Exception {
+    @Test
+    public void getPartSize() throws Exception {
        String filepath =  OpenXML4JTestDataSamples.getSampleFileName("sample.docx");
        OPCPackage pkg = OPCPackage.open(filepath, PackageAccess.READ);
        try {
@@ -585,7 +619,8 @@ public final class TestPackage extends T
        }
     }
 
-    public void testReplaceContentType() throws Exception {
+    @Test
+    public void replaceContentType() throws Exception {
         InputStream is = OpenXML4JTestDataSamples.openSampleStream("sample.xlsx");
         OPCPackage p = OPCPackage.open(is);
 
@@ -603,4 +638,131 @@ public final class TestPackage extends T
         assertFalse(mgr.isContentTypeRegister("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"));
         assertTrue(mgr.isContentTypeRegister("application/vnd.ms-excel.sheet.macroEnabled.main+xml"));
     }
+
+    @Test(expected=IOException.class)
+    public void zipBombCreateAndHandle() throws Exception {
+        // #50090 / #56865
+        ZipFile zipFile = ZipHelper.openZipFile(OpenXML4JTestDataSamples.getSampleFile("sample.xlsx"));
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ZipOutputStream append = new ZipOutputStream(bos);
+        // first, copy contents from existing war
+        Enumeration<? extends ZipEntry> entries = zipFile.entries();
+        while (entries.hasMoreElements()) {
+            ZipEntry e2 = entries.nextElement();
+            ZipEntry e = new ZipEntry(e2.getName());
+            e.setTime(e2.getTime());
+            e.setComment(e2.getComment());
+            e.setSize(e2.getSize());
+            
+            append.putNextEntry(e);
+            if (!e.isDirectory()) {
+                InputStream is = zipFile.getInputStream(e);
+                if (e.getName().equals("[Content_Types].xml")) {
+                    ByteArrayOutputStream bos2 = new ByteArrayOutputStream();
+                    IOUtils.copy(is, bos2);
+                    long size = bos2.size()-"</Types>".length();
+                    append.write(bos2.toByteArray(), 0, (int)size);
+                    byte spam[] = new byte[0x7FFF];
+                    for (int i=0; i<spam.length; i++) spam[i] = ' ';
+                    while (size < 0x7FFF0000) {
+                        append.write(spam);
+                        size += spam.length;
+                    }
+                    append.write("</Types>".getBytes());
+                    size += 8;
+                    e.setSize(size);
+                } else {
+                    IOUtils.copy(is, append);
+                }
+            }
+            append.closeEntry();
+        }
+        
+        append.close();
+        zipFile.close();
+
+        byte buf[] = bos.toByteArray();
+        bos = null;
+        
+        Workbook wb = WorkbookFactory.create(new ByteArrayInputStream(buf));
+        wb.getSheetAt(0);
+        wb.close();
+    }
+    
+    @Test
+    public void zipBombCheckSizes() throws Exception {
+        File file = OpenXML4JTestDataSamples.getSampleFile("sample.xlsx");
+
+        try {
+            double min_ratio = Double.MAX_VALUE;
+            long max_size = 0;
+            ZipFile zf = ZipHelper.openZipFile(file);
+            Enumeration<? extends ZipEntry> entries = zf.entries();
+            while (entries.hasMoreElements()) {
+                ZipEntry ze = entries.nextElement();
+                double ratio = (double)ze.getCompressedSize() / (double)ze.getSize();
+                min_ratio = Math.min(min_ratio, ratio);
+                max_size = Math.max(max_size, ze.getSize());
+            }
+            zf.close();
+    
+            // use values close to, but within the limits 
+            ZipSecureFile.setMinInflateRatio(min_ratio-0.002);
+            ZipSecureFile.setMaxEntrySize(max_size+1);
+            Workbook wb = WorkbookFactory.create(file, null, true);
+            wb.close();
+    
+            // check ratio out of bounds
+            ZipSecureFile.setMinInflateRatio(min_ratio+0.002);
+            try {
+                wb = WorkbookFactory.create(file, null, true);
+                wb.close();
+                // this is a bit strange, as there will be different exceptions thrown
+                // depending if this executed via "ant test" or within eclipse
+                // maybe a difference in JDK ...
+            } catch (InvalidFormatException e) {
+                checkForZipBombException(e);
+            } catch (POIXMLException e) {
+                checkForZipBombException(e);
+            }
+    
+            // check max entry size ouf of bounds
+            ZipSecureFile.setMinInflateRatio(min_ratio-0.002);
+            ZipSecureFile.setMaxEntrySize(max_size-1);
+            try {
+                wb = WorkbookFactory.create(file, null, true);
+                wb.close();
+            } catch (InvalidFormatException e) {
+                checkForZipBombException(e);
+            } catch (POIXMLException e) {
+                checkForZipBombException(e);
+            }
+        } finally {
+            // reset otherwise a lot of ooxml tests will fail
+            ZipSecureFile.setMinInflateRatio(0.01d);
+            ZipSecureFile.setMaxEntrySize(0xFFFFFFFFl);            
+        }
+    }
+
+    private void checkForZipBombException(Throwable e) {
+        if(e instanceof InvocationTargetException) {
+            InvocationTargetException t = (InvocationTargetException)e;
+            IOException t2 = (IOException)t.getTargetException();
+            if("Zip bomb detected! Exiting.".equals(t2.getMessage())) {
+                return;
+            }
+        }
+        
+        if ("Zip bomb detected! Exiting.".equals(e.getMessage())) {
+            return;
+        }
+        
+        // recursively check the causes for the message as it can be nested further down in the exception-tree
+        if(e.getCause() != null && e.getCause() != e) {
+            checkForZipBombException(e.getCause());
+            return;
+        }
+
+        throw new IllegalStateException("Expected to catch an Exception because of a detected Zip Bomb, but did not find the related error message in the exception", e);        
+    }
 }

Modified: poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java (original)
+++ poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java Sun Jul 19 19:00:32 2015
@@ -17,6 +17,10 @@
 
 package org.apache.poi.openxml4j.opc.compliance;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
@@ -34,6 +38,8 @@ import org.apache.poi.openxml4j.opc.OPCP
 import org.apache.poi.openxml4j.opc.PackageRelationshipTypes;
 import org.apache.poi.openxml4j.opc.PackagingURIHelper;
 import org.apache.poi.openxml4j.opc.TargetMode;
+import org.apache.poi.util.IOUtils;
+import org.apache.poi.util.TempFile;
 
 /**
  * Test core properties Open Packaging Convention compliance.
@@ -224,4 +230,90 @@ public final class TestOPCComplianceCore
 		String msg = extractInvalidFormatMessage("LimitedXSITypeAttribute_PresentWithUnauthorizedValueFAIL.docx");
 		assertEquals("The element 'modified' must have the 'xsi:type' attribute with the value 'dcterms:W3CDTF' !", msg);
 	}
+	
+    /**
+     * Document with no core properties - testing at the OPC level,
+     *  saving into a new stream
+     */
+    public void testNoCoreProperties_saveNew() throws Exception {
+        String sampleFileName = "OPCCompliance_NoCoreProperties.xlsx";
+        OPCPackage pkg = OPCPackage.open(POIDataSamples.getOpenXML4JInstance().getFile(sampleFileName).getPath());
+
+        // Verify it has empty properties
+        assertEquals(0, pkg.getPartsByContentType(ContentTypes.CORE_PROPERTIES_PART).size());
+        assertNotNull(pkg.getPackageProperties());
+        assertNotNull(pkg.getPackageProperties().getLanguageProperty());
+        assertNull(pkg.getPackageProperties().getLanguageProperty().getValue());
+
+        // Save and re-load
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        pkg.save(baos);
+        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+
+        pkg = OPCPackage.open(bais);
+
+        // An Empty Properties part has been added in the save/load
+        assertEquals(1, pkg.getPartsByContentType(ContentTypes.CORE_PROPERTIES_PART).size());
+        assertNotNull(pkg.getPackageProperties());
+        assertNotNull(pkg.getPackageProperties().getLanguageProperty());
+        assertNull(pkg.getPackageProperties().getLanguageProperty().getValue());
+        
+        
+        // Open a new copy of it
+        pkg = OPCPackage.open(POIDataSamples.getOpenXML4JInstance().getFile(sampleFileName).getPath());
+        
+        // Save and re-load, without having touched the properties yet
+        baos = new ByteArrayOutputStream();
+        pkg.save(baos);
+        bais = new ByteArrayInputStream(baos.toByteArray());
+        pkg = OPCPackage.open(bais);
+        
+        // Check that this too added empty properties without error
+        assertEquals(1, pkg.getPartsByContentType(ContentTypes.CORE_PROPERTIES_PART).size());
+        assertNotNull(pkg.getPackageProperties());
+        assertNotNull(pkg.getPackageProperties().getLanguageProperty());
+        assertNull(pkg.getPackageProperties().getLanguageProperty().getValue());
+    }
+
+    /**
+     * Document with no core properties - testing at the OPC level,
+     *  from a temp-file, saving in-place
+     */
+    public void testNoCoreProperties_saveInPlace() throws Exception {
+        String sampleFileName = "OPCCompliance_NoCoreProperties.xlsx";
+
+        // Copy this into a temp file, so we can play with it
+        File tmp = TempFile.createTempFile("poi-test", ".opc");
+        FileOutputStream out = new FileOutputStream(tmp);
+        IOUtils.copy(
+                POIDataSamples.getOpenXML4JInstance().openResourceAsStream(sampleFileName),
+                out);
+        out.close();
+
+        // Open it from that temp file
+        OPCPackage pkg = OPCPackage.open(tmp);
+
+        // Empty properties
+        assertEquals(0, pkg.getPartsByContentType(ContentTypes.CORE_PROPERTIES_PART).size());
+        assertNotNull(pkg.getPackageProperties());
+        assertNotNull(pkg.getPackageProperties().getLanguageProperty());
+        assertNull(pkg.getPackageProperties().getLanguageProperty().getValue());
+
+        // Save and close
+        pkg.close();
+
+
+        // Re-open and check
+        pkg = OPCPackage.open(tmp);
+
+        // An Empty Properties part has been added in the save/load
+        assertEquals(1, pkg.getPartsByContentType(ContentTypes.CORE_PROPERTIES_PART).size());
+        assertNotNull(pkg.getPackageProperties());
+        assertNotNull(pkg.getPackageProperties().getLanguageProperty());
+        assertNull(pkg.getPackageProperties().getLanguageProperty().getValue());
+
+        // Finish and tidy
+        pkg.revert();
+        tmp.delete();
+    }
 }

Modified: poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestEncryptor.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestEncryptor.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestEncryptor.java (original)
+++ poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestEncryptor.java Sun Jul 19 19:00:32 2015
@@ -18,6 +18,8 @@ package org.apache.poi.poifs.crypt;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.ByteArrayInputStream;
@@ -32,6 +34,8 @@ import java.util.Iterator;
 import javax.crypto.Cipher;
 
 import org.apache.poi.POIDataSamples;
+import org.apache.poi.openxml4j.opc.ContentTypes;
+import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.poifs.crypt.agile.AgileEncryptionHeader;
 import org.apache.poi.poifs.filesystem.DirectoryNode;
 import org.apache.poi.poifs.filesystem.DocumentNode;
@@ -107,7 +111,7 @@ public class TestEncryptor {
         long decPackLenExpected = decExpected.getLength();
         assertEquals(decPackLenExpected, payloadExpected.length);
 
-        is = nfs.getRoot().createDocumentInputStream("EncryptedPackage");
+        is = nfs.getRoot().createDocumentInputStream(Decryptor.DEFAULT_POIFS_ENTRY);
         is = new BoundedInputStream(is, is.available()-16); // ignore padding block
         byte encPackExpected[] = IOUtils.toByteArray(is);
         is.close();
@@ -159,7 +163,7 @@ public class TestEncryptor {
         
         long decPackLenActual = decActual.getLength();
         
-        is = nfs.getRoot().createDocumentInputStream("EncryptedPackage");
+        is = nfs.getRoot().createDocumentInputStream(Decryptor.DEFAULT_POIFS_ENTRY);
         is = new BoundedInputStream(is, is.available()-16); // ignore padding block
         byte encPackActual[] = IOUtils.toByteArray(is);
         is.close();
@@ -266,6 +270,55 @@ public class TestEncryptor {
         assertArrayEquals(payloadExpected, payloadActual);
     }
     
+    /**
+     * Ensure we can encrypt a package that is missing the Core
+     *  Properties, eg one from dodgy versions of Jasper Reports 
+     * See https://github.com/nestoru/xlsxenc/ and
+     * http://stackoverflow.com/questions/28593223
+     */
+    @Test
+    public void encryptPackageWithoutCoreProperties() throws Exception {
+        // Open our file without core properties
+        File inp = POIDataSamples.getOpenXML4JInstance().getFile("OPCCompliance_NoCoreProperties.xlsx");
+        OPCPackage pkg = OPCPackage.open(inp.getPath());
+        
+        // It doesn't have any core properties yet
+        assertEquals(0, pkg.getPartsByContentType(ContentTypes.CORE_PROPERTIES_PART).size());
+        assertNotNull(pkg.getPackageProperties());
+        assertNotNull(pkg.getPackageProperties().getLanguageProperty());
+        assertNull(pkg.getPackageProperties().getLanguageProperty().getValue());
+        
+        // Encrypt it
+        EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile);
+        NPOIFSFileSystem fs = new NPOIFSFileSystem();
+        
+        Encryptor enc = info.getEncryptor();
+        enc.confirmPassword("password");
+        OutputStream os = enc.getDataStream(fs);
+        pkg.save(os);
+        pkg.revert();
+        
+        // Save the resulting OLE2 document, and re-open it
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        fs.writeFilesystem(baos);
+        
+        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+        NPOIFSFileSystem inpFS = new NPOIFSFileSystem(bais);
+        
+        // Check we can decrypt it
+        info = new EncryptionInfo(inpFS);
+        Decryptor d = Decryptor.getInstance(info);
+        assertEquals(true, d.verifyPassword("password"));
+        
+        OPCPackage inpPkg = OPCPackage.open(d.getDataStream(inpFS));
+        
+        // Check it now has empty core properties
+        assertEquals(1, inpPkg.getPartsByContentType(ContentTypes.CORE_PROPERTIES_PART).size());
+        assertNotNull(inpPkg.getPackageProperties());
+        assertNotNull(inpPkg.getPackageProperties().getLanguageProperty());
+        assertNull(inpPkg.getPackageProperties().getLanguageProperty().getValue());
+    }
+    
     @Test
     @Ignore
     public void inPlaceRewrite() throws Exception {

Modified: poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java (original)
+++ poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java Sun Jul 19 19:00:32 2015
@@ -316,7 +316,7 @@ public class TestSignatureInfo {
         signatureConfig.addSignatureFacet(new XAdESXLSignatureFacet());
         
         // check for internet, no error means it works
-        boolean mockTsp = (getAccessError("http://timestamp.comodoca.com/rfc3161", true, 10000) == null);
+        boolean mockTsp = (getAccessError("http://timestamp.comodoca.com/rfc3161", true, 10000) != null);
         
         // http://timestamping.edelweb.fr/service/tsp
         // http://tsa.belgium.be/connect
@@ -382,11 +382,13 @@ public class TestSignatureInfo {
             si.confirmSignature();
         } catch (RuntimeException e) {
             // only allow a ConnectException because of timeout, we see this in Jenkins from time to time...
-            assertNotNull("Only allowing ConnectException here, but had: " + e, e.getCause());
+            if(e.getCause() == null) {
+                throw e;
+            }
             if(!(e.getCause() instanceof ConnectException)) {
                 throw e;
             }
-            assertTrue("Only allowing ConnectException here, but had: " + e, e.getCause().getMessage().contains("timed out"));
+            assertTrue("Only allowing ConnectException with 'timed out' as message here, but had: " + e, e.getCause().getMessage().contains("timed out"));
         }
         
         // verify

Modified: poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java (original)
+++ poi/branches/common_sl/src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java Sun Jul 19 19:00:32 2015
@@ -17,101 +17,282 @@
 
 package org.apache.poi.ss;
 
+import java.io.ByteArrayInputStream;
+import java.io.File;
 import java.io.InputStream;
 
+import org.apache.poi.EmptyFileException;
+import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.hssf.HSSFTestDataSamples;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.usermodel.WorkbookFactory;
+import org.apache.poi.util.TempFile;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.apache.poi.openxml4j.opc.OPCPackage;
 
 import junit.framework.TestCase;
 
 public final class TestWorkbookFactory extends TestCase {
-	private String xls;
-	private String xlsx;
-	private String txt;
-
-	protected void setUp() {
-		xls = "SampleSS.xls";
-		xlsx = "SampleSS.xlsx";
-		txt = "SampleSS.txt";
-	}
-
-	public void testCreateNative() throws Exception {
-		Workbook wb;
-
-		// POIFS -> hssf
-		wb = WorkbookFactory.create(
-				new POIFSFileSystem(HSSFTestDataSamples.openSampleFileStream(xls))
-		);
-		assertNotNull(wb);
-		assertTrue(wb instanceof HSSFWorkbook);
-		wb.close();
-
-		// Package -> xssf
-		wb = WorkbookFactory.create(
-				OPCPackage.open(
+    private String xls;
+    private String xlsx;
+    private String[] xls_prot;
+    private String[] xlsx_prot;
+    private String txt;
+
+    protected void setUp() {
+        xls = "SampleSS.xls";
+        xlsx = "SampleSS.xlsx";
+        xls_prot = new String[] {"password.xls", "password"};
+        xlsx_prot = new String[]{"protected_passtika.xlsx", "tika"};
+        txt = "SampleSS.txt";
+    }
+
+    public void testCreateNative() throws Exception {
+        Workbook wb;
+
+        // POIFS -> hssf
+        wb = WorkbookFactory.create(
+                new POIFSFileSystem(HSSFTestDataSamples.openSampleFileStream(xls))
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof HSSFWorkbook);
+        wb.close();
+
+        // Package -> xssf
+        wb = WorkbookFactory.create(
+                OPCPackage.open(
                         HSSFTestDataSamples.openSampleFileStream(xlsx))
-		);
-		assertNotNull(wb);
-		assertTrue(wb instanceof XSSFWorkbook);
-		// TODO: this re-writes the sample-file?! wb.close();
-	}
-
-	/**
-	 * Creates the appropriate kind of Workbook, but
-	 *  checking the mime magic at the start of the
-	 *  InputStream, then creating what's required.
-	 */
-	public void testCreateGeneric() throws Exception {
-		Workbook wb;
-
-		// InputStream -> either
-		wb = WorkbookFactory.create(
-				HSSFTestDataSamples.openSampleFileStream(xls)
-		);
-		assertNotNull(wb);
-		assertTrue(wb instanceof HSSFWorkbook);
-		wb.close();
-
-		wb = WorkbookFactory.create(
-				HSSFTestDataSamples.openSampleFileStream(xlsx)
-		);
-		assertNotNull(wb);
-		assertTrue(wb instanceof XSSFWorkbook);
-		// TODO: this re-writes the sample-file?! wb.close();
-		
-		// File -> either
-      wb = WorkbookFactory.create(
-            HSSFTestDataSamples.getSampleFile(xls)
-      );
-      assertNotNull(wb);
-      assertTrue(wb instanceof HSSFWorkbook);
-      wb.close();
-
-      wb = WorkbookFactory.create(
-            HSSFTestDataSamples.getSampleFile(xlsx)
-      );
-      assertNotNull(wb);
-      assertTrue(wb instanceof XSSFWorkbook);
-      
-      // TODO: close() re-writes the sample-file?! Resort to revert() for now to close file handle...
-      ((XSSFWorkbook)wb).getPackage().revert();
-
-		// Invalid type -> exception
-		try {
-			InputStream stream = HSSFTestDataSamples.openSampleFileStream(txt);
-			try {
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof XSSFWorkbook);
+        // TODO: this re-writes the sample-file?! wb.close();
+    }
+
+    public void testCreateReadOnly() throws Exception {
+        Workbook wb;
+
+        // POIFS -> hssf
+        wb = WorkbookFactory.create(HSSFTestDataSamples.getSampleFile(xls), null, true);
+        assertNotNull(wb);
+        assertTrue(wb instanceof HSSFWorkbook);
+        wb.close();
+
+        // Package -> xssf
+        wb = WorkbookFactory.create(HSSFTestDataSamples.getSampleFile(xlsx), null, true);
+        assertNotNull(wb);
+        assertTrue(wb instanceof XSSFWorkbook);
+        wb.close();
+    }
+
+    /**
+     * Creates the appropriate kind of Workbook, but
+     *  checking the mime magic at the start of the
+     *  InputStream, then creating what's required.
+     */
+    public void testCreateGeneric() throws Exception {
+        Workbook wb;
+
+        // InputStream -> either
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.openSampleFileStream(xls)
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof HSSFWorkbook);
+        wb.close();
+
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.openSampleFileStream(xlsx)
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof XSSFWorkbook);
+        // TODO: this re-writes the sample-file?! wb.close();
+
+        // File -> either
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.getSampleFile(xls)
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof HSSFWorkbook);
+        wb.close();
+
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.getSampleFile(xlsx)
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof XSSFWorkbook);
+
+        // TODO: close() re-writes the sample-file?! Resort to revert() for now to close file handle...
+        ((XSSFWorkbook)wb).getPackage().revert();
+
+        // Invalid type -> exception
+        try {
+            InputStream stream = HSSFTestDataSamples.openSampleFileStream(txt);
+            try {
                 wb = WorkbookFactory.create(stream);
-			} finally {
-			    stream.close();
-			}
-			fail();
-		} catch(IllegalArgumentException e) {
-			// Good
-		}
-	}
+            } finally {
+                stream.close();
+            }
+            fail();
+        } catch(IllegalArgumentException e) {
+            // Good
+        }
+    }
+
+    /**
+     * Check that the overloaded stream methods which take passwords work properly
+     */
+    public void testCreateWithPasswordFromStream() throws Exception {
+        Workbook wb;
+
+
+        // Unprotected, no password given, opens normally
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.openSampleFileStream(xls), null
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof HSSFWorkbook);
+        wb.close();
+
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.openSampleFileStream(xlsx), null
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof XSSFWorkbook);
+
+
+        // Unprotected, wrong password, opens normally
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.openSampleFileStream(xls), "wrong"
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof HSSFWorkbook);
+        wb.close();
+
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.openSampleFileStream(xlsx), "wrong"
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof XSSFWorkbook);
+
+
+        // Protected, correct password, opens fine
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.openSampleFileStream(xls_prot[0]), xls_prot[1]
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof HSSFWorkbook);
+        wb.close();
+
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.openSampleFileStream(xlsx_prot[0]), xlsx_prot[1]
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof XSSFWorkbook);
+
+
+        // Protected, wrong password, throws Exception
+        try {
+            wb = WorkbookFactory.create(
+                    HSSFTestDataSamples.openSampleFileStream(xls_prot[0]), "wrong"
+            );
+            fail("Shouldn't be able to open with the wrong password");
+        } catch (EncryptedDocumentException e) {}
+
+        try {
+            wb = WorkbookFactory.create(
+                    HSSFTestDataSamples.openSampleFileStream(xlsx_prot[0]), "wrong"
+            );
+            fail("Shouldn't be able to open with the wrong password");
+        } catch (EncryptedDocumentException e) {}
+    }
+
+    /**
+     * Check that the overloaded file methods which take passwords work properly
+     */
+    public void testCreateWithPasswordFromFile() throws Exception {
+        Workbook wb;
+
+        // Unprotected, no password given, opens normally
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.getSampleFile(xls), null
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof HSSFWorkbook);
+        wb.close();
+
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.getSampleFile(xlsx), null
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof XSSFWorkbook);
+
+
+        // Unprotected, wrong password, opens normally
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.getSampleFile(xls), "wrong"
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof HSSFWorkbook);
+        wb.close();
+
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.getSampleFile(xlsx), "wrong"
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof XSSFWorkbook);
+
+
+        // Protected, correct password, opens fine
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.getSampleFile(xls_prot[0]), xls_prot[1]
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof HSSFWorkbook);
+        wb.close();
+
+        wb = WorkbookFactory.create(
+                HSSFTestDataSamples.getSampleFile(xlsx_prot[0]), xlsx_prot[1]
+        );
+        assertNotNull(wb);
+        assertTrue(wb instanceof XSSFWorkbook);
+
+
+        // Protected, wrong password, throws Exception
+        try {
+            wb = WorkbookFactory.create(
+                    HSSFTestDataSamples.getSampleFile(xls_prot[0]), "wrong"
+            );
+            fail("Shouldn't be able to open with the wrong password");
+        } catch (EncryptedDocumentException e) {}
+
+        try {
+            wb = WorkbookFactory.create(
+                    HSSFTestDataSamples.getSampleFile(xlsx_prot[0]), "wrong"
+            );
+            fail("Shouldn't be able to open with the wrong password");
+        } catch (EncryptedDocumentException e) {}
+    }
+    
+    /**
+     * Check that a helpful exception is given on an empty file / stream
+     */
+    public void testEmptyFile() throws Exception {
+        InputStream emptyStream = new ByteArrayInputStream(new byte[0]);
+        File emptyFile = TempFile.createTempFile("empty", ".poi");
+        
+        try {
+            WorkbookFactory.create(emptyStream);
+            fail("Shouldn't be able to create for an empty stream");
+        } catch (EmptyFileException e) {
+        }
+        
+        try {
+            WorkbookFactory.create(emptyFile);
+            fail("Shouldn't be able to create for an empty file");
+        } catch (EmptyFileException e) {
+        }
+        emptyFile.delete();
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org