1*28725c19SLi Feng Wang /**************************************************************
2*28725c19SLi Feng Wang  *
3*28725c19SLi Feng Wang  * Licensed to the Apache Software Foundation (ASF) under one
4*28725c19SLi Feng Wang  * or more contributor license agreements.  See the NOTICE file
5*28725c19SLi Feng Wang  * distributed with this work for additional information
6*28725c19SLi Feng Wang  * regarding copyright ownership.  The ASF licenses this file
7*28725c19SLi Feng Wang  * to you under the Apache License, Version 2.0 (the
8*28725c19SLi Feng Wang  * "License"); you may not use this file except in compliance
9*28725c19SLi Feng Wang  * with the License.  You may obtain a copy of the License at
10*28725c19SLi Feng Wang  *
11*28725c19SLi Feng Wang  *   http://www.apache.org/licenses/LICENSE-2.0
12*28725c19SLi Feng Wang  *
13*28725c19SLi Feng Wang  * Unless required by applicable law or agreed to in writing,
14*28725c19SLi Feng Wang  * software distributed under the License is distributed on an
15*28725c19SLi Feng Wang  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*28725c19SLi Feng Wang  * KIND, either express or implied.  See the License for the
17*28725c19SLi Feng Wang  * specific language governing permissions and limitations
18*28725c19SLi Feng Wang  * under the License.
19*28725c19SLi Feng Wang  *
20*28725c19SLi Feng Wang  *************************************************************/
21*28725c19SLi Feng Wang /**
22*28725c19SLi Feng Wang  *
23*28725c19SLi Feng Wang  */
24*28725c19SLi Feng Wang package fvt.uno.sd.bullet;
25*28725c19SLi Feng Wang import static org.junit.Assert.*;
26*28725c19SLi Feng Wang import static testlib.uno.PageUtil.getDrawPageByIndex;
27*28725c19SLi Feng Wang import static testlib.uno.ShapeUtil.addPortion;
28*28725c19SLi Feng Wang import static testlib.uno.ShapeUtil.getPortion;
29*28725c19SLi Feng Wang 
30*28725c19SLi Feng Wang import org.junit.After;
31*28725c19SLi Feng Wang import org.junit.AfterClass;
32*28725c19SLi Feng Wang import org.junit.Before;
33*28725c19SLi Feng Wang import org.junit.BeforeClass;
34*28725c19SLi Feng Wang import org.junit.Ignore;
35*28725c19SLi Feng Wang import org.junit.Test;
36*28725c19SLi Feng Wang import org.openoffice.test.uno.UnoApp;
37*28725c19SLi Feng Wang import org.openoffice.test.common.FileUtil;
38*28725c19SLi Feng Wang import org.openoffice.test.common.Testspace;
39*28725c19SLi Feng Wang 
40*28725c19SLi Feng Wang import testlib.uno.SDUtil;
41*28725c19SLi Feng Wang 
42*28725c19SLi Feng Wang import com.sun.star.beans.PropertyValue;
43*28725c19SLi Feng Wang import com.sun.star.beans.UnknownPropertyException;
44*28725c19SLi Feng Wang import com.sun.star.beans.XPropertySet;
45*28725c19SLi Feng Wang import com.sun.star.container.XIndexAccess;
46*28725c19SLi Feng Wang import com.sun.star.container.XIndexReplace;
47*28725c19SLi Feng Wang import com.sun.star.drawing.XDrawPage;
48*28725c19SLi Feng Wang import com.sun.star.drawing.XShape;
49*28725c19SLi Feng Wang import com.sun.star.lang.WrappedTargetException;
50*28725c19SLi Feng Wang import com.sun.star.lang.XComponent;
51*28725c19SLi Feng Wang import com.sun.star.style.NumberingType;
52*28725c19SLi Feng Wang import com.sun.star.text.HoriOrientation;
53*28725c19SLi Feng Wang import com.sun.star.uno.AnyConverter;
54*28725c19SLi Feng Wang import com.sun.star.uno.UnoRuntime;
55*28725c19SLi Feng Wang 
56*28725c19SLi Feng Wang /**
57*28725c19SLi Feng Wang  * @author LouQL
58*28725c19SLi Feng Wang  *
59*28725c19SLi Feng Wang  */
60*28725c19SLi Feng Wang public class NumberingProperty {
61*28725c19SLi Feng Wang 
62*28725c19SLi Feng Wang 	private static final UnoApp app = new UnoApp();
63*28725c19SLi Feng Wang 
64*28725c19SLi Feng Wang 	private XComponent m_xSDComponent = null;
65*28725c19SLi Feng Wang 	private String m_filePath = null;
66*28725c19SLi Feng Wang 	private XPropertySet m_xtextProps = null;
67*28725c19SLi Feng Wang 
68*28725c19SLi Feng Wang 	@Before
setUpDocument()69*28725c19SLi Feng Wang 	public void setUpDocument() throws Exception {
70*28725c19SLi Feng Wang 		m_filePath = Testspace.getPath("temp/NumberingProperty.odp");
71*28725c19SLi Feng Wang //		m_filePath = "F:/aa.odp";
72*28725c19SLi Feng Wang 		if (FileUtil.fileExists(m_filePath)) {//load
73*28725c19SLi Feng Wang 			m_xtextProps = load();
74*28725c19SLi Feng Wang 		} else {//new
75*28725c19SLi Feng Wang 			m_xSDComponent = (XComponent) UnoRuntime.queryInterface(
76*28725c19SLi Feng Wang 					XComponent.class, app.newDocument("simpress"));
77*28725c19SLi Feng Wang 			Object firstPage = getDrawPageByIndex(m_xSDComponent, 0);
78*28725c19SLi Feng Wang 			Object secondTextBox = SDUtil.getShapeOfPageByIndex(firstPage, 1);
79*28725c19SLi Feng Wang 			XShape xsecondTextBox = (XShape)UnoRuntime.queryInterface(XShape.class, secondTextBox);
80*28725c19SLi Feng Wang 			m_xtextProps = addPortion(xsecondTextBox,
81*28725c19SLi Feng Wang 					"test the property of Numbering bullets. There are two lines in this test",
82*28725c19SLi Feng Wang 					false);
83*28725c19SLi Feng Wang 			setNumberingType(m_xtextProps, NumberingType.ARABIC, (short)0);
84*28725c19SLi Feng Wang 		}
85*28725c19SLi Feng Wang 	}
86*28725c19SLi Feng Wang 
load()87*28725c19SLi Feng Wang 	private XPropertySet load() throws Exception{
88*28725c19SLi Feng Wang 		m_xSDComponent = (XComponent) UnoRuntime.queryInterface(XComponent.class,
89*28725c19SLi Feng Wang 				app.loadDocument(m_filePath));
90*28725c19SLi Feng Wang 		Object firstPage = getDrawPageByIndex(m_xSDComponent, 0);
91*28725c19SLi Feng Wang 		XDrawPage firstpage = getDrawPageByIndex(m_xSDComponent, 0);
92*28725c19SLi Feng Wang 		Object secondTextBox = SDUtil.getShapeOfPageByIndex(firstPage, 1);
93*28725c19SLi Feng Wang 		XShape xsecondTextBox = (XShape)UnoRuntime.queryInterface(XShape.class, secondTextBox);
94*28725c19SLi Feng Wang 		return getPortion(xsecondTextBox, 0);
95*28725c19SLi Feng Wang 	}
96*28725c19SLi Feng Wang 
97*28725c19SLi Feng Wang 	@After
tearDownDocument()98*28725c19SLi Feng Wang 	public void tearDownDocument() {
99*28725c19SLi Feng Wang 		app.closeDocument(m_xSDComponent);
100*28725c19SLi Feng Wang 		//remove the temp file
101*28725c19SLi Feng Wang 		FileUtil.deleteFile(Testspace.getPath("temp"));
102*28725c19SLi Feng Wang 	}
103*28725c19SLi Feng Wang 
104*28725c19SLi Feng Wang 	@BeforeClass
setUpConnection()105*28725c19SLi Feng Wang 	public static void setUpConnection() throws Exception {
106*28725c19SLi Feng Wang 		app.start();
107*28725c19SLi Feng Wang 	}
108*28725c19SLi Feng Wang 
109*28725c19SLi Feng Wang 	@AfterClass
tearDownConnection()110*28725c19SLi Feng Wang 	public static void tearDownConnection() throws InterruptedException,
111*28725c19SLi Feng Wang 			Exception {
112*28725c19SLi Feng Wang 		app.close();
113*28725c19SLi Feng Wang 
114*28725c19SLi Feng Wang 	}
115*28725c19SLi Feng Wang 
116*28725c19SLi Feng Wang 	/*NumberingType: specifies the type of numbering
117*28725c19SLi Feng Wang 	 * GUI entry:Numbering and Bullet dialog->Customize->Numbering
118*28725c19SLi Feng Wang 	 * */
setNumberingType(XPropertySet textPros, short numberingType, short level)119*28725c19SLi Feng Wang 	private void setNumberingType(XPropertySet textPros, short numberingType, short level) throws Exception{
120*28725c19SLi Feng Wang 		Object numberingRules = textPros.getPropertyValue("NumberingRules");
121*28725c19SLi Feng Wang 		XIndexReplace xReplace = (XIndexReplace) UnoRuntime.queryInterface(
122*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingRules);
123*28725c19SLi Feng Wang 
124*28725c19SLi Feng Wang 		PropertyValue[] props = new PropertyValue[1];
125*28725c19SLi Feng Wang 		props[0] = new PropertyValue();
126*28725c19SLi Feng Wang 	    props[0].Name = "NumberingType";
127*28725c19SLi Feng Wang 	    props[0].Value = numberingType;
128*28725c19SLi Feng Wang 
129*28725c19SLi Feng Wang 	    xReplace.replaceByIndex(level, props);
130*28725c19SLi Feng Wang 
131*28725c19SLi Feng Wang 	    m_xtextProps.setPropertyValue("NumberingRules", numberingRules);
132*28725c19SLi Feng Wang 		  //set numbering level to 0
133*28725c19SLi Feng Wang 		m_xtextProps.setPropertyValue("NumberingLevel", level);
134*28725c19SLi Feng Wang 	}
135*28725c19SLi Feng Wang 
136*28725c19SLi Feng Wang 
137*28725c19SLi Feng Wang 
138*28725c19SLi Feng Wang 	@Test
139*28725c19SLi Feng Wang 	/*
140*28725c19SLi Feng Wang 	 * Prefix: the prefix of the numbering symbol
141*28725c19SLi Feng Wang 	 * GUI entry: Numbering and Bullet dialog->customize->Before
142*28725c19SLi Feng Wang 	 * */
testPrefix()143*28725c19SLi Feng Wang 	public void testPrefix() throws Exception {
144*28725c19SLi Feng Wang 		String prefix = "Prefix";
145*28725c19SLi Feng Wang 		Object numberingrules = m_xtextProps.getPropertyValue("NumberingRules");
146*28725c19SLi Feng Wang 
147*28725c19SLi Feng Wang 		XIndexReplace xReplace = (XIndexReplace) UnoRuntime.queryInterface(
148*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules);
149*28725c19SLi Feng Wang 
150*28725c19SLi Feng Wang 		PropertyValue[] props = new PropertyValue[1];
151*28725c19SLi Feng Wang 		props[0] = new PropertyValue();
152*28725c19SLi Feng Wang 	    props[0].Name = "Prefix";
153*28725c19SLi Feng Wang 	    props[0].Value = prefix;
154*28725c19SLi Feng Wang 
155*28725c19SLi Feng Wang 	    xReplace.replaceByIndex(0, props);
156*28725c19SLi Feng Wang 
157*28725c19SLi Feng Wang 	    m_xtextProps.setPropertyValue("NumberingRules", numberingrules);
158*28725c19SLi Feng Wang 
159*28725c19SLi Feng Wang 		app.saveDocument(m_xSDComponent, m_filePath);
160*28725c19SLi Feng Wang 		app.closeDocument(m_xSDComponent);
161*28725c19SLi Feng Wang 		//reopen
162*28725c19SLi Feng Wang 		m_xtextProps = load();
163*28725c19SLi Feng Wang 
164*28725c19SLi Feng Wang 		Object numberingrules2 = m_xtextProps.getPropertyValue("NumberingRules");
165*28725c19SLi Feng Wang 
166*28725c19SLi Feng Wang 		XIndexReplace xReplace2 = (XIndexReplace) UnoRuntime.queryInterface(
167*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules2);
168*28725c19SLi Feng Wang 
169*28725c19SLi Feng Wang 		PropertyValue[] proValues2 = (PropertyValue[])xReplace2.getByIndex(0);
170*28725c19SLi Feng Wang 		for(int i=0;i<proValues2.length;i++)
171*28725c19SLi Feng Wang 		{
172*28725c19SLi Feng Wang 			if(proValues2[i].Name.equals("Prefix"))
173*28725c19SLi Feng Wang 			{
174*28725c19SLi Feng Wang 				assertEquals("Prefix should be "+prefix, prefix, proValues2[i].Value);
175*28725c19SLi Feng Wang 				break;
176*28725c19SLi Feng Wang 			}
177*28725c19SLi Feng Wang 		}
178*28725c19SLi Feng Wang 
179*28725c19SLi Feng Wang 	}
180*28725c19SLi Feng Wang 
181*28725c19SLi Feng Wang 	@Test
182*28725c19SLi Feng Wang 	/*
183*28725c19SLi Feng Wang 	 * Suffix: the suffix of the numbering symbol
184*28725c19SLi Feng Wang 	 * GUI entry: Numbering and Bullet dialog->customize->After
185*28725c19SLi Feng Wang 	 * */
testSuffix()186*28725c19SLi Feng Wang 	public void testSuffix() throws Exception {
187*28725c19SLi Feng Wang 		String suffix = "--";
188*28725c19SLi Feng Wang 		Object numberingrules = m_xtextProps.getPropertyValue("NumberingRules");
189*28725c19SLi Feng Wang 
190*28725c19SLi Feng Wang 		XIndexReplace xReplace = (XIndexReplace) UnoRuntime.queryInterface(
191*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules);
192*28725c19SLi Feng Wang 
193*28725c19SLi Feng Wang 		PropertyValue[] props = new PropertyValue[1];
194*28725c19SLi Feng Wang 		props[0] = new PropertyValue();
195*28725c19SLi Feng Wang 	    props[0].Name = "Suffix";
196*28725c19SLi Feng Wang 	    props[0].Value = suffix;
197*28725c19SLi Feng Wang 
198*28725c19SLi Feng Wang 	    xReplace.replaceByIndex(0, props);
199*28725c19SLi Feng Wang 
200*28725c19SLi Feng Wang 	    m_xtextProps.setPropertyValue("NumberingRules", numberingrules);
201*28725c19SLi Feng Wang 
202*28725c19SLi Feng Wang 		app.saveDocument(m_xSDComponent, m_filePath);
203*28725c19SLi Feng Wang 		app.closeDocument(m_xSDComponent);
204*28725c19SLi Feng Wang 		//reopen
205*28725c19SLi Feng Wang 		m_xtextProps = load();
206*28725c19SLi Feng Wang 
207*28725c19SLi Feng Wang 		Object numberingrules2 = m_xtextProps.getPropertyValue("NumberingRules");
208*28725c19SLi Feng Wang 
209*28725c19SLi Feng Wang 		XIndexReplace xReplace2 = (XIndexReplace) UnoRuntime.queryInterface(
210*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules2);
211*28725c19SLi Feng Wang 
212*28725c19SLi Feng Wang 		PropertyValue[] proValues2 = (PropertyValue[])xReplace2.getByIndex(0);
213*28725c19SLi Feng Wang 		for(int i=0;i<proValues2.length;i++)
214*28725c19SLi Feng Wang 		{
215*28725c19SLi Feng Wang 			if(proValues2[i].Name.equals("Suffix"))
216*28725c19SLi Feng Wang 			{
217*28725c19SLi Feng Wang 				assertEquals("Suffix should be "+suffix, suffix, proValues2[i].Value);
218*28725c19SLi Feng Wang 				break;
219*28725c19SLi Feng Wang 			}
220*28725c19SLi Feng Wang 		}
221*28725c19SLi Feng Wang 
222*28725c19SLi Feng Wang 
223*28725c19SLi Feng Wang 	}
224*28725c19SLi Feng Wang 
225*28725c19SLi Feng Wang 	@Test
226*28725c19SLi Feng Wang 	/*
227*28725c19SLi Feng Wang 	 * StartWith: specifies the start value for the numbering.
228*28725c19SLi Feng Wang 	 * GUI entry: Numbering and Bullet dialog->customize->Start At
229*28725c19SLi Feng Wang 	 * */
testStartWith()230*28725c19SLi Feng Wang 	public void testStartWith() throws Exception {
231*28725c19SLi Feng Wang 		short startWith = 5;
232*28725c19SLi Feng Wang 		Object numberingrules = m_xtextProps.getPropertyValue("NumberingRules");
233*28725c19SLi Feng Wang 
234*28725c19SLi Feng Wang 		XIndexReplace xReplace = (XIndexReplace) UnoRuntime.queryInterface(
235*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules);
236*28725c19SLi Feng Wang 
237*28725c19SLi Feng Wang 		PropertyValue[] props = new PropertyValue[1];
238*28725c19SLi Feng Wang 		props[0] = new PropertyValue();
239*28725c19SLi Feng Wang 	    props[0].Name = "StartWith";
240*28725c19SLi Feng Wang 	    props[0].Value = startWith;
241*28725c19SLi Feng Wang 
242*28725c19SLi Feng Wang 	    xReplace.replaceByIndex(0, props);
243*28725c19SLi Feng Wang 
244*28725c19SLi Feng Wang 	    m_xtextProps.setPropertyValue("NumberingRules", numberingrules);
245*28725c19SLi Feng Wang 
246*28725c19SLi Feng Wang 		app.saveDocument(m_xSDComponent, m_filePath);
247*28725c19SLi Feng Wang 		app.closeDocument(m_xSDComponent);
248*28725c19SLi Feng Wang 		//reopen
249*28725c19SLi Feng Wang 		m_xtextProps = load();
250*28725c19SLi Feng Wang 
251*28725c19SLi Feng Wang 		Object numberingrules2 = m_xtextProps.getPropertyValue("NumberingRules");
252*28725c19SLi Feng Wang 
253*28725c19SLi Feng Wang 		XIndexReplace xReplace2 = (XIndexReplace) UnoRuntime.queryInterface(
254*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules2);
255*28725c19SLi Feng Wang 
256*28725c19SLi Feng Wang 		PropertyValue[] proValues2 = (PropertyValue[])xReplace2.getByIndex(0);
257*28725c19SLi Feng Wang 
258*28725c19SLi Feng Wang 		String sStartWith = Short.toString(startWith);
259*28725c19SLi Feng Wang 		for(int i=0;i<proValues2.length;i++)
260*28725c19SLi Feng Wang 		{
261*28725c19SLi Feng Wang 			if(proValues2[i].Name.equals("StartWith"))
262*28725c19SLi Feng Wang 			{
263*28725c19SLi Feng Wang 				assertEquals("StartWith should be "+sStartWith, startWith, proValues2[i].Value);
264*28725c19SLi Feng Wang 				break;
265*28725c19SLi Feng Wang 			}
266*28725c19SLi Feng Wang 		}
267*28725c19SLi Feng Wang 
268*28725c19SLi Feng Wang 	}
269*28725c19SLi Feng Wang 
270*28725c19SLi Feng Wang 
271*28725c19SLi Feng Wang 
272*28725c19SLi Feng Wang 
273*28725c19SLi Feng Wang 	@Test
274*28725c19SLi Feng Wang 	/*FirstLineOffset: specifies the offset between the beginning of the first line
275*28725c19SLi Feng Wang 	 * and the beginning of the following lines of the paragraph.
276*28725c19SLi Feng Wang 	*GUI entry: paragraph dialog->Position tab->Width of numbering
277*28725c19SLi Feng Wang 	*/
testFirstLineOffset()278*28725c19SLi Feng Wang 	public void testFirstLineOffset() throws Exception {
279*28725c19SLi Feng Wang 		Integer firstLineOffset = -4500;
280*28725c19SLi Feng Wang 		Object numberingrules = m_xtextProps.getPropertyValue("NumberingRules");
281*28725c19SLi Feng Wang 		XIndexAccess xNum = (XIndexAccess) UnoRuntime.queryInterface(XIndexAccess.class,
282*28725c19SLi Feng Wang 				numberingrules);
283*28725c19SLi Feng Wang 		XIndexReplace xReplace = (XIndexReplace) UnoRuntime.queryInterface(
284*28725c19SLi Feng Wang 	             XIndexReplace.class, xNum);
285*28725c19SLi Feng Wang 
286*28725c19SLi Feng Wang 		PropertyValue[] props = new PropertyValue[1];
287*28725c19SLi Feng Wang 		props[0] = new PropertyValue();
288*28725c19SLi Feng Wang 	    props[0].Name = "FirstLineOffset";
289*28725c19SLi Feng Wang 	    props[0].Value = firstLineOffset;
290*28725c19SLi Feng Wang 
291*28725c19SLi Feng Wang 	    xReplace.replaceByIndex(0, props);
292*28725c19SLi Feng Wang 
293*28725c19SLi Feng Wang 	    m_xtextProps.setPropertyValue("NumberingRules", numberingrules);
294*28725c19SLi Feng Wang 
295*28725c19SLi Feng Wang 		app.saveDocument(m_xSDComponent, m_filePath);
296*28725c19SLi Feng Wang 		app.closeDocument(m_xSDComponent);
297*28725c19SLi Feng Wang 		//reopen
298*28725c19SLi Feng Wang 		m_xtextProps = load();
299*28725c19SLi Feng Wang 
300*28725c19SLi Feng Wang 		Object numberingrules2 = m_xtextProps.getPropertyValue("NumberingRules");
301*28725c19SLi Feng Wang 
302*28725c19SLi Feng Wang 		XIndexReplace xReplace2 = (XIndexReplace) UnoRuntime.queryInterface(
303*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules2);
304*28725c19SLi Feng Wang 
305*28725c19SLi Feng Wang 		PropertyValue[] proValues2 = (PropertyValue[])xReplace2.getByIndex(0);
306*28725c19SLi Feng Wang 
307*28725c19SLi Feng Wang 		for(int i=0;i<proValues2.length;i++)
308*28725c19SLi Feng Wang 		{
309*28725c19SLi Feng Wang 			if(proValues2[i].Name.equals("FirstLineOffset"))
310*28725c19SLi Feng Wang 			{
311*28725c19SLi Feng Wang 				assertEquals("SymbolTextDistance should be "+Integer.toString(firstLineOffset),
312*28725c19SLi Feng Wang 						firstLineOffset, proValues2[i].Value);
313*28725c19SLi Feng Wang 				break;
314*28725c19SLi Feng Wang 			}
315*28725c19SLi Feng Wang 		}
316*28725c19SLi Feng Wang 
317*28725c19SLi Feng Wang 	}
318*28725c19SLi Feng Wang 
319*28725c19SLi Feng Wang 	@Test
320*28725c19SLi Feng Wang 	/*Leftmargin: specifies the left margin of the numbering
321*28725c19SLi Feng Wang 	 * GUI entry: Numbering and Bullet dialog->Position->Indent = Leftmargin+FirstLineOffset
322*28725c19SLi Feng Wang 	*/
testLeftMargin()323*28725c19SLi Feng Wang 	public void testLeftMargin() throws Exception {
324*28725c19SLi Feng Wang 		Integer leftMargin = 2000;
325*28725c19SLi Feng Wang 		Object numberingrules = m_xtextProps.getPropertyValue("NumberingRules");
326*28725c19SLi Feng Wang 		XIndexAccess xNum = (XIndexAccess) UnoRuntime.queryInterface(XIndexAccess.class,
327*28725c19SLi Feng Wang 				numberingrules);
328*28725c19SLi Feng Wang 		XIndexReplace xReplace = (XIndexReplace) UnoRuntime.queryInterface(
329*28725c19SLi Feng Wang 	             XIndexReplace.class, xNum);
330*28725c19SLi Feng Wang 
331*28725c19SLi Feng Wang 		PropertyValue[] props = new PropertyValue[1];
332*28725c19SLi Feng Wang 		props[0] = new PropertyValue();
333*28725c19SLi Feng Wang 	    props[0].Name = "LeftMargin";
334*28725c19SLi Feng Wang 	    props[0].Value = leftMargin;
335*28725c19SLi Feng Wang 
336*28725c19SLi Feng Wang 	    xReplace.replaceByIndex(0, props);
337*28725c19SLi Feng Wang 
338*28725c19SLi Feng Wang 	    m_xtextProps.setPropertyValue("NumberingRules", numberingrules);
339*28725c19SLi Feng Wang 
340*28725c19SLi Feng Wang 		app.saveDocument(m_xSDComponent, m_filePath);
341*28725c19SLi Feng Wang 		app.closeDocument(m_xSDComponent);
342*28725c19SLi Feng Wang 		//reopen
343*28725c19SLi Feng Wang 		m_xtextProps = load();
344*28725c19SLi Feng Wang 
345*28725c19SLi Feng Wang 		Object numberingrules2 = m_xtextProps.getPropertyValue("NumberingRules");
346*28725c19SLi Feng Wang 
347*28725c19SLi Feng Wang 		XIndexReplace xReplace2 = (XIndexReplace) UnoRuntime.queryInterface(
348*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules2);
349*28725c19SLi Feng Wang 
350*28725c19SLi Feng Wang 		PropertyValue[] proValues2 = (PropertyValue[])xReplace2.getByIndex(0);
351*28725c19SLi Feng Wang 
352*28725c19SLi Feng Wang 		for(int i=0;i<proValues2.length;i++)
353*28725c19SLi Feng Wang 		{
354*28725c19SLi Feng Wang 			if(proValues2[i].Name.equals("LeftMargin"))
355*28725c19SLi Feng Wang 			{
356*28725c19SLi Feng Wang 				assertEquals("Leftmargin should be "+Integer.toString(leftMargin), leftMargin, proValues2[i].Value);
357*28725c19SLi Feng Wang 				break;
358*28725c19SLi Feng Wang 			}
359*28725c19SLi Feng Wang 		}
360*28725c19SLi Feng Wang 
361*28725c19SLi Feng Wang 	}
362*28725c19SLi Feng Wang 	@Ignore
363*28725c19SLi Feng Wang 	@Test
364*28725c19SLi Feng Wang 	/*symbolTextDistance: specifies the distance between the numbering symbol and the text of the paragraph.
365*28725c19SLi Feng Wang 	*GUI entry: ??
366*28725c19SLi Feng Wang 	*This property cannot be set, it's always the same value as FirstLineOffset
367*28725c19SLi Feng Wang 	*/
testSymbolTextDistance()368*28725c19SLi Feng Wang 	public void testSymbolTextDistance() throws Exception {
369*28725c19SLi Feng Wang 		Integer symbolTextDistance = -2000;
370*28725c19SLi Feng Wang 		Object numberingrules = m_xtextProps.getPropertyValue("NumberingRules");
371*28725c19SLi Feng Wang 		XIndexAccess xNum = (XIndexAccess) UnoRuntime.queryInterface(XIndexAccess.class,
372*28725c19SLi Feng Wang 				numberingrules);
373*28725c19SLi Feng Wang 		XIndexReplace xReplace = (XIndexReplace) UnoRuntime.queryInterface(
374*28725c19SLi Feng Wang 	             XIndexReplace.class, xNum);
375*28725c19SLi Feng Wang 
376*28725c19SLi Feng Wang 		PropertyValue[] props = new PropertyValue[1];
377*28725c19SLi Feng Wang 		props[0] = new PropertyValue();
378*28725c19SLi Feng Wang 	    props[0].Name = "SymbolTextDistance";
379*28725c19SLi Feng Wang 	    props[0].Value = symbolTextDistance;
380*28725c19SLi Feng Wang 
381*28725c19SLi Feng Wang 	    xReplace.replaceByIndex(0, props);
382*28725c19SLi Feng Wang //	    PropertyValue[] proValues = (PropertyValue[])xReplace.getByIndex(0);
383*28725c19SLi Feng Wang //	    for(int m=0;m<proValues.length;m++)
384*28725c19SLi Feng Wang //	    {
385*28725c19SLi Feng Wang //	    	System.out.println(proValues[m].Name+"="+proValues[m].Value);
386*28725c19SLi Feng Wang //	    }
387*28725c19SLi Feng Wang 
388*28725c19SLi Feng Wang 	    m_xtextProps.setPropertyValue("NumberingRules", numberingrules);
389*28725c19SLi Feng Wang 
390*28725c19SLi Feng Wang 		app.saveDocument(m_xSDComponent, m_filePath);
391*28725c19SLi Feng Wang 		app.closeDocument(m_xSDComponent);
392*28725c19SLi Feng Wang 		//reopen
393*28725c19SLi Feng Wang 		m_xtextProps = load();
394*28725c19SLi Feng Wang 
395*28725c19SLi Feng Wang 		Object numberingrules2 = m_xtextProps.getPropertyValue("NumberingRules");
396*28725c19SLi Feng Wang 
397*28725c19SLi Feng Wang 		XIndexReplace xReplace2 = (XIndexReplace) UnoRuntime.queryInterface(
398*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules2);
399*28725c19SLi Feng Wang 
400*28725c19SLi Feng Wang 		PropertyValue[] proValues2 = (PropertyValue[])xReplace2.getByIndex(0);
401*28725c19SLi Feng Wang 
402*28725c19SLi Feng Wang 		for(int i=0;i<proValues2.length;i++)
403*28725c19SLi Feng Wang 		{
404*28725c19SLi Feng Wang 			if(proValues2[i].Name.equals("SymbolTextDistance"))
405*28725c19SLi Feng Wang 			{
406*28725c19SLi Feng Wang 				assertEquals("SymbolTextDistance should be "+Integer.toString(symbolTextDistance),
407*28725c19SLi Feng Wang 						symbolTextDistance, proValues2[i].Value);
408*28725c19SLi Feng Wang 				break;
409*28725c19SLi Feng Wang 			}
410*28725c19SLi Feng Wang 		}
411*28725c19SLi Feng Wang 
412*28725c19SLi Feng Wang 	}
413*28725c19SLi Feng Wang 
414*28725c19SLi Feng Wang 	/*
415*28725c19SLi Feng Wang 	 * Ajust: adjusts the numbering (HoriOrientation_LEFT/RIGHT/CENTER)
416*28725c19SLi Feng Wang 	 * GUI entry: Numbering and Bullet dialog->Position->Numbering alignment
417*28725c19SLi Feng Wang 	 * */
418*28725c19SLi Feng Wang 	@Test
testAjustRight()419*28725c19SLi Feng Wang 	public void testAjustRight() throws Exception {
420*28725c19SLi Feng Wang 		Short ajust = HoriOrientation.RIGHT;
421*28725c19SLi Feng Wang 		setAjust(ajust);
422*28725c19SLi Feng Wang 
423*28725c19SLi Feng Wang 		app.saveDocument(m_xSDComponent, m_filePath);
424*28725c19SLi Feng Wang 		app.closeDocument(m_xSDComponent);
425*28725c19SLi Feng Wang 		//reopen
426*28725c19SLi Feng Wang 		m_xtextProps = load();
427*28725c19SLi Feng Wang 
428*28725c19SLi Feng Wang 		Object numberingrules2 = m_xtextProps.getPropertyValue("NumberingRules");
429*28725c19SLi Feng Wang 
430*28725c19SLi Feng Wang 		XIndexReplace xReplace2 = (XIndexReplace) UnoRuntime.queryInterface(
431*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules2);
432*28725c19SLi Feng Wang 
433*28725c19SLi Feng Wang 		PropertyValue[] proValues2 = (PropertyValue[])xReplace2.getByIndex(0);
434*28725c19SLi Feng Wang 
435*28725c19SLi Feng Wang 		for(int i=0;i<proValues2.length;i++)
436*28725c19SLi Feng Wang 		{
437*28725c19SLi Feng Wang 			if(proValues2[i].Name.equals("Adjust"))
438*28725c19SLi Feng Wang 			{
439*28725c19SLi Feng Wang 				assertEquals("Ajust should be HoriOrientation.RIGHT", HoriOrientation.RIGHT, AnyConverter.toUnsignedShort(proValues2[i].Value));
440*28725c19SLi Feng Wang 				break;
441*28725c19SLi Feng Wang 			}
442*28725c19SLi Feng Wang 		}
443*28725c19SLi Feng Wang 	}
setAjust(Short ajust)444*28725c19SLi Feng Wang 	private void setAjust(Short ajust) throws Exception{
445*28725c19SLi Feng Wang 		Object numberingrules = m_xtextProps.getPropertyValue("NumberingRules");
446*28725c19SLi Feng Wang 
447*28725c19SLi Feng Wang 		XIndexReplace xReplace = (XIndexReplace) UnoRuntime.queryInterface(
448*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules);
449*28725c19SLi Feng Wang 
450*28725c19SLi Feng Wang 		PropertyValue[] props = new PropertyValue[1];
451*28725c19SLi Feng Wang 		props[0] = new PropertyValue();
452*28725c19SLi Feng Wang 	    props[0].Name = "Adjust";
453*28725c19SLi Feng Wang 	    props[0].Value = ajust;
454*28725c19SLi Feng Wang 
455*28725c19SLi Feng Wang 	    xReplace.replaceByIndex(0, props);
456*28725c19SLi Feng Wang 
457*28725c19SLi Feng Wang 	    m_xtextProps.setPropertyValue("NumberingRules", numberingrules);
458*28725c19SLi Feng Wang 	}
459*28725c19SLi Feng Wang 
460*28725c19SLi Feng Wang 	/*
461*28725c19SLi Feng Wang 	 * Ajust: adjusts the numbering (HoriOrientation_LEFT/RIGHT/CENTER)
462*28725c19SLi Feng Wang 	 * GUI entry: Numbering and Bullet dialog->Position->Numbering alignment
463*28725c19SLi Feng Wang 	 * */
464*28725c19SLi Feng Wang 	@Test
testAjustCenter()465*28725c19SLi Feng Wang 	public void testAjustCenter() throws Exception {
466*28725c19SLi Feng Wang 		Short ajust = HoriOrientation.CENTER;
467*28725c19SLi Feng Wang 		setAjust(ajust);
468*28725c19SLi Feng Wang 		app.saveDocument(m_xSDComponent, m_filePath);
469*28725c19SLi Feng Wang 		app.closeDocument(m_xSDComponent);
470*28725c19SLi Feng Wang 		//reopen
471*28725c19SLi Feng Wang 		m_xtextProps = load();
472*28725c19SLi Feng Wang 
473*28725c19SLi Feng Wang 		Object numberingrules2 = m_xtextProps.getPropertyValue("NumberingRules");
474*28725c19SLi Feng Wang 
475*28725c19SLi Feng Wang 		XIndexReplace xReplace2 = (XIndexReplace) UnoRuntime.queryInterface(
476*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules2);
477*28725c19SLi Feng Wang 
478*28725c19SLi Feng Wang 		PropertyValue[] proValues2 = (PropertyValue[])xReplace2.getByIndex(0);
479*28725c19SLi Feng Wang 		String sAdjust = Short.toString(ajust);
480*28725c19SLi Feng Wang 		for(int i=0;i<proValues2.length;i++)
481*28725c19SLi Feng Wang 		{
482*28725c19SLi Feng Wang 			if(proValues2[i].Name.equals("Adjust"))
483*28725c19SLi Feng Wang 			{
484*28725c19SLi Feng Wang 				assertEquals("Ajust should be HoriOrientation.CENTER", HoriOrientation.CENTER, AnyConverter.toUnsignedShort(proValues2[i].Value));
485*28725c19SLi Feng Wang 				break;
486*28725c19SLi Feng Wang 			}
487*28725c19SLi Feng Wang 		}
488*28725c19SLi Feng Wang 
489*28725c19SLi Feng Wang 	}
490*28725c19SLi Feng Wang 
491*28725c19SLi Feng Wang 	/*
492*28725c19SLi Feng Wang 	 * Ajust: adjusts the numbering (HoriOrientation_LEFT/RIGHT/CENTER)
493*28725c19SLi Feng Wang 	 * GUI entry: Numbering and Bullet dialog->Position->Numbering alignment
494*28725c19SLi Feng Wang 	 * */
495*28725c19SLi Feng Wang 	@Test
testAjustLeft()496*28725c19SLi Feng Wang 	public void testAjustLeft() throws Exception {
497*28725c19SLi Feng Wang 		Short ajust = HoriOrientation.LEFT;
498*28725c19SLi Feng Wang 		setAjust(ajust);
499*28725c19SLi Feng Wang 		app.saveDocument(m_xSDComponent, m_filePath);
500*28725c19SLi Feng Wang 		app.closeDocument(m_xSDComponent);
501*28725c19SLi Feng Wang 		//reopen
502*28725c19SLi Feng Wang 		m_xtextProps = load();
503*28725c19SLi Feng Wang 
504*28725c19SLi Feng Wang 		Object numberingrules2 = m_xtextProps.getPropertyValue("NumberingRules");
505*28725c19SLi Feng Wang 
506*28725c19SLi Feng Wang 		XIndexReplace xReplace2 = (XIndexReplace) UnoRuntime.queryInterface(
507*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules2);
508*28725c19SLi Feng Wang 
509*28725c19SLi Feng Wang 		PropertyValue[] proValues2 = (PropertyValue[])xReplace2.getByIndex(0);
510*28725c19SLi Feng Wang 		String sAdjust = Short.toString(ajust);
511*28725c19SLi Feng Wang 		for(int i=0;i<proValues2.length;i++)
512*28725c19SLi Feng Wang 		{
513*28725c19SLi Feng Wang 			if(proValues2[i].Name.equals("Adjust"))
514*28725c19SLi Feng Wang 			{
515*28725c19SLi Feng Wang 				assertEquals("Ajust should be HoriOrientation.LEFT",
516*28725c19SLi Feng Wang 						HoriOrientation.LEFT, AnyConverter.toUnsignedShort(proValues2[i].Value));
517*28725c19SLi Feng Wang 				break;
518*28725c19SLi Feng Wang 			}
519*28725c19SLi Feng Wang 		}
520*28725c19SLi Feng Wang 	}
521*28725c19SLi Feng Wang 
522*28725c19SLi Feng Wang 	@Test
523*28725c19SLi Feng Wang 	/*BulletColor: contains the color for the symbol.
524*28725c19SLi Feng Wang 	 * In SDK docs it says this is only valid if the numbering type is NumberingType::CHAR_SPECIAL.
525*28725c19SLi Feng Wang 	 * But infact it also valid here
526*28725c19SLi Feng Wang 	*GUI entry: Bullet and Numbering dialog->Customize->Color
527*28725c19SLi Feng Wang 	*/
testSymbolColor()528*28725c19SLi Feng Wang 	public void testSymbolColor() throws Exception {
529*28725c19SLi Feng Wang 		Object numberingrules = m_xtextProps.getPropertyValue("NumberingRules");
530*28725c19SLi Feng Wang 
531*28725c19SLi Feng Wang 		XIndexReplace xReplace = (XIndexReplace) UnoRuntime.queryInterface(
532*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules);
533*28725c19SLi Feng Wang 
534*28725c19SLi Feng Wang 		PropertyValue[] props = new PropertyValue[1];
535*28725c19SLi Feng Wang 		props[0] = new PropertyValue();
536*28725c19SLi Feng Wang 	    props[0].Name = "BulletColor";
537*28725c19SLi Feng Wang 	    props[0].Value = new Integer(255);
538*28725c19SLi Feng Wang 
539*28725c19SLi Feng Wang 	    xReplace.replaceByIndex(0, props);
540*28725c19SLi Feng Wang 
541*28725c19SLi Feng Wang 	    m_xtextProps.setPropertyValue("NumberingRules", numberingrules);
542*28725c19SLi Feng Wang 
543*28725c19SLi Feng Wang 		app.saveDocument(m_xSDComponent, m_filePath);
544*28725c19SLi Feng Wang 		app.closeDocument(m_xSDComponent);
545*28725c19SLi Feng Wang 		//reopen
546*28725c19SLi Feng Wang 		m_xtextProps = load();
547*28725c19SLi Feng Wang 
548*28725c19SLi Feng Wang 		Object numberingrules2 = m_xtextProps.getPropertyValue("NumberingRules");
549*28725c19SLi Feng Wang 
550*28725c19SLi Feng Wang 		XIndexReplace xReplace2 = (XIndexReplace) UnoRuntime.queryInterface(
551*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules2);
552*28725c19SLi Feng Wang 
553*28725c19SLi Feng Wang 		PropertyValue[] proValues2 = (PropertyValue[])xReplace2.getByIndex(0);
554*28725c19SLi Feng Wang 
555*28725c19SLi Feng Wang 		for(int i=0;i<proValues2.length;i++)
556*28725c19SLi Feng Wang 		{
557*28725c19SLi Feng Wang 
558*28725c19SLi Feng Wang 			if(proValues2[i].Name.equals("BulletColor"))
559*28725c19SLi Feng Wang 			{
560*28725c19SLi Feng Wang 				assertEquals("BulletColor should be Blue",
561*28725c19SLi Feng Wang 						new Integer(255), proValues2[i].Value);
562*28725c19SLi Feng Wang 				break;
563*28725c19SLi Feng Wang 			}
564*28725c19SLi Feng Wang 		}
565*28725c19SLi Feng Wang 
566*28725c19SLi Feng Wang 	}
567*28725c19SLi Feng Wang 
568*28725c19SLi Feng Wang 	@Test
569*28725c19SLi Feng Wang 	/*BulletRelSize: contains the size of the symbol relative to the high of the paragraph
570*28725c19SLi Feng Wang 	 * In SDK docs it says this is only valid if the numbering type is NumberingType::CHAR_SPECIAL.
571*28725c19SLi Feng Wang 	 * But in fact it also valid here
572*28725c19SLi Feng Wang 	*GUI entry: Bullet and Numbering dialog->Customize->Relative Size
573*28725c19SLi Feng Wang 	*/
testSymbolSize()574*28725c19SLi Feng Wang 	public void testSymbolSize() throws Exception {
575*28725c19SLi Feng Wang 		Object numberingrules = m_xtextProps.getPropertyValue("NumberingRules");
576*28725c19SLi Feng Wang 
577*28725c19SLi Feng Wang 		XIndexReplace xReplace = (XIndexReplace) UnoRuntime.queryInterface(
578*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules);
579*28725c19SLi Feng Wang 
580*28725c19SLi Feng Wang 		PropertyValue[] props = new PropertyValue[1];
581*28725c19SLi Feng Wang 		props[0] = new PropertyValue();
582*28725c19SLi Feng Wang 	    props[0].Name = "BulletRelSize";
583*28725c19SLi Feng Wang 	    props[0].Value = new Short((short)100);
584*28725c19SLi Feng Wang 
585*28725c19SLi Feng Wang 	    xReplace.replaceByIndex(0, props);
586*28725c19SLi Feng Wang 
587*28725c19SLi Feng Wang 	    m_xtextProps.setPropertyValue("NumberingRules", numberingrules);
588*28725c19SLi Feng Wang 
589*28725c19SLi Feng Wang 		app.saveDocument(m_xSDComponent, m_filePath);
590*28725c19SLi Feng Wang 		app.closeDocument(m_xSDComponent);
591*28725c19SLi Feng Wang 		//reopen
592*28725c19SLi Feng Wang 		m_xtextProps = load();
593*28725c19SLi Feng Wang 
594*28725c19SLi Feng Wang 		Object numberingrules2 = m_xtextProps.getPropertyValue("NumberingRules");
595*28725c19SLi Feng Wang 
596*28725c19SLi Feng Wang 		XIndexReplace xReplace2 = (XIndexReplace) UnoRuntime.queryInterface(
597*28725c19SLi Feng Wang 	             XIndexReplace.class, numberingrules2);
598*28725c19SLi Feng Wang 
599*28725c19SLi Feng Wang 		PropertyValue[] proValues2 = (PropertyValue[])xReplace2.getByIndex(0);
600*28725c19SLi Feng Wang 
601*28725c19SLi Feng Wang 		for(int i=0;i<proValues2.length;i++)
602*28725c19SLi Feng Wang 		{
603*28725c19SLi Feng Wang 			if(proValues2[i].Name.equals("BulletRelSize"))
604*28725c19SLi Feng Wang 			{
605*28725c19SLi Feng Wang 				assertEquals("BulletRelSize should be 100%",
606*28725c19SLi Feng Wang 						new Short((short)100), proValues2[i].Value);
607*28725c19SLi Feng Wang 				break;
608*28725c19SLi Feng Wang 			}
609*28725c19SLi Feng Wang 		}
610*28725c19SLi Feng Wang 
611*28725c19SLi Feng Wang 	}
612*28725c19SLi Feng Wang 
613*28725c19SLi Feng Wang }
614