blob: fb14ccec6cc5985a8ab80c7adb522106e9cabd77 [file] [log] [blame]
/**************************************************************
*
* 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 fvt.uno.sw.breaks;
import static org.openoffice.test.common.Testspace.*;
import java.io.File;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.Assert;
import org.openoffice.test.common.FileUtil;
import org.openoffice.test.uno.UnoApp;
import testlib.uno.SWUtil;
import com.sun.star.text.XTextDocument;
import com.sun.star.text.XTextCursor;
import com.sun.star.text.XText;
import com.sun.star.text.ControlCharacter;
import com.sun.star.text.XTextViewCursor;
import com.sun.star.text.XPageCursor;
import com.sun.star.text.XTextViewCursorSupplier;
import com.sun.star.style.BreakType;
import com.sun.star.beans.XPropertySet;
import com.sun.star.frame.*;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.lang.XComponent;
public class CheckBreaks {
UnoApp unoApp = new UnoApp();
XTextDocument textDocument = null;
File temp = null;
String tempFilePathODT = "";
String tempFilePathDOC = "";
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
unoApp.start();
FileUtil.deleteFile(getPath("temp"));
temp = new File(getPath("temp"));
temp.mkdirs();
tempFilePathODT = temp + "/tempFilePathODT.odt";
tempFilePathDOC = temp + "/tempFilePathDOC.doc";
}
@After
public void tearDown() throws Exception {
unoApp.close();
}
/**
* test line break can be inserted and deleted.
* when save it as odt file, close and reopen, line break can be inserted and deleted.
* when save it as doc file, close and reopen, line break can be inserted and deleted.
* \n represent line break
* @throws Exception
*/
@Test
public void testInsertDeleteLineBreak() throws Exception
{
XComponent xComponent = unoApp.newDocument("swriter");
textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xComponent);
this.insertNewLine(textDocument, "Line1", true);
this.insertNewLine(textDocument, "Line2", false);
this.insertNewLine(textDocument, "Line3", false);
this.insertNewLine(textDocument, "Line4", false);
int lineCount = this.getLineCount(textDocument);
Assert.assertEquals("Line break is inserted when new document.",4,lineCount);
this.deleteLineBreak(textDocument);
lineCount = this.getLineCount(textDocument);
Assert.assertEquals("Line break is deleted when new document", 3,lineCount);
//save to odt, test the line break
SWUtil.saveAsODT(textDocument, FileUtil.getUrl(tempFilePathODT));
unoApp.closeDocument(xComponent);
xComponent = unoApp.loadDocument(tempFilePathODT);
textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,xComponent);
lineCount = this.getLineCount(textDocument);
Assert.assertEquals("Line breaks when open saved odt file.",3,lineCount);
this.insertNewLine(textDocument, "Line added when open saved odt file", false);
lineCount = this.getLineCount(textDocument);
Assert.assertEquals("Line break is inserted when open saved odt file.",4,lineCount);
this.deleteLineBreak(textDocument);
lineCount = this.getLineCount(textDocument);
Assert.assertEquals("Line break is deleted when open saved odt file.",3,lineCount);
//save to doc, test the line break
SWUtil.saveAs(textDocument, "MS Word 97", FileUtil.getUrl(tempFilePathDOC));
unoApp.closeDocument(xComponent);
xComponent = unoApp.loadDocument(tempFilePathDOC);
textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,xComponent);
lineCount = this.getLineCount(textDocument);
Assert.assertEquals("Line breaks when open saved doc file.",3,lineCount);
this.insertNewLine(textDocument, "Line added when open saved doc file", false);
lineCount = this.getLineCount(textDocument);
Assert.assertEquals("Line break is inserted when open saved doc file.",4,lineCount);
this.deleteLineBreak(textDocument);
lineCount = this.getLineCount(textDocument);
Assert.assertEquals("Line break is deleted when open saved doc file.",3,lineCount);
unoApp.closeDocument(xComponent);
}
@Test
public void testInsertDeletePageBreak() throws Exception
{
//new document, test page break
XComponent xComponent = unoApp.newDocument("swriter");
textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xComponent);
this.insertNewPage(textDocument, "Page1", true);
this.insertNewPage(textDocument, "Page2", false);
this.insertNewPage(textDocument, "Page3", false);
int pageCount = SWUtil.getPageCount(textDocument);
Assert.assertEquals("page break is inserted when new document", 3,pageCount);
this.deleteFirstPage(textDocument);
pageCount = SWUtil.getPageCount(textDocument);
Assert.assertEquals("page break is deleted when new document", 2,pageCount);
//save as odt, test page break
SWUtil.saveAsODT(textDocument, FileUtil.getUrl(tempFilePathODT));
unoApp.closeDocument(xComponent);
xComponent = unoApp.loadDocument(tempFilePathODT);
textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,xComponent);
pageCount = SWUtil.getPageCount(textDocument);
Assert.assertEquals("Page breaks after open saved odt file", 2,pageCount);
this.insertNewPage(textDocument, "Page4", false);
pageCount = SWUtil.getPageCount(textDocument);
Assert.assertEquals("page break is inserted after open saved odt file", 3,pageCount);
this.deleteFirstPage(textDocument);
pageCount = SWUtil.getPageCount(textDocument);
Assert.assertEquals("page break is deleted after open saved odt file.", 2,pageCount);
//save as doc, test page break
SWUtil.saveAs(textDocument, "MS Word 97", FileUtil.getUrl(tempFilePathDOC));
unoApp.closeDocument(xComponent);
xComponent = unoApp.loadDocument(tempFilePathDOC);
textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,xComponent);
pageCount = SWUtil.getPageCount(textDocument);
Assert.assertEquals("Page breaks after open saved doc file", 2,pageCount);
this.deleteFirstPage(textDocument);
pageCount = SWUtil.getPageCount(textDocument);
Assert.assertEquals("page break is deleted after open saved doc file.", 1,pageCount);
this.insertNewPage(textDocument, "Page5", false);
pageCount = SWUtil.getPageCount(textDocument);
Assert.assertEquals("page break is inserted after open saved doc file", 2,pageCount);
unoApp.closeDocument(xComponent);
}
/**
* insert a new page at the end of the document
* @param xTextDocument
* @param pageContent
* @param isFirstPage
* @throws Exception
*/
private void insertNewPage(XTextDocument document, String pageContent, Boolean isFirstPage) throws Exception
{
XText xText = document.getText();
XTextCursor textCursor = xText.createTextCursor();
textCursor.gotoEnd(false);
System.out.println("The content before insert " + pageContent + ":" + xText.getString());
if(!isFirstPage)
{
XPropertySet xCursorProps = (XPropertySet)UnoRuntime.queryInterface(
XPropertySet.class, textCursor);
xCursorProps.setPropertyValue("BreakType", BreakType.PAGE_AFTER);
document.getText().insertControlCharacter(textCursor,ControlCharacter.PARAGRAPH_BREAK,false);
}
document.getText().insertString(textCursor, pageContent, false);
}
/**
* delete the first page of the document
* @param document
* @throws Exception
*/
private void deleteFirstPage(XTextDocument document) throws Exception
{
XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, document);
XController xController = xModel.getCurrentController();
XTextViewCursorSupplier xTextViewCursorSupplier =
(XTextViewCursorSupplier) UnoRuntime.queryInterface(XTextViewCursorSupplier.class, xController);
XTextViewCursor textViewCursor = xTextViewCursorSupplier.getViewCursor();
XPageCursor pageCursor = (XPageCursor) UnoRuntime.queryInterface(XPageCursor.class, textViewCursor);
// Move the cursor to the start of the document
textViewCursor.gotoStart(false);
pageCursor.jumpToFirstPage();
XTextCursor textCursor = textViewCursor.getText().createTextCursorByRange(textViewCursor.getStart());
pageCursor.jumpToEndOfPage();
textCursor.gotoRange(textViewCursor.getEnd(), true);
//System.out.println("deleted: " + textCursor.getString());
textCursor.setString("");
// Page contents cleared, now delete the page break at the start
textCursor.collapseToStart();
if(textCursor.goRight((short) 1, true)){
//System.out.println("page break deleted: " + textCursor.getString());
textCursor.setString("");
}
}
/**
* insert a new line at the end of the document.
* @param xText
* @param lineContent
* @param isFirstLine
* @throws Exception
*/
private void insertNewLine(XTextDocument xTextDocument, String lineContent, Boolean isFirstLine) throws Exception
{
XText xText = xTextDocument.getText();
XTextCursor xTextCursor = xText.createTextCursor();
xTextCursor.gotoEnd(false);
if(!isFirstLine)
{
xText.insertControlCharacter(xTextCursor, ControlCharacter.LINE_BREAK, false);
}
xText.insertString(xTextCursor, lineContent, false);
}
/**
* delete first line break
* @param xText
* @throws Exception
*/
private void deleteLineBreak(XTextDocument xTextDocument) throws Exception
{
XText xText = xTextDocument.getText();
String content = xText.getString();
content = content.replaceFirst("\n", "");
xText.setString(content);
}
/**
* get line count of all text.
* \n represent line break.
* @param xText
* @return count of line breaks
* @throws Exception
*/
private int getLineCount(XTextDocument xTextDocument) throws Exception
{
int count = 1;
XText xText = xTextDocument.getText();
String content = xText.getString();
int index = content.indexOf("\n");
while(index >=0)
{
count ++;
content = content.substring(index+1);
index = content.indexOf("\n");
}
return count;
}
}