2008-08-09 17:31:28 -04:00
|
|
|
/* ====================================================================
|
|
|
|
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.
|
|
|
|
==================================================================== */
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2008-08-09 17:31:28 -04:00
|
|
|
package org.apache.poi.hwpf.usermodel;
|
|
|
|
|
|
|
|
import junit.framework.TestCase;
|
|
|
|
|
|
|
|
import org.apache.poi.hwpf.HWPFDocument;
|
2009-08-19 14:51:44 -04:00
|
|
|
import org.apache.poi.hwpf.HWPFTestDataSamples;
|
2008-08-09 17:31:28 -04:00
|
|
|
|
|
|
|
/**
|
2009-08-18 15:49:28 -04:00
|
|
|
* Tests for the handling of header stories into headers, footers etc
|
2008-08-09 17:31:28 -04:00
|
|
|
*/
|
2009-05-21 14:12:22 -04:00
|
|
|
public final class TestHeaderStories extends TestCase {
|
2008-08-09 17:31:28 -04:00
|
|
|
private HWPFDocument none;
|
2009-05-21 14:12:22 -04:00
|
|
|
private HWPFDocument header;
|
|
|
|
private HWPFDocument footer;
|
|
|
|
private HWPFDocument headerFooter;
|
|
|
|
private HWPFDocument oddEven;
|
|
|
|
private HWPFDocument diffFirst;
|
2008-08-09 17:31:28 -04:00
|
|
|
private HWPFDocument unicode;
|
2008-08-12 15:57:04 -04:00
|
|
|
private HWPFDocument withFields;
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2016-10-19 17:52:31 -04:00
|
|
|
@Override
|
|
|
|
protected void setUp() {
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-19 14:51:44 -04:00
|
|
|
none = HWPFTestDataSamples.openSampleFile("NoHeadFoot.doc");
|
|
|
|
header = HWPFTestDataSamples.openSampleFile("ThreeColHead.doc");
|
|
|
|
footer = HWPFTestDataSamples.openSampleFile("ThreeColFoot.doc");
|
|
|
|
headerFooter = HWPFTestDataSamples.openSampleFile("SimpleHeadThreeColFoot.doc");
|
|
|
|
oddEven = HWPFTestDataSamples.openSampleFile("PageSpecificHeadFoot.doc");
|
|
|
|
diffFirst = HWPFTestDataSamples.openSampleFile("DiffFirstPageHeadFoot.doc");
|
|
|
|
unicode = HWPFTestDataSamples.openSampleFile("HeaderFooterUnicode.doc");
|
|
|
|
withFields = HWPFTestDataSamples.openSampleFile("HeaderWithMacros.doc");
|
2009-08-18 15:49:28 -04:00
|
|
|
}
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
public void testNone() {
|
|
|
|
HeaderStories hs = new HeaderStories(none);
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
assertNull(hs.getPlcfHdd());
|
|
|
|
assertEquals(0, hs.getRange().text().length());
|
|
|
|
}
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
public void testHeader() {
|
|
|
|
HeaderStories hs = new HeaderStories(header);
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
assertEquals(60, hs.getRange().text().length());
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
// Should have the usual 6 separaters
|
|
|
|
// Then all 6 of the different header/footer kinds
|
|
|
|
// Finally a terminater
|
|
|
|
assertEquals(13, hs.getPlcfHdd().length());
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
assertEquals(215, hs.getRange().getStartOffset());
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
assertEquals(0, hs.getPlcfHdd().getProperty(0).getStart());
|
|
|
|
assertEquals(3, hs.getPlcfHdd().getProperty(1).getStart());
|
|
|
|
assertEquals(6, hs.getPlcfHdd().getProperty(2).getStart());
|
|
|
|
assertEquals(6, hs.getPlcfHdd().getProperty(3).getStart());
|
|
|
|
assertEquals(9, hs.getPlcfHdd().getProperty(4).getStart());
|
|
|
|
assertEquals(12, hs.getPlcfHdd().getProperty(5).getStart());
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
assertEquals(12, hs.getPlcfHdd().getProperty(6).getStart());
|
|
|
|
assertEquals(12, hs.getPlcfHdd().getProperty(7).getStart());
|
|
|
|
assertEquals(59, hs.getPlcfHdd().getProperty(8).getStart());
|
|
|
|
assertEquals(59, hs.getPlcfHdd().getProperty(9).getStart());
|
|
|
|
assertEquals(59, hs.getPlcfHdd().getProperty(10).getStart());
|
|
|
|
assertEquals(59, hs.getPlcfHdd().getProperty(11).getStart());
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
assertEquals(59, hs.getPlcfHdd().getProperty(12).getStart());
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
assertEquals("\u0003\r\r", hs.getFootnoteSeparator());
|
2008-08-09 17:31:28 -04:00
|
|
|
assertEquals("\u0004\r\r", hs.getFootnoteContSeparator());
|
|
|
|
assertEquals("", hs.getFootnoteContNote());
|
|
|
|
assertEquals("\u0003\r\r", hs.getEndnoteSeparator());
|
|
|
|
assertEquals("\u0004\r\r", hs.getEndnoteContSeparator());
|
|
|
|
assertEquals("", hs.getEndnoteContNote());
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2008-08-09 17:46:14 -04:00
|
|
|
assertEquals("", hs.getFirstHeader());
|
|
|
|
assertEquals("", hs.getEvenHeader());
|
|
|
|
assertEquals("First header column!\tMid header Right header!\r\r", hs.getOddHeader());
|
|
|
|
|
|
|
|
assertEquals("", hs.getFirstFooter());
|
|
|
|
assertEquals("", hs.getEvenFooter());
|
|
|
|
assertEquals("", hs.getOddFooter());
|
2009-08-18 15:49:28 -04:00
|
|
|
}
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
public void testFooter() {
|
|
|
|
HeaderStories hs = new HeaderStories(footer);
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2008-08-09 17:46:14 -04:00
|
|
|
assertEquals("", hs.getFirstHeader());
|
|
|
|
assertEquals("", hs.getEvenHeader());
|
2008-08-30 10:47:33 -04:00
|
|
|
assertEquals("", hs.getOddHeader()); // Was \r\r but gets emptied
|
2008-08-09 17:31:28 -04:00
|
|
|
|
2008-08-09 17:46:14 -04:00
|
|
|
assertEquals("", hs.getFirstFooter());
|
|
|
|
assertEquals("", hs.getEvenFooter());
|
|
|
|
assertEquals("Footer Left\tFooter Middle Footer Right\r\r", hs.getOddFooter());
|
2009-08-18 15:49:28 -04:00
|
|
|
}
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
public void testHeaderFooter() {
|
|
|
|
HeaderStories hs = new HeaderStories(headerFooter);
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2008-08-09 17:46:14 -04:00
|
|
|
assertEquals("", hs.getFirstHeader());
|
|
|
|
assertEquals("", hs.getEvenHeader());
|
|
|
|
assertEquals("I am some simple header text here\r\r\r", hs.getOddHeader());
|
|
|
|
|
|
|
|
assertEquals("", hs.getFirstFooter());
|
|
|
|
assertEquals("", hs.getEvenFooter());
|
|
|
|
assertEquals("Footer Left\tFooter Middle Footer Right\r\r", hs.getOddFooter());
|
2009-08-18 15:49:28 -04:00
|
|
|
}
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
public void testOddEven() {
|
|
|
|
HeaderStories hs = new HeaderStories(oddEven);
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2008-08-09 17:46:14 -04:00
|
|
|
assertEquals("", hs.getFirstHeader());
|
2009-08-18 15:49:28 -04:00
|
|
|
assertEquals("[This is an Even Page, with a Header]\u0007August 20, 2008\u0007\u0007\r\r",
|
|
|
|
hs.getEvenHeader());
|
|
|
|
assertEquals("August 20, 2008\u0007[ODD Page Header text]\u0007\u0007\r\r", hs
|
|
|
|
.getOddHeader());
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2008-08-09 17:46:14 -04:00
|
|
|
assertEquals("", hs.getFirstFooter());
|
2009-08-18 15:49:28 -04:00
|
|
|
assertEquals(
|
|
|
|
"\u0007Page \u0013 PAGE \\* MERGEFORMAT \u00142\u0015\u0007\u0007\u0007\u0007\u0007\u0007\u0007This is a simple footer on the second page\r\r",
|
|
|
|
hs.getEvenFooter());
|
2008-08-09 17:46:14 -04:00
|
|
|
assertEquals("Footer Left\tFooter Middle Footer Right\r\r", hs.getOddFooter());
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2008-08-09 17:46:14 -04:00
|
|
|
assertEquals("Footer Left\tFooter Middle Footer Right\r\r", hs.getFooter(1));
|
2009-08-18 15:49:28 -04:00
|
|
|
assertEquals(
|
|
|
|
"\u0007Page \u0013 PAGE \\* MERGEFORMAT \u00142\u0015\u0007\u0007\u0007\u0007\u0007\u0007\u0007This is a simple footer on the second page\r\r",
|
|
|
|
hs.getFooter(2));
|
2008-08-09 17:46:14 -04:00
|
|
|
assertEquals("Footer Left\tFooter Middle Footer Right\r\r", hs.getFooter(3));
|
2009-08-18 15:49:28 -04:00
|
|
|
}
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
public void testFirst() {
|
|
|
|
HeaderStories hs = new HeaderStories(diffFirst);
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
assertEquals("I am the header on the first page, and I\u2019m nice and simple\r\r", hs
|
|
|
|
.getFirstHeader());
|
2008-08-09 17:46:14 -04:00
|
|
|
assertEquals("", hs.getEvenHeader());
|
|
|
|
assertEquals("First header column!\tMid header Right header!\r\r", hs.getOddHeader());
|
|
|
|
|
|
|
|
assertEquals("The footer of the first page\r\r", hs.getFirstFooter());
|
|
|
|
assertEquals("", hs.getEvenFooter());
|
|
|
|
assertEquals("Footer Left\tFooter Middle Footer Right\r\r", hs.getOddFooter());
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2008-08-09 17:46:14 -04:00
|
|
|
assertEquals("The footer of the first page\r\r", hs.getFooter(1));
|
|
|
|
assertEquals("Footer Left\tFooter Middle Footer Right\r\r", hs.getFooter(2));
|
|
|
|
assertEquals("Footer Left\tFooter Middle Footer Right\r\r", hs.getFooter(3));
|
2009-08-18 15:49:28 -04:00
|
|
|
}
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
public void testUnicode() {
|
|
|
|
HeaderStories hs = new HeaderStories(unicode);
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2008-08-30 10:47:33 -04:00
|
|
|
assertEquals("", hs.getFirstHeader());
|
|
|
|
assertEquals("", hs.getEvenHeader());
|
2009-08-18 15:49:28 -04:00
|
|
|
assertEquals("This is a simple header, with a \u20ac euro symbol in it.\r\r\r", hs
|
|
|
|
.getOddHeader());
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2008-08-30 10:47:33 -04:00
|
|
|
assertEquals("", hs.getFirstFooter());
|
|
|
|
assertEquals("", hs.getEvenFooter());
|
2008-08-09 17:46:14 -04:00
|
|
|
assertEquals("The footer, with Moli\u00e8re, has Unicode in it.\r\r", hs.getOddFooter());
|
2009-08-18 15:49:28 -04:00
|
|
|
}
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
public void testWithFields() {
|
|
|
|
HeaderStories hs = new HeaderStories(withFields);
|
|
|
|
assertFalse(hs.areFieldsStripped());
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
assertEquals(
|
|
|
|
"HEADER GOES HERE. 8/12/2008 \u0013 AUTHOR \\* MERGEFORMAT \u0014Eric Roch\u0015\r\r\r",
|
|
|
|
hs.getOddHeader());
|
2009-05-21 14:12:22 -04:00
|
|
|
|
2009-08-18 15:49:28 -04:00
|
|
|
// Now turn on stripping
|
|
|
|
hs.setAreFieldsStripped(true);
|
|
|
|
assertEquals("HEADER GOES HERE. 8/12/2008 Eric Roch\r\r\r", hs.getOddHeader());
|
|
|
|
}
|
2008-08-09 17:31:28 -04:00
|
|
|
}
|