Line 0
Link Here
|
|
|
1 |
/************************************************************** |
2 |
* |
3 |
* Licensed to the Apache Software Foundation (ASF) under one |
4 |
* or more contributor license agreements. See the NOTICE file |
5 |
* distributed with this work for additional information |
6 |
* regarding copyright ownership. The ASF licenses this file |
7 |
* to you under the Apache License, Version 2.0 (the |
8 |
* "License"); you may not use this file except in compliance |
9 |
* with the License. You may obtain a copy of the License at |
10 |
* |
11 |
* http://www.apache.org/licenses/LICENSE-2.0 |
12 |
* |
13 |
* Unless required by applicable law or agreed to in writing, |
14 |
* software distributed under the License is distributed on an |
15 |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
16 |
* KIND, either express or implied. See the License for the |
17 |
* specific language governing permissions and limitations |
18 |
* under the License. |
19 |
* |
20 |
*************************************************************/ |
21 |
package testcase.uno.sw.breaks; |
22 |
|
23 |
import static org.openoffice.test.common.Testspace.*; |
24 |
|
25 |
import java.io.File; |
26 |
|
27 |
import org.junit.After; |
28 |
import org.junit.Before; |
29 |
import org.junit.Test; |
30 |
import org.junit.Assert; |
31 |
import org.openoffice.test.common.FileUtil; |
32 |
import org.openoffice.test.uno.UnoApp; |
33 |
|
34 |
import testlib.uno.SWUtil; |
35 |
|
36 |
import com.sun.star.text.XTextDocument; |
37 |
import com.sun.star.text.XTextCursor; |
38 |
import com.sun.star.text.XText; |
39 |
import com.sun.star.text.ControlCharacter; |
40 |
import com.sun.star.text.XTextViewCursor; |
41 |
import com.sun.star.text.XPageCursor; |
42 |
import com.sun.star.text.XTextViewCursorSupplier; |
43 |
import com.sun.star.style.BreakType; |
44 |
import com.sun.star.beans.XPropertySet; |
45 |
import com.sun.star.frame.*; |
46 |
import com.sun.star.uno.UnoRuntime; |
47 |
import com.sun.star.lang.XComponent; |
48 |
|
49 |
public class CheckBreaks { |
50 |
UnoApp unoApp = new UnoApp(); |
51 |
XTextDocument textDocument = null; |
52 |
File temp = null; |
53 |
String tempFilePathODT = ""; |
54 |
String tempFilePathDOC = ""; |
55 |
|
56 |
/** |
57 |
* @throws java.lang.Exception |
58 |
*/ |
59 |
@Before |
60 |
public void setUp() throws Exception { |
61 |
unoApp.start(); |
62 |
|
63 |
FileUtil.deleteFile(getPath("temp")); |
64 |
temp = new File(getPath("temp")); |
65 |
temp.mkdirs(); |
66 |
|
67 |
tempFilePathODT = temp + "/tempFilePathODT.odt"; |
68 |
tempFilePathDOC = temp + "/tempFilePathDOC.doc"; |
69 |
} |
70 |
|
71 |
@After |
72 |
public void tearDown() throws Exception { |
73 |
unoApp.close(); |
74 |
} |
75 |
|
76 |
/** |
77 |
* test line break can be inserted and deleted. |
78 |
* when save it as odt file, close and reopen, line break can be inserted and deleted. |
79 |
* when save it as doc file, close and reopen, line break can be inserted and deleted. |
80 |
* \n represent line break |
81 |
* @throws Exception |
82 |
*/ |
83 |
@Test |
84 |
public void testInsertDeleteLineBreak() throws Exception |
85 |
{ |
86 |
XComponent xComponent = unoApp.newDocument("swriter"); |
87 |
textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xComponent); |
88 |
this.insertNewLine(textDocument, "Line1", true); |
89 |
this.insertNewLine(textDocument, "Line2", false); |
90 |
this.insertNewLine(textDocument, "Line3", false); |
91 |
this.insertNewLine(textDocument, "Line4", false); |
92 |
|
93 |
int lineCount = this.getLineCount(textDocument); |
94 |
Assert.assertEquals("Line break is inserted when new document.",4,lineCount); |
95 |
this.deleteLineBreak(textDocument); |
96 |
lineCount = this.getLineCount(textDocument); |
97 |
Assert.assertEquals("Line break is deleted when new document", 3,lineCount); |
98 |
|
99 |
//save to odt, test the line break |
100 |
SWUtil.saveAsODT(textDocument, FileUtil.getUrl(tempFilePathODT)); |
101 |
unoApp.closeDocument(xComponent); |
102 |
xComponent = unoApp.loadDocument(tempFilePathODT); |
103 |
textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,xComponent); |
104 |
lineCount = this.getLineCount(textDocument); |
105 |
Assert.assertEquals("Line breaks when open saved odt file.",3,lineCount); |
106 |
this.insertNewLine(textDocument, "Line added when open saved odt file", false); |
107 |
lineCount = this.getLineCount(textDocument); |
108 |
Assert.assertEquals("Line break is inserted when open saved odt file.",4,lineCount); |
109 |
this.deleteLineBreak(textDocument); |
110 |
lineCount = this.getLineCount(textDocument); |
111 |
Assert.assertEquals("Line break is deleted when open saved odt file.",3,lineCount); |
112 |
|
113 |
//save to doc, test the line break |
114 |
SWUtil.saveAs(textDocument, "MS Word 97", FileUtil.getUrl(tempFilePathDOC)); |
115 |
unoApp.closeDocument(xComponent); |
116 |
xComponent = unoApp.loadDocument(tempFilePathDOC); |
117 |
textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,xComponent); |
118 |
lineCount = this.getLineCount(textDocument); |
119 |
Assert.assertEquals("Line breaks when open saved doc file.",3,lineCount); |
120 |
this.insertNewLine(textDocument, "Line added when open saved doc file", false); |
121 |
lineCount = this.getLineCount(textDocument); |
122 |
Assert.assertEquals("Line break is inserted when open saved doc file.",4,lineCount); |
123 |
this.deleteLineBreak(textDocument); |
124 |
lineCount = this.getLineCount(textDocument); |
125 |
Assert.assertEquals("Line break is deleted when open saved doc file.",3,lineCount); |
126 |
|
127 |
unoApp.closeDocument(xComponent); |
128 |
} |
129 |
|
130 |
@Test |
131 |
public void testInsertDeletePageBreak() throws Exception |
132 |
{ |
133 |
//new document, test page break |
134 |
XComponent xComponent = unoApp.newDocument("swriter"); |
135 |
textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xComponent); |
136 |
this.insertNewPage(textDocument, "Page1", true); |
137 |
this.insertNewPage(textDocument, "Page2", false); |
138 |
this.insertNewPage(textDocument, "Page3", false); |
139 |
int pageCount = SWUtil.getPageCount(textDocument); |
140 |
Assert.assertEquals("page break is inserted when new document", 3,pageCount); |
141 |
|
142 |
this.deleteFirstPage(textDocument); |
143 |
pageCount = SWUtil.getPageCount(textDocument); |
144 |
Assert.assertEquals("page break is deleted when new document", 2,pageCount); |
145 |
|
146 |
//save as odt, test page break |
147 |
SWUtil.saveAsODT(textDocument, FileUtil.getUrl(tempFilePathODT)); |
148 |
unoApp.closeDocument(xComponent); |
149 |
xComponent = unoApp.loadDocument(tempFilePathODT); |
150 |
textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,xComponent); |
151 |
pageCount = SWUtil.getPageCount(textDocument); |
152 |
Assert.assertEquals("Page breaks after open saved odt file", 2,pageCount); |
153 |
this.insertNewPage(textDocument, "Page4", false); |
154 |
pageCount = SWUtil.getPageCount(textDocument); |
155 |
Assert.assertEquals("page break is inserted after open saved odt file", 3,pageCount); |
156 |
|
157 |
this.deleteFirstPage(textDocument); |
158 |
pageCount = SWUtil.getPageCount(textDocument); |
159 |
Assert.assertEquals("page break is deleted after open saved odt file.", 2,pageCount); |
160 |
|
161 |
//save as doc, test page break |
162 |
SWUtil.saveAs(textDocument, "MS Word 97", FileUtil.getUrl(tempFilePathDOC)); |
163 |
unoApp.closeDocument(xComponent); |
164 |
xComponent = unoApp.loadDocument(tempFilePathDOC); |
165 |
textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,xComponent); |
166 |
pageCount = SWUtil.getPageCount(textDocument); |
167 |
Assert.assertEquals("Page breaks after open saved doc file", 2,pageCount); |
168 |
|
169 |
this.deleteFirstPage(textDocument); |
170 |
pageCount = SWUtil.getPageCount(textDocument); |
171 |
Assert.assertEquals("page break is deleted after open saved doc file.", 1,pageCount); |
172 |
|
173 |
this.insertNewPage(textDocument, "Page5", false); |
174 |
pageCount = SWUtil.getPageCount(textDocument); |
175 |
Assert.assertEquals("page break is inserted after open saved doc file", 2,pageCount); |
176 |
|
177 |
unoApp.closeDocument(xComponent); |
178 |
} |
179 |
|
180 |
|
181 |
|
182 |
|
183 |
/** |
184 |
* insert a new page at the end of the document |
185 |
* @param xTextDocument |
186 |
* @param pageContent |
187 |
* @param isFirstPage |
188 |
* @throws Exception |
189 |
*/ |
190 |
private void insertNewPage(XTextDocument document, String pageContent, Boolean isFirstPage) throws Exception |
191 |
{ |
192 |
XText xText = document.getText(); |
193 |
XTextCursor textCursor = xText.createTextCursor(); |
194 |
textCursor.gotoEnd(false); |
195 |
System.out.println("The content before insert " + pageContent + ":" + xText.getString()); |
196 |
if(!isFirstPage) |
197 |
{ |
198 |
XPropertySet xCursorProps = (XPropertySet)UnoRuntime.queryInterface( |
199 |
XPropertySet.class, textCursor); |
200 |
xCursorProps.setPropertyValue("BreakType", BreakType.PAGE_AFTER); |
201 |
document.getText().insertControlCharacter(textCursor,ControlCharacter.PARAGRAPH_BREAK,false); |
202 |
} |
203 |
document.getText().insertString(textCursor, pageContent, false); |
204 |
} |
205 |
|
206 |
/** |
207 |
* delete the first page of the document |
208 |
* @param document |
209 |
* @throws Exception |
210 |
*/ |
211 |
private void deleteFirstPage(XTextDocument document) throws Exception |
212 |
{ |
213 |
XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, document); |
214 |
XController xController = xModel.getCurrentController(); |
215 |
XTextViewCursorSupplier xTextViewCursorSupplier = |
216 |
(XTextViewCursorSupplier) UnoRuntime.queryInterface(XTextViewCursorSupplier.class, xController); |
217 |
XTextViewCursor textViewCursor = xTextViewCursorSupplier.getViewCursor(); |
218 |
|
219 |
XPageCursor pageCursor = (XPageCursor) UnoRuntime.queryInterface(XPageCursor.class, textViewCursor); |
220 |
|
221 |
// Move the cursor to the start of the document |
222 |
textViewCursor.gotoStart(false); |
223 |
|
224 |
pageCursor.jumpToFirstPage(); |
225 |
XTextCursor textCursor = textViewCursor.getText().createTextCursorByRange(textViewCursor.getStart()); |
226 |
|
227 |
pageCursor.jumpToEndOfPage(); |
228 |
textCursor.gotoRange(textViewCursor.getEnd(), true); |
229 |
//System.out.println("deleted: " + textCursor.getString()); |
230 |
textCursor.setString(""); |
231 |
|
232 |
// Page contents cleared, now delete the page break at the start |
233 |
textCursor.collapseToStart(); |
234 |
if(textCursor.goRight((short) 1, true)){ |
235 |
//System.out.println("page break deleted: " + textCursor.getString()); |
236 |
textCursor.setString(""); |
237 |
} |
238 |
|
239 |
} |
240 |
|
241 |
|
242 |
/** |
243 |
* insert a new line at the end of the document. |
244 |
* @param xText |
245 |
* @param lineContent |
246 |
* @param isFirstLine |
247 |
* @throws Exception |
248 |
*/ |
249 |
private void insertNewLine(XTextDocument xTextDocument, String lineContent, Boolean isFirstLine) throws Exception |
250 |
{ |
251 |
XText xText = xTextDocument.getText(); |
252 |
XTextCursor xTextCursor = xText.createTextCursor(); |
253 |
xTextCursor.gotoEnd(false); |
254 |
if(!isFirstLine) |
255 |
{ |
256 |
xText.insertControlCharacter(xTextCursor, ControlCharacter.LINE_BREAK, false); |
257 |
} |
258 |
|
259 |
xText.insertString(xTextCursor, lineContent, false); |
260 |
} |
261 |
|
262 |
/** |
263 |
* delete first line break |
264 |
* @param xText |
265 |
* @throws Exception |
266 |
*/ |
267 |
private void deleteLineBreak(XTextDocument xTextDocument) throws Exception |
268 |
{ |
269 |
XText xText = xTextDocument.getText(); |
270 |
String content = xText.getString(); |
271 |
content = content.replaceFirst("\n", ""); |
272 |
xText.setString(content); |
273 |
} |
274 |
|
275 |
/** |
276 |
* get line count of all text. |
277 |
* \n represent line break. |
278 |
* @param xText |
279 |
* @return count of line breaks |
280 |
* @throws Exception |
281 |
*/ |
282 |
private int getLineCount(XTextDocument xTextDocument) throws Exception |
283 |
{ |
284 |
int count = 1; |
285 |
XText xText = xTextDocument.getText(); |
286 |
String content = xText.getString(); |
287 |
int index = content.indexOf("\n"); |
288 |
while(index >=0) |
289 |
{ |
290 |
count ++; |
291 |
content = content.substring(index+1); |
292 |
index = content.indexOf("\n"); |
293 |
} |
294 |
return count; |
295 |
} |
296 |
|
297 |
} |