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 2014/02/03 21:56:44 UTC
svn commit: r1564050 - in /poi/trunk:
src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java
src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java
test-data/spreadsheet/55923.xlsx
Author: centic
Date: Mon Feb 3 20:56:43 2014
New Revision: 1564050
URL: http://svn.apache.org/r1564050
Log:
Bug 55923: Fix compare/sorting of nodes in exported XML
Added:
poi/trunk/test-data/spreadsheet/55923.xlsx
Modified:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java?rev=1564050&r1=1564049&r2=1564050&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java Mon Feb 3 20:56:43 2014
@@ -409,11 +409,8 @@ public class XSSFExportToXml implements
*/
@Override
public int compare(String leftXpath, String rightXpath) {
-
- int result = 0;
Node xmlSchema = map.getSchema();
-
String[] leftTokens = leftXpath.split("/");
String[] rightTokens = rightXpath.split("/");
@@ -421,15 +418,12 @@ public class XSSFExportToXml implements
Node localComplexTypeRootNode = xmlSchema;
-
for(int i =1;i <minLenght; i++) {
String leftElementName =leftTokens[i];
String rightElementName = rightTokens[i];
if (leftElementName.equals(rightElementName)) {
-
-
Node complexType = getComplexTypeForElement(leftElementName, xmlSchema,localComplexTypeRootNode);
localComplexTypeRootNode = complexType;
} else {
@@ -437,9 +431,9 @@ public class XSSFExportToXml implements
int rightIndex = indexOfElementInComplexType(rightElementName,localComplexTypeRootNode);
if (leftIndex!=-1 && rightIndex!=-1) {
if ( leftIndex < rightIndex) {
- result = -1;
+ return -1;
}if ( leftIndex > rightIndex) {
- result = 1;
+ return 1;
}
} else {
// NOTE: the xpath doesn't match correctly in the schema
@@ -447,7 +441,7 @@ public class XSSFExportToXml implements
}
}
- return result;
+ return 0;
}
private int indexOfElementInComplexType(String elementName,Node complexType) {
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java?rev=1564050&r1=1564049&r2=1564050&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java Mon Feb 3 20:56:43 2014
@@ -20,6 +20,7 @@ package org.apache.poi.xssf.extractor;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -30,8 +31,12 @@ import javax.xml.parsers.ParserConfigura
import junit.framework.TestCase;
import org.apache.poi.POIXMLDocumentPart;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.XSSFTestDataSamples;
import org.apache.poi.xssf.model.MapInfo;
+import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFMap;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
@@ -47,6 +52,7 @@ public final class TestXSSFExportToXML e
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("CustomXMLMappings.xlsx");
+ boolean found = false;
for (POIXMLDocumentPart p : wb.getRelations()) {
if (!(p instanceof MapInfo)) {
@@ -82,7 +88,10 @@ public final class TestXSSFExportToXML e
assertEquals("aa", crediti);
parseXML(xml);
- }
+
+ found = true;
+ }
+ assertTrue(found);
}
public void testExportToXMLInverseOrder() throws Exception {
@@ -92,6 +101,7 @@ public final class TestXSSFExportToXML e
MapInfo mapInfo = null;
+ boolean found = false;
for (POIXMLDocumentPart p : wb.getRelations()) {
if (!(p instanceof MapInfo)) {
@@ -127,7 +137,10 @@ public final class TestXSSFExportToXML e
assertEquals("ro", crediti);
parseXML(xml);
- }
+
+ found = true;
+ }
+ assertTrue(found);
}
public void testXPathOrdering() {
@@ -137,6 +150,7 @@ public final class TestXSSFExportToXML e
MapInfo mapInfo = null;
+ boolean found = false;
for (POIXMLDocumentPart p : wb.getRelations()) {
if (p instanceof MapInfo) {
@@ -148,7 +162,10 @@ public final class TestXSSFExportToXML e
assertEquals(1, exporter.compare("/CORSO/DOCENTE", "/CORSO/NOME"));
assertEquals(-1, exporter.compare("/CORSO/NOME", "/CORSO/DOCENTE"));
}
- }
+
+ found = true;
+ }
+ assertTrue(found);
}
public void testMultiTable() throws Exception {
@@ -156,6 +173,7 @@ public final class TestXSSFExportToXML e
XSSFWorkbook wb = XSSFTestDataSamples
.openSampleWorkbook("CustomXMLMappings-complex-type.xlsx");
+ boolean found = false;
for (POIXMLDocumentPart p : wb.getRelations()) {
if (p instanceof MapInfo) {
@@ -187,7 +205,10 @@ public final class TestXSSFExportToXML e
assertTrue(matcher.find());
}
}
- }
+
+ found = true;
+ }
+ assertTrue(found);
}
public void test55850ComplexXmlExport() throws Exception {
@@ -195,6 +216,7 @@ public final class TestXSSFExportToXML e
XSSFWorkbook wb = XSSFTestDataSamples
.openSampleWorkbook("55850.xlsx");
+ boolean found = false;
for (POIXMLDocumentPart p : wb.getRelations()) {
if (!(p instanceof MapInfo)) {
@@ -227,12 +249,16 @@ public final class TestXSSFExportToXML e
assertEquals("19", chf);
parseXML(xmlData);
+
+ found = true;
}
+ assertTrue(found);
}
public void testFormulaCells_Bugzilla_55927() throws Exception {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("55927.xlsx");
+ boolean found = false;
for (POIXMLDocumentPart p : wb.getRelations()) {
if (!(p instanceof MapInfo)) {
@@ -256,12 +282,16 @@ public final class TestXSSFExportToXML e
assertEquals("2012-01-13", date);
parseXML(xmlData);
+
+ found = true;
}
+ assertTrue(found);
}
public void testFormulaCells_Bugzilla_55926() throws Exception {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("55926.xlsx");
+ boolean found = false;
for (POIXMLDocumentPart p : wb.getRelations()) {
if (!(p instanceof MapInfo)) {
@@ -289,7 +319,10 @@ public final class TestXSSFExportToXML e
assertEquals("5.1", doubleValue);
parseXML(xmlData);
+
+ found = true;
}
+ assertTrue(found);
}
@Test
@@ -297,6 +330,7 @@ public final class TestXSSFExportToXML e
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("55924.xlsx");
+ boolean found = false;
for (POIXMLDocumentPart p : wb.getRelations()) {
if (!(p instanceof MapInfo)) {
@@ -321,9 +355,88 @@ public final class TestXSSFExportToXML e
assertEquals("1",euro);
parseXML(xmlData);
+
+ found = true;
}
+ assertTrue(found);
}
+ public void testXmlExportCompare_Bug_55923() throws Exception {
+ XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("55923.xlsx");
+
+ boolean found = false;
+ for (POIXMLDocumentPart p : wb.getRelations()) {
+
+ if (!(p instanceof MapInfo)) {
+ continue;
+ }
+ MapInfo mapInfo = (MapInfo) p;
+
+ XSSFMap map = mapInfo.getXSSFMapById(4);
+
+ assertNotNull("XSSFMap is null", map);
+
+ XSSFExportToXml exporter = new XSSFExportToXml(map);
+ assertEquals(0, exporter.compare("", ""));
+ assertEquals(0, exporter.compare("/", "/"));
+ assertEquals(0, exporter.compare("//", "//"));
+ assertEquals(0, exporter.compare("/a/", "/b/"));
+
+ assertEquals(-1, exporter.compare("/ns1:Entry/ns1:A/ns1:B/ns1:C/ns1:E/ns1:EUR",
+ "/ns1:Entry/ns1:A/ns1:B/ns1:C/ns1:E/ns1:CHF"));
+
+ found = true;
+ }
+ assertTrue(found);
+ }
+
+ public void testXmlExportSchemaOrderingBug_Bugzilla_55923() throws Exception {
+ XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("55923.xlsx");
+
+ boolean found = false;
+ for (POIXMLDocumentPart p : wb.getRelations()) {
+
+ if (!(p instanceof MapInfo)) {
+ continue;
+ }
+ MapInfo mapInfo = (MapInfo) p;
+
+ XSSFMap map = mapInfo.getXSSFMapById(4);
+
+ assertNotNull("XSSFMap is null", map);
+
+ XSSFExportToXml exporter = new XSSFExportToXml(map);
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ exporter.exportToXML(os, true);
+ String xmlData = os.toString("UTF-8");
+
+ assertNotNull(xmlData);
+ assertFalse(xmlData.equals(""));
+
+ String a = xmlData.split("<A>")[1].split("</A>")[0].trim();
+ String a_b = a.split("<B>")[1].split("</B>")[0].trim();
+ String a_b_c = a_b.split("<C>")[1].split("</C>")[0].trim();
+ String a_b_c_e = a_b_c.split("<E>")[1].split("</EA>")[0].trim();
+ String a_b_c_e_euro = a_b_c_e.split("<EUR>")[1].split("</EUR>")[0].trim();
+ String a_b_c_e_chf = a_b_c_e.split("<CHF>")[1].split("</CHF>")[0].trim();
+
+ assertEquals("1",a_b_c_e_euro);
+ assertEquals("2",a_b_c_e_chf);
+
+ String a_b_d = a_b.split("<D>")[1].split("</Dd>")[0].trim();
+ String a_b_d_e = a_b_d.split("<E>")[1].split("</EA>")[0].trim();
+
+ String a_b_d_e_euro = a_b_d_e.split("<EUR>")[1].split("</EUR>")[0].trim();
+ String a_b_d_e_chf = a_b_d_e.split("<CHF>")[1].split("</CHF>")[0].trim();
+
+ assertEquals("3",a_b_d_e_euro);
+ assertEquals("4",a_b_d_e_chf);
+
+ found = true;
+ }
+ assertTrue(found);
+ }
+
private void parseXML(String xmlData) throws IOException, SAXException, ParserConfigurationException {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
docBuilderFactory.setNamespaceAware(true);
@@ -342,4 +455,94 @@ public final class TestXSSFExportToXML e
return null;
}
}
+
+ public void testExportDataTypes() throws Exception {
+ XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("55923.xlsx");
+
+ Sheet sheet = wb.getSheetAt(0);
+ Row row = sheet.getRow(0);
+
+ Cell cString = row.createCell(0);
+ cString.setCellValue("somestring");
+ cString.setCellType(XSSFCell.CELL_TYPE_STRING);
+
+ Cell cBoolean = row.createCell(1);
+ cBoolean.setCellValue(true);
+ cBoolean.setCellType(XSSFCell.CELL_TYPE_BOOLEAN);
+
+ Cell cError = row.createCell(2);
+ cError.setCellType(XSSFCell.CELL_TYPE_ERROR);
+
+ Cell cFormulaString = row.createCell(3);
+ cFormulaString.setCellFormula("A1");
+ cFormulaString.setCellType(XSSFCell.CELL_TYPE_FORMULA);
+
+ Cell cFormulaNumeric = row.createCell(4);
+ cFormulaNumeric.setCellFormula("F1");
+ cFormulaNumeric.setCellType(XSSFCell.CELL_TYPE_FORMULA);
+
+ Cell cNumeric = row.createCell(5);
+ cNumeric.setCellValue(1.2);
+ cNumeric.setCellType(XSSFCell.CELL_TYPE_NUMERIC);
+
+ Cell cDate = row.createCell(6);
+ cDate.setCellValue(new Date());
+ cDate.setCellType(XSSFCell.CELL_TYPE_NUMERIC);
+
+ boolean found = false;
+ for (POIXMLDocumentPart p : wb.getRelations()) {
+
+ if (!(p instanceof MapInfo)) {
+ continue;
+ }
+ MapInfo mapInfo = (MapInfo) p;
+
+ XSSFMap map = mapInfo.getXSSFMapById(4);
+
+ assertNotNull("XSSFMap is null", map);
+
+ XSSFExportToXml exporter = new XSSFExportToXml(map);
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ exporter.exportToXML(os, true);
+ String xmlData = os.toString("UTF-8");
+
+ assertNotNull(xmlData);
+ assertFalse(xmlData.equals(""));
+
+ parseXML(xmlData);
+
+ found = true;
+ }
+ assertTrue(found);
+ }
+
+ public void testValidateFalse() throws Exception {
+ XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("55923.xlsx");
+
+ boolean found = false;
+ for (POIXMLDocumentPart p : wb.getRelations()) {
+
+ if (!(p instanceof MapInfo)) {
+ continue;
+ }
+ MapInfo mapInfo = (MapInfo) p;
+
+ XSSFMap map = mapInfo.getXSSFMapById(4);
+
+ assertNotNull("XSSFMap is null", map);
+
+ XSSFExportToXml exporter = new XSSFExportToXml(map);
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ exporter.exportToXML(os, false);
+ String xmlData = os.toString("UTF-8");
+
+ assertNotNull(xmlData);
+ assertFalse(xmlData.equals(""));
+
+ parseXML(xmlData);
+
+ found = true;
+ }
+ assertTrue(found);
+ }
}
Added: poi/trunk/test-data/spreadsheet/55923.xlsx
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/55923.xlsx?rev=1564050&view=auto
==============================================================================
Files poi/trunk/test-data/spreadsheet/55923.xlsx (added) and poi/trunk/test-data/spreadsheet/55923.xlsx Mon Feb 3 20:56:43 2014 differ
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org