mirror of https://github.com/apache/poi.git
Write tests for xssf StylesTable, now able to round-trip just fine
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@640005 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
010e4ac166
commit
205a5195df
|
@ -84,8 +84,15 @@ public class StylesTable implements StylesSource, XSSFModel {
|
||||||
doc = StyleSheetDocument.Factory.newInstance();
|
doc = StyleSheetDocument.Factory.newInstance();
|
||||||
doc.addNewStyleSheet();
|
doc.addNewStyleSheet();
|
||||||
|
|
||||||
// Add a single, default cell style xf
|
// Add a single, default cell xf and cell style xf
|
||||||
xfs.add(CTXf.Factory.newInstance());
|
// Excel seems to require these
|
||||||
|
CTXf[] ctxfs = new CTXf[2];
|
||||||
|
for (int i = 0; i < ctxfs.length; i++) {
|
||||||
|
ctxfs[i] = CTXf.Factory.newInstance();
|
||||||
|
ctxfs[i].setNumFmtId(0);
|
||||||
|
}
|
||||||
|
xfs.add(ctxfs[0]);
|
||||||
|
styleXfs.add(ctxfs[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -224,6 +231,18 @@ public class StylesTable implements StylesSource, XSSFModel {
|
||||||
public int _getBordersSize() {
|
public int _getBordersSize() {
|
||||||
return borders.size();
|
return borders.size();
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* For unit testing only
|
||||||
|
*/
|
||||||
|
public int _getXfsSize() {
|
||||||
|
return xfs.size();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* For unit testing only
|
||||||
|
*/
|
||||||
|
public int _getStyleXfsSize() {
|
||||||
|
return styleXfs.size();
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* For unit testing only!
|
* For unit testing only!
|
||||||
*/
|
*/
|
||||||
|
@ -246,10 +265,6 @@ public class StylesTable implements StylesSource, XSSFModel {
|
||||||
// Requests use of whitespace for easier reading
|
// Requests use of whitespace for easier reading
|
||||||
options.setSavePrettyPrint();
|
options.setSavePrettyPrint();
|
||||||
|
|
||||||
// XXX This should not be needed, but apparently the setSaveOuter call above does not work in XMLBeans 2.2
|
|
||||||
options.setSaveSyntheticDocumentElement(
|
|
||||||
new QName(CTStylesheet.type.getName().getNamespaceURI(), doc.getStyleSheet().getDomNode().getNodeName()));
|
|
||||||
|
|
||||||
|
|
||||||
// Work on the current one
|
// Work on the current one
|
||||||
// Need to do this, as we don't handle
|
// Need to do this, as we don't handle
|
||||||
|
|
|
@ -95,6 +95,7 @@ public class XSSFCell implements Cell {
|
||||||
}
|
}
|
||||||
|
|
||||||
public CellStyle getCellStyle() {
|
public CellStyle getCellStyle() {
|
||||||
|
// Zero is the empty default
|
||||||
if(this.cell.getS() > 0) {
|
if(this.cell.getS() > 0) {
|
||||||
return stylesSource.getStyleAt(this.cell.getS());
|
return stylesSource.getStyleAt(this.cell.getS());
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,172 @@
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
package org.apache.poi.xssf.model;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
public class TestStylesTable extends TestCase {
|
||||||
|
private File xml;
|
||||||
|
|
||||||
|
protected void setUp() throws Exception {
|
||||||
|
xml = new File(
|
||||||
|
System.getProperty("HSSF.testdata.path") +
|
||||||
|
File.separator + "Formatting.xlsx"
|
||||||
|
);
|
||||||
|
assertTrue(xml.exists());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCreateNew() throws Exception {
|
||||||
|
StylesTable st = new StylesTable();
|
||||||
|
|
||||||
|
// Check defaults
|
||||||
|
assertNotNull(st._getRawStylesheet());
|
||||||
|
assertEquals(1, st._getXfsSize());
|
||||||
|
assertEquals(1, st._getStyleXfsSize());
|
||||||
|
assertEquals(0, st._getNumberFormatSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCreateSaveLoad() throws Exception {
|
||||||
|
StylesTable st = new StylesTable();
|
||||||
|
|
||||||
|
assertNotNull(st._getRawStylesheet());
|
||||||
|
assertEquals(1, st._getXfsSize());
|
||||||
|
assertEquals(1, st._getStyleXfsSize());
|
||||||
|
assertEquals(0, st._getNumberFormatSize());
|
||||||
|
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
st.writeTo(baos);
|
||||||
|
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
|
||||||
|
st = new StylesTable(bais);
|
||||||
|
|
||||||
|
assertNotNull(st._getRawStylesheet());
|
||||||
|
assertEquals(1, st._getXfsSize());
|
||||||
|
assertEquals(1, st._getStyleXfsSize());
|
||||||
|
assertEquals(0, st._getNumberFormatSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testLoadExisting() throws Exception {
|
||||||
|
XSSFWorkbook workbook = new XSSFWorkbook(xml.toString());
|
||||||
|
assertNotNull(workbook.getStylesSource());
|
||||||
|
|
||||||
|
StylesTable st = (StylesTable)workbook.getStylesSource();
|
||||||
|
|
||||||
|
doTestExisting(st);
|
||||||
|
}
|
||||||
|
public void testLoadSaveLoad() throws Exception {
|
||||||
|
XSSFWorkbook workbook = new XSSFWorkbook(xml.toString());
|
||||||
|
assertNotNull(workbook.getStylesSource());
|
||||||
|
|
||||||
|
StylesTable st = (StylesTable)workbook.getStylesSource();
|
||||||
|
doTestExisting(st);
|
||||||
|
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
st.writeTo(baos);
|
||||||
|
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
|
||||||
|
st = new StylesTable(bais);
|
||||||
|
doTestExisting(st);
|
||||||
|
}
|
||||||
|
public void doTestExisting(StylesTable st) throws Exception {
|
||||||
|
// Check contents
|
||||||
|
assertNotNull(st._getRawStylesheet());
|
||||||
|
assertEquals(11, st._getXfsSize());
|
||||||
|
assertEquals(1, st._getStyleXfsSize());
|
||||||
|
assertEquals(8, st._getNumberFormatSize());
|
||||||
|
|
||||||
|
assertEquals(2, st._getFontsSize());
|
||||||
|
assertEquals(2, st._getFillsSize());
|
||||||
|
assertEquals(1, st._getBordersSize());
|
||||||
|
|
||||||
|
assertEquals("yyyy/mm/dd", st.getNumberFormatAt(165));
|
||||||
|
assertEquals("yy/mm/dd", st.getNumberFormatAt(167));
|
||||||
|
|
||||||
|
assertNotNull(st.getStyleAt(0));
|
||||||
|
assertNotNull(st.getStyleAt(1));
|
||||||
|
assertNotNull(st.getStyleAt(2));
|
||||||
|
|
||||||
|
assertEquals(0, st.getStyleAt(0).getDataFormat());
|
||||||
|
assertEquals(14, st.getStyleAt(1).getDataFormat());
|
||||||
|
assertEquals(0, st.getStyleAt(2).getDataFormat());
|
||||||
|
assertEquals(165, st.getStyleAt(3).getDataFormat());
|
||||||
|
|
||||||
|
assertEquals("yyyy/mm/dd", st.getStyleAt(3).getDataFormatString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPopulateNew() throws Exception {
|
||||||
|
StylesTable st = new StylesTable();
|
||||||
|
|
||||||
|
assertNotNull(st._getRawStylesheet());
|
||||||
|
assertEquals(1, st._getXfsSize());
|
||||||
|
assertEquals(1, st._getStyleXfsSize());
|
||||||
|
assertEquals(0, st._getNumberFormatSize());
|
||||||
|
|
||||||
|
long nf1 = st.putNumberFormat("yyyy-mm-dd");
|
||||||
|
long nf2 = st.putNumberFormat("yyyy-mm-DD");
|
||||||
|
assertEquals(nf1, st.putNumberFormat("yyyy-mm-dd"));
|
||||||
|
|
||||||
|
st.putStyle(new XSSFCellStyle(st));
|
||||||
|
|
||||||
|
// Save and re-load
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
st.writeTo(baos);
|
||||||
|
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
|
||||||
|
st = new StylesTable(bais);
|
||||||
|
|
||||||
|
assertNotNull(st._getRawStylesheet());
|
||||||
|
assertEquals(2, st._getXfsSize());
|
||||||
|
assertEquals(1, st._getStyleXfsSize());
|
||||||
|
assertEquals(2, st._getNumberFormatSize());
|
||||||
|
|
||||||
|
assertEquals("yyyy-mm-dd", st.getNumberFormatAt(nf1));
|
||||||
|
assertEquals(nf1, st.putNumberFormat("yyyy-mm-dd"));
|
||||||
|
assertEquals(nf2, st.putNumberFormat("yyyy-mm-DD"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPopulateExisting() throws Exception {
|
||||||
|
XSSFWorkbook workbook = new XSSFWorkbook(xml.toString());
|
||||||
|
assertNotNull(workbook.getStylesSource());
|
||||||
|
|
||||||
|
StylesTable st = (StylesTable)workbook.getStylesSource();
|
||||||
|
assertEquals(11, st._getXfsSize());
|
||||||
|
assertEquals(1, st._getStyleXfsSize());
|
||||||
|
assertEquals(8, st._getNumberFormatSize());
|
||||||
|
|
||||||
|
long nf1 = st.putNumberFormat("YYYY-mm-dd");
|
||||||
|
long nf2 = st.putNumberFormat("YYYY-mm-DD");
|
||||||
|
assertEquals(nf1, st.putNumberFormat("YYYY-mm-dd"));
|
||||||
|
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
st.writeTo(baos);
|
||||||
|
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
|
||||||
|
st = new StylesTable(bais);
|
||||||
|
|
||||||
|
assertEquals(11, st._getXfsSize());
|
||||||
|
assertEquals(1, st._getStyleXfsSize());
|
||||||
|
assertEquals(10, st._getNumberFormatSize());
|
||||||
|
|
||||||
|
assertEquals("YYYY-mm-dd", st.getNumberFormatAt(nf1));
|
||||||
|
assertEquals(nf1, st.putNumberFormat("YYYY-mm-dd"));
|
||||||
|
assertEquals(nf2, st.putNumberFormat("YYYY-mm-DD"));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue