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