Author: liuzhe
Date: Mon Aug 27 03:31:48 2012
New Revision: 1377561
URL: http://svn.apache.org/viewvc?rev=1377561&view=rev
Log:
#120703 - [testuno] - insert, delete of page break and line break
Patch by: Xiao Xiao Ting <[email protected]>
Review by: Liu Zhe <[email protected]>
Added:
incubator/ooo/trunk/main/test/testuno/source/testcase/uno/sw/breaks/
incubator/ooo/trunk/main/test/testuno/source/testcase/uno/sw/breaks/CheckBreaks.java
Modified:
incubator/ooo/trunk/main/test/testuno/source/testcase/uno/sw/DocumentTest.java
incubator/ooo/trunk/main/test/testuno/source/testlib/uno/SWUtil.java
Modified:
incubator/ooo/trunk/main/test/testuno/source/testcase/uno/sw/DocumentTest.java
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testuno/source/testcase/uno/sw/DocumentTest.java?rev=1377561&r1=1377560&r2=1377561&view=diff
==============================================================================
---
incubator/ooo/trunk/main/test/testuno/source/testcase/uno/sw/DocumentTest.java
(original)
+++
incubator/ooo/trunk/main/test/testuno/source/testcase/uno/sw/DocumentTest.java
Mon Aug 27 03:31:48 2012
@@ -18,7 +18,10 @@ import com.sun.star.beans.XPropertySet;
import com.sun.star.beans.PropertyValue;
import com.sun.star.frame.*;
import com.sun.star.uno.UnoRuntime;
+import com.sun.star.util.XCloseable;
import com.sun.star.lang.XComponent;
+import com.sun.star.container.XEnumerationAccess;
+import com.sun.star.container.XEnumeration;
public class DocumentTest {
@@ -64,8 +67,25 @@ public class DocumentTest {
XComponent component =
componentLoader.loadComponentFromURL(FileUtil.getUrl(workingTemplatePath),
"_blank", 0,pros);
return component;
}
+
-
+ /**
+ * test close document
+ * @throws Exception
+ */
+ @Test
+ public void testCloseDocument() throws Exception
+ {
+ XComponent component = unoApp.newDocument("swriter");
+ unoApp.closeDocument(component);
+ XModel xModel =
unoApp.getDesktop().getCurrentFrame().getController().getModel();
+ Assert.assertTrue("Document has been closed.",xModel==null);
+ }
+
+ /**
+ * test new document
+ * @throws Exception
+ */
@Test
public void testNewDocument() throws Exception
{
@@ -78,7 +98,10 @@ public class DocumentTest {
unoApp.closeDocument(textDocument);
}
-
+ /**
+ * test new document from template
+ * @throws Exception
+ */
@Test
public void testNewDocumentFromTemplate() throws Exception
{
@@ -99,6 +122,10 @@ public class DocumentTest {
unoApp.closeDocument(textDocument);
}
+ /**
+ * test save document as odt
+ * @throws Exception
+ */
@Test
public void testSaveDocument() throws Exception
{
@@ -126,6 +153,10 @@ public class DocumentTest {
unoApp.closeDocument(textDocument);
}
+ /**
+ * test save document as doc
+ * @throws Exception
+ */
@Test
public void testSaveAsDocument() throws Exception
{
@@ -155,6 +186,10 @@ public class DocumentTest {
unoApp.closeDocument(textDocument);
}
+ /**
+ * test export document as pdf
+ * @throws Exception
+ */
@Test
public void testExportAsPDF() throws Exception
{
@@ -184,6 +219,10 @@ public class DocumentTest {
unoApp.closeDocument(textDocument);
}
+ /**
+ * test save document as template
+ * @throws Exception
+ */
@Test
public void testSaveAsTemplate() throws Exception
{
Added:
incubator/ooo/trunk/main/test/testuno/source/testcase/uno/sw/breaks/CheckBreaks.java
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testuno/source/testcase/uno/sw/breaks/CheckBreaks.java?rev=1377561&view=auto
==============================================================================
---
incubator/ooo/trunk/main/test/testuno/source/testcase/uno/sw/breaks/CheckBreaks.java
(added)
+++
incubator/ooo/trunk/main/test/testuno/source/testcase/uno/sw/breaks/CheckBreaks.java
Mon Aug 27 03:31:48 2012
@@ -0,0 +1,297 @@
+/**************************************************************
+ *
+ * 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 testcase.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;
+ }
+
+}
Modified: incubator/ooo/trunk/main/test/testuno/source/testlib/uno/SWUtil.java
URL:
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testuno/source/testlib/uno/SWUtil.java?rev=1377561&r1=1377560&r2=1377561&view=diff
==============================================================================
--- incubator/ooo/trunk/main/test/testuno/source/testlib/uno/SWUtil.java
(original)
+++ incubator/ooo/trunk/main/test/testuno/source/testlib/uno/SWUtil.java Mon
Aug 27 03:31:48 2012
@@ -25,16 +25,22 @@ import org.openoffice.test.uno.UnoApp;
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertySet;
+import com.sun.star.container.XEnumeration;
+import com.sun.star.container.XEnumerationAccess;
import com.sun.star.container.XNamed;
import com.sun.star.document.XDocumentInfo;
import com.sun.star.document.XDocumentInfoSupplier;
import com.sun.star.frame.XStorable;
import com.sun.star.io.IOException;
import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.style.BreakType;
+import com.sun.star.text.ControlCharacter;
import com.sun.star.text.XText;
import com.sun.star.text.XTextContent;
import com.sun.star.text.XTextCursor;
import com.sun.star.text.XTextDocument;
+import com.sun.star.frame.XModel;
+import com.sun.star.frame.XController;
import com.sun.star.uno.UnoRuntime;
public class SWUtil {
@@ -133,4 +139,50 @@ public class SWUtil {
xBookmarkAsNamed.setName(bookmarkName);
document.getText().insertTextContent(textCursor,
xBookmarkAsTextContent, true);
}
+
+ /**
+ * insert column break in current cursor
+ * @param xText
+ * @param currentCursor
+ * @throws Exception
+ */
+ public static void insertColumnBreak(XText xText, XTextCursor
currentCursor) throws Exception
+ {
+ XPropertySet xCursorProps =
(XPropertySet)UnoRuntime.queryInterface(
+ XPropertySet.class, currentCursor);
+ xCursorProps.setPropertyValue("BreakType",
BreakType.COLUMN_AFTER);
+
xText.insertControlCharacter(currentCursor,ControlCharacter.PARAGRAPH_BREAK,false);
+ }
+
+ /**
+ * insert page break in current cursor
+ * @param xText
+ * @param currentCursor
+ * @throws Exception
+ */
+ public static void insertPageBreak(XText xText, XTextCursor
currentCursor) throws Exception
+ {
+ XPropertySet xCursorProps =
(XPropertySet)UnoRuntime.queryInterface(
+ XPropertySet.class, currentCursor);
+ xCursorProps.setPropertyValue("BreakType",
BreakType.PAGE_AFTER);
+
xText.insertControlCharacter(currentCursor,ControlCharacter.PARAGRAPH_BREAK,false);
+ }
+
+
+ /**
+ * get page count
+ * @param document
+ * @return
+ * @throws Exception
+ */
+ public static int getPageCount(XTextDocument document) throws Exception
+ {
+ XModel xmodel = (XModel)UnoRuntime.queryInterface(XModel.class,
document);
+ XController xcont = xmodel.getCurrentController();
+
+ XPropertySet xps =
(XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xcont);
+ Integer pageCount = (Integer)
xps.getPropertyValue("PageCount");
+ return pageCount.intValue();
+ }
+
}