You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2013/07/09 15:55:55 UTC

svn commit: r1501263 - in /poi/trunk: src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestUnfixedBugs.java test-data/spreadsheet/53798_shiftNegative_TMPL.xls test-data/spreadsheet/53798_shiftNegative_TMPL.xlsx test-data/spreadsheet/54071.xlsx

Author: centic
Date: Tue Jul  9 13:55:54 2013
New Revision: 1501263

URL: http://svn.apache.org/r1501263
Log:
Add reproducing unit tests to TestUnfixedBugs for Bug 53798 and Bug 54071

Added:
    poi/trunk/test-data/spreadsheet/53798_shiftNegative_TMPL.xls   (with props)
    poi/trunk/test-data/spreadsheet/53798_shiftNegative_TMPL.xlsx   (with props)
    poi/trunk/test-data/spreadsheet/54071.xlsx   (with props)
Modified:
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestUnfixedBugs.java

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestUnfixedBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestUnfixedBugs.java?rev=1501263&r1=1501262&r2=1501263&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestUnfixedBugs.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestUnfixedBugs.java Tue Jul  9 13:55:54 2013
@@ -17,25 +17,30 @@
 
 package org.apache.poi.xssf.usermodel;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 
-import junit.framework.AssertionFailedError;
 import junit.framework.TestCase;
 
 import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Font;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.util.TempFile;
 import org.apache.poi.xssf.SXSSFITestDataProvider;
 import org.apache.poi.xssf.XSSFTestDataSamples;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTFontImpl;
 
 /**
  * @author centic
- * 
+ *
  * This testcase contains tests for bugs that are yet to be fixed. Therefore,
  * the standard ant test target does not run these tests. Run this testcase with
  * the single-test target. The names of the tests usually correspond to the
@@ -46,7 +51,7 @@ public final class TestUnfixedBugs exten
     public void testBug54084Unicode() throws IOException {
         // sample XLSX with the same text-contents as the text-file above
         XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("54084 - Greek - beyond BMP.xlsx");
-        
+
         verifyBug54084Unicode(wb);
 
 //        OutputStream baos = new FileOutputStream("/tmp/test.xlsx");
@@ -55,7 +60,7 @@ public final class TestUnfixedBugs exten
 //        } finally {
 //            baos.close();
 //        }
-        
+
         // now write the file and read it back in
         XSSFWorkbook wbWritten = XSSFTestDataSamples.writeOutAndReadBack(wb);
         verifyBug54084Unicode(wbWritten);
@@ -68,14 +73,134 @@ public final class TestUnfixedBugs exten
     private void verifyBug54084Unicode(Workbook wb) throws UnsupportedEncodingException {
         // expected data is stored in UTF-8 in a text-file
         String testData = new String(HSSFTestDataSamples.getTestDataFileContent("54084 - Greek - beyond BMP.txt"), "UTF-8").trim();
-        
+
         Sheet sheet = wb.getSheetAt(0);
         Row row = sheet.getRow(0);
         Cell cell = row.getCell(0);
-        
+
         String value = cell.getStringCellValue();
         //System.out.println(value);
-        
+
         assertEquals("The data in the text-file should exactly match the data that we read from the workbook", testData, value);
-    }   
+    }
+
+	public void test54071() {
+		Workbook workbook = XSSFTestDataSamples.openSampleWorkbook("54071.xlsx");
+		Sheet sheet = workbook.getSheetAt(0);
+		int rows = sheet.getPhysicalNumberOfRows();
+		System.out.println(">> file rows is:"+(rows-1)+" <<");
+		Row title = sheet.getRow(0);
+
+		for (int row = 1; row < rows; row++) {
+			Row rowObj = sheet.getRow(row);
+			for (int col = 0; col < 1; col++) {
+				String titleName = title.getCell(col).toString();
+				Cell cell = rowObj.getCell(col);
+				if (titleName.startsWith("time")) {
+					// here the output will produce ...59 or ...58 for the rows, probably POI is
+					// doing some different rounding or some other small difference...
+					System.out.println("==Time:"+cell.getDateCellValue());
+				}
+			}
+		}
+	}
+
+	public void testBug53798XLSX() throws IOException {
+    	XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53798_shiftNegative_TMPL.xlsx");
+        File xlsOutput = TempFile.createTempFile("testBug53798", ".xlsx");
+        bug53798Work(wb, xlsOutput);
+	}
+
+	// Disabled because shift rows is not yet implemented for SXSSFWorkbook
+	public void disabled_testBug53798XLSXStream() throws IOException {
+    	XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53798_shiftNegative_TMPL.xlsx");
+        File xlsOutput = TempFile.createTempFile("testBug53798", ".xlsx");
+        bug53798Work(new SXSSFWorkbook(wb), xlsOutput);
+	}
+
+	public void testBug53798XLS() throws IOException {
+    	Workbook wb = HSSFTestDataSamples.openSampleWorkbook("53798_shiftNegative_TMPL.xls");
+        File xlsOutput = TempFile.createTempFile("testBug53798", ".xls");
+        bug53798Work(wb, xlsOutput);
+	}
+
+	private void bug53798Work(Workbook wb, File xlsOutput) throws IOException {
+		Sheet testSheet	= wb.getSheetAt(0);
+
+		testSheet.shiftRows(2, 2, 1);
+
+		saveAndReloadReport(wb, xlsOutput);
+
+		// 1) corrupted xlsx (unreadable data in the first row of a shifted group) already comes about
+		// when shifted by less than -1 negative amount (try -2)
+		testSheet.shiftRows(3, 3, -1);
+
+		saveAndReloadReport(wb, xlsOutput);
+
+		testSheet.shiftRows(2, 2, 1);
+
+		saveAndReloadReport(wb, xlsOutput);
+
+		Row newRow = null;
+		Cell newCell = null;
+		// 2) attempt to create a new row IN PLACE of a removed row by a negative shift causes corrupted
+		// xlsx file with  unreadable data in the negative shifted row.
+		// NOTE it's ok to create any other row.
+		newRow = testSheet.createRow(3);
+
+		saveAndReloadReport(wb, xlsOutput);
+
+		newCell = newRow.createCell(0);
+
+		saveAndReloadReport(wb, xlsOutput);
+
+		newCell.setCellValue("new Cell in row "+newRow.getRowNum());
+
+		saveAndReloadReport(wb, xlsOutput);
+
+		// 3) once a negative shift has been made any attempt to shift another group of rows
+		// (note: outside of previously negative shifted rows) by a POSITIVE amount causes POI exception:
+		// org.apache.xmlbeans.impl.values.XmlValueDisconnectedException.
+		// NOTE: another negative shift on another group of rows is successful, provided no new rows in
+		// place of previously shifted rows were attempted to be created as explained above.
+		testSheet.shiftRows(6, 7, 1);	// -- CHANGE the shift to positive once the behaviour of
+										// the above has been tested
+
+		saveAndReloadReport(wb, xlsOutput);
+	}
+
+	private void saveAndReloadReport(Workbook wb, File outFile) throws IOException {
+		// run some method on the font to verify if it is "disconnected" already
+		//for(short i = 0;i < 256;i++)
+		{
+			Font font = wb.getFontAt((short)0);
+			if(font instanceof XSSFFont) {
+				XSSFFont xfont = (XSSFFont) wb.getFontAt((short)0);
+				CTFontImpl ctFont = (CTFontImpl) xfont.getCTFont();
+				assertEquals(0, ctFont.sizeOfBArray());
+			}
+		}
+
+		FileOutputStream fileOutStream = new FileOutputStream(outFile);
+		wb.write(fileOutStream);
+		fileOutStream.close();
+		//System.out.println("File \""+outFile.getName()+"\" has been saved successfully");
+
+		FileInputStream is = new FileInputStream(outFile);
+		try {
+			final Workbook newWB;
+			if(wb instanceof XSSFWorkbook) {
+				newWB = new XSSFWorkbook(is);
+			} else if(wb instanceof HSSFWorkbook) {
+				newWB = new HSSFWorkbook(is);
+			} else if(wb instanceof SXSSFWorkbook) {
+				newWB = new SXSSFWorkbook(new XSSFWorkbook(is));
+			} else {
+				throw new IllegalStateException("Unknown workbook: " + wb);
+			}
+			assertNotNull(newWB.getSheet("test"));
+		} finally {
+			is.close();
+		}
+	}
 }

Added: poi/trunk/test-data/spreadsheet/53798_shiftNegative_TMPL.xls
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/53798_shiftNegative_TMPL.xls?rev=1501263&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/spreadsheet/53798_shiftNegative_TMPL.xls
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: poi/trunk/test-data/spreadsheet/53798_shiftNegative_TMPL.xlsx
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/53798_shiftNegative_TMPL.xlsx?rev=1501263&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/spreadsheet/53798_shiftNegative_TMPL.xlsx
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: poi/trunk/test-data/spreadsheet/54071.xlsx
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/54071.xlsx?rev=1501263&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/spreadsheet/54071.xlsx
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



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