Version 3.6.0.4, tag libreoffice-3.6.0.4
[LibreOffice.git] / qadevOOo / tests / java / ifc / style / _ParagraphProperties.java
blobe55e35667cceaa2ecda0e8722500e7eb57630a9c
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2000, 2010 Oracle and/or its affiliates.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * This file is part of OpenOffice.org.
11 * OpenOffice.org is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License version 3
13 * only, as published by the Free Software Foundation.
15 * OpenOffice.org is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License version 3 for more details
19 * (a copy is included in the LICENSE file that accompanied this code).
21 * You should have received a copy of the GNU Lesser General Public License
22 * version 3 along with OpenOffice.org. If not, see
23 * <http://www.openoffice.org/license.html>
24 * for a copy of the LGPLv3 License.
26 ************************************************************************/
27 package ifc.style;
29 import com.sun.star.beans.PropertyValue;
30 import com.sun.star.beans.UnknownPropertyException;
31 import com.sun.star.container.XIndexReplace;
32 import com.sun.star.container.XNameContainer;
33 import com.sun.star.lang.WrappedTargetException;
34 import com.sun.star.uno.AnyConverter;
35 import com.sun.star.uno.Type;
36 import com.sun.star.xml.AttributeData;
37 import ifc.text._NumberingLevel;
38 import java.util.Enumeration;
39 import java.util.Hashtable;
41 import lib.MultiPropertyTest;
42 import lib.Status;
43 import share.LogWriter;
46 import util.utils;
49 /**
50 * Testing <code>com.sun.star.style.ParagraphProperties</code>
51 * service properties :
52 * <ul>
53 * <li><code> ParaAdjust</code></li>
54 * <li><code> ParaLineSpacing</code></li>
55 * <li><code> ParaBackColor</code></li>
56 * <li><code> ParaBackTransparent</code></li>
57 * <li><code> ParaBackGraphicURL</code></li>
58 * <li><code> ParaBackGraphicFilter</code></li>
59 * <li><code> ParaBackGraphicLocation</code></li>
60 * <li><code> ParaLastLineAdjust</code></li>
61 * <li><code> ParaExpandSingleWord</code></li>
62 * <li><code> ParaLeftMargin</code></li>
63 * <li><code> ParaRightMargin</code></li>
64 * <li><code> ParaTopMargin</code></li>
65 * <li><code> ParaBottomMargin</code></li>
66 * <li><code> ParaLineNumberCount</code></li>
67 * <li><code> ParaLineNumberStartValue</code></li>
68 * <li><code> ParaIsHyphenation</code></li>
69 * <li><code> PageDescName</code></li>
70 * <li><code> PageNumberOffset</code></li>
71 * <li><code> ParaRegisterModeActive</code></li>
72 * <li><code> ParaTabStops</code></li>
73 * <li><code> ParaStyleName</code></li>
74 * <li><code> DropCapFormat</code></li>
75 * <li><code> DropCapWholeWord</code></li>
76 * <li><code> ParaKeepTogether</code></li>
77 * <li><code> ParaSplit</code></li>
78 * <li><code> NumberingLevel</code></li>
79 * <li><code> NumberingRules</code></li>
80 * <li><code> NumberingStartValue</code></li>
81 * <li><code> ParaIsNumberingRestart</code></li>
82 * <li><code> NumberingStyleName</code></li>
83 * <li><code> ParaOrphans</code></li>
84 * <li><code> ParaWidows</code></li>
85 * <li><code> ParaShadowFormat</code></li>
86 * <li><code> IsHangingPunctuation</code></li>
87 * <li><code> IsCharacterDistance</code></li>
88 * <li><code> IsForbiddenRules</code></li>
89 * <li><code> LeftBorder</code></li>
90 * <li><code> RightBorder</code></li>
91 * <li><code> TopBorder</code></li>
92 * <li><code> BottomBorder</code></li>
93 * <li><code> BorderDistance</code></li>
94 * <li><code> LeftBorderDistance</code></li>
95 * <li><code> RightBorderDistance</code></li>
96 * <li><code> TopBorderDistance</code></li>
97 * <li><code> BottomBorderDistance</code></li>
98 * </ul> <p>
99 * This test needs the following object relations :
100 * <ul>
101 * <li> <code>'NRULES'</code> : <b>optional</b>
102 * (service <code>com.sun.star.text.NumberingRules</code>):
103 * instance of the service which can be set as 'NumberingRules'
104 * property new value. If the relation doesn't then two
105 * different <code>NumberingRules</code> objects are tried
106 * to be obtained by setting different 'NumberingStyleName'
107 * property styles and getting 'NumberingRules' property values.</li>
108 * <ul> <p>
109 * Properties testing is automated by <code>lib.MultiPropertyTest</code>.
110 * @see com.sun.star.style.ParagraphProperties
112 public class _ParagraphProperties extends MultiPropertyTest {
114 * Custom tester for numbering style properties. Switches between
115 * 'Numbering 1' and 'Numbering 2' styles.
117 protected PropertyTester NumberingStyleTester = new PropertyTester() {
118 protected Object getNewValue(String propName, Object oldValue)
119 throws java.lang.IllegalArgumentException {
120 if ((oldValue != null) && (oldValue.equals("Numbering 1"))) {
121 return "Numbering 2";
122 } else {
123 return "Numbering 1";
129 * Custom tester for paragraph style properties. Switches between
130 * 'Salutation' and 'Heading' styles.
132 protected PropertyTester charStyleTester = new PropertyTester() {
133 protected Object getNewValue(String propName, Object oldValue) {
134 if (!utils.isVoid(oldValue) && (oldValue.equals("Example"))) {
135 return "Emphasis";
136 } else {
137 return "Example";
143 * Custom tester for paragraph style properties. Switches between
144 * 'Salutation' and 'Heading' styles.
146 protected PropertyTester ParaStyleTester = new PropertyTester() {
147 protected Object getNewValue(String propName, Object oldValue) {
148 if (!utils.isVoid(oldValue) && (oldValue.equals("Heading"))) {
149 return "Salutation";
150 } else {
151 return "Heading";
157 * Custom tester for PageDescName properties. Switches between
158 * 'HTML' and 'Standard' descriptor names.
160 protected PropertyTester PageDescTester = new PropertyTester() {
161 protected Object getNewValue(String propName, Object oldValue) {
162 if (!util.utils.isVoid(oldValue) &&
163 (oldValue.equals("Default"))) {
164 return "HTML";
165 } else {
166 return "Default";
172 * Custom tester for properties which have <code>short</code> type
173 * and can be void, so if they have void value, the new value must
174 * be specified. Switches between two different values.
176 protected PropertyTester ShortTester = new PropertyTester() {
177 protected Object getNewValue(String propName, Object oldValue) {
178 if ((oldValue != null) &&
179 (oldValue.equals(new Short((short) 0)))) {
180 return new Short((short) 2);
181 } else {
182 return new Short((short) 0);
188 * Custom tester for properties which have <code>boolean</code> type
189 * and can be void, so if they have void value, the new value must
190 * be specified. Switches between true and false.
192 protected PropertyTester BooleanTester = new PropertyTester() {
193 protected Object getNewValue(String propName, Object oldValue) {
194 if ((oldValue != null) &&
195 (oldValue.equals(new Boolean((boolean) false)))) {
196 return new Boolean((boolean) true);
197 } else {
198 return new Boolean((boolean) false);
204 * Custom tester for properties which contains image URLs.
205 * Switches between two JPG images' URLs.
207 protected PropertyTester URLTester = new PropertyTester() {
208 protected Object getNewValue(String propName, Object oldValue) {
209 if (oldValue.equals(util.utils.getFullTestURL("space-metal.jpg"))) {
210 return util.utils.getFullTestURL("crazy-blue.jpg");
211 } else {
212 return util.utils.getFullTestURL("space-metal.jpg");
217 protected PropertyTester rules = null;
220 * Creates tester for 'NumberingRules' depending on relation.
222 public void before() {
223 final Object nRules = tEnv.getObjRelation("NRULES");
225 if (nRules != null) {
226 rules = new PropertyTester() {
227 protected Object getNewValue(String propName, Object oldValue) {
228 return nRules;
232 } else {
233 Object rules1 = null;
234 Object rules2 = null;
236 try {
237 oObj.setPropertyValue("NumberingStyleName", "Numbering 1");
238 rules1 = oObj.getPropertyValue("NumberingRules");
239 oObj.setPropertyValue("NumberingStyleName", "Numbering 2");
240 rules2 = oObj.getPropertyValue("NumberingRules");
241 } catch (com.sun.star.lang.WrappedTargetException e) {
242 log.println("WARNING !!! Exception getting numbering rules :");
243 e.printStackTrace(log);
244 } catch (com.sun.star.lang.IllegalArgumentException e) {
245 log.println("WARNING !!! Exception getting numbering rules :");
246 e.printStackTrace(log);
247 } catch (com.sun.star.beans.PropertyVetoException e) {
248 log.println("WARNING !!! Exception getting numbering rules :");
249 e.printStackTrace(log);
250 } catch (com.sun.star.beans.UnknownPropertyException e) {
251 log.println("Property 'NumberingStyleName' is not supported.");
254 rules = new PropertyValueSwitcher(rules1, rules2);
259 * Tested with custom property tester.
261 public void _NumberingStyleName() {
262 log.println("Testing with custom Property tester");
263 testProperty("NumberingStyleName", NumberingStyleTester);
267 * Tested with custom property tester.
269 public void _DropCapCharStyleName() {
270 log.println("Testing with custom Property tester");
271 testProperty("DropCapCharStyleName", charStyleTester);
275 * Tested with custom property tester.
277 public void _ParaStyleName() {
278 log.println("Testing with custom Property tester");
279 testProperty("ParaStyleName", ParaStyleTester);
283 * Tested with custom property tester.
285 public void _PageDescName() {
286 log.println("Testing with custom Property tester");
287 testProperty("PageDescName", PageDescTester);
291 * Tested with custom property tester. Before testing property
292 * <code>ParaAdjust</code> is setting to value <code>BLOCK</code>
293 * because setting the property <code>ParaLastLineAdjust</code>
294 * makes sense only in this case.
296 public void _ParaLastLineAdjust() {
297 log.println("Testing with custom Property tester");
299 try {
300 oObj.setPropertyValue("ParaAdjust",
301 com.sun.star.style.ParagraphAdjust.BLOCK);
302 } catch (com.sun.star.lang.WrappedTargetException e) {
303 log.println("Exception occurred setting property 'ParagraphAdjust'" + e);
304 } catch (com.sun.star.lang.IllegalArgumentException e) {
305 log.println("Exception occurred setting property 'ParagraphAdjust'" + e);
306 } catch (com.sun.star.beans.UnknownPropertyException e) {
307 log.println("Exception occurred setting property 'ParagraphAdjust'" + e);
308 } catch (com.sun.star.beans.PropertyVetoException e) {
309 log.println("Exception occurred setting property 'ParagraphAdjust'" + e);
312 testProperty("ParaLastLineAdjust", ShortTester);
316 * Tested with custom property tester.
318 public void _ParaBackGraphicURL() {
319 log.println("Testing with custom Property tester");
320 testProperty("ParaBackGraphicURL", URLTester);
324 * Tested with custom property tester. <p>
325 * The following property tests are to be completed successfully before :
326 * <ul>
327 * <li> <code> NumberingStyleName </code> : a numbering style must
328 * be set before testing this property </li>
329 * </ul>
331 public void _NumberingLevel() {
332 requiredMethod("NumberingStyleName");
333 log.println("Testing with custom Property tester");
334 testProperty("NumberingLevel", ShortTester);
338 * Tested with custom property tester. <p>
340 public void _ParaIsConnectBorder() {
342 log.println("Testing with custom Property tester");
343 testProperty("ParaIsConnectBorder", BooleanTester);
347 * Tested with custom property tester.
349 public void _ParaVertAlignment() {
350 log.println("Testing with custom Property tester");
351 testProperty("ParaVertAlignment", ShortTester);
355 * Tested with com.sun.star.text.NumberingLevel <p>
356 * The value of this property is a com.sun.star.container.XIndexReplace which is represneted by
357 * com.sun.star.text.NumberingLevel.
358 * The following property tests are to be completed successfully before :
359 * <ul>
360 * <li> <code> NumberingStyleName </code> : a numbering style must
361 * be set before testing this property </li>
362 * </ul>
363 * @see com.sun.star.text.NumberlingLevel
364 * @see com.sun.star.container.XIndexReplace
365 * @see ifc.text._NumberingLevel
367 public void _NumberingRules() {
368 requiredMethod("NumberingStyleName");
370 XIndexReplace NumberingRules = null;
371 PropertyValue[] propertyValues = null;
372 try {
373 NumberingRules = (XIndexReplace) AnyConverter.toObject(
374 new Type(XIndexReplace.class), oObj.getPropertyValue("NumberingRules"));
375 } catch (com.sun.star.lang.IllegalArgumentException ex) {
376 Status.failed( "could not get NumberingRuels: "+ ex.toString() );
377 return;
378 } catch (UnknownPropertyException ex) {
379 Status.failed( "could not get NumberingRuels: "+ ex.toString() );
380 return;
381 } catch (WrappedTargetException ex) {
382 Status.failed( "could not get NumberingRuels: "+ ex.toString() );
383 return;
385 try {
386 propertyValues = (PropertyValue[]) NumberingRules.getByIndex(0);
388 } catch (com.sun.star.lang.IndexOutOfBoundsException ex) {
389 Status.failed( "could not get NumberlingLevel-Array from NumberingRuels: "+ ex.toString() );
390 return;
391 } catch (WrappedTargetException ex) {
392 Status.failed( "could not get NumberlingLevel-Array from NumberingRuels: "+ ex.toString() );
393 return;
396 _NumberingLevel numb = new _NumberingLevel((LogWriter)log, tParam, propertyValues);
398 boolean result = numb.testPropertieArray();
400 tRes.tested("NumberingRules", result);
403 public void _ParaUserDefinedAttributes() {
404 XNameContainer uda = null;
405 boolean res = false;
407 try {
408 try{
409 uda = (XNameContainer) AnyConverter.toObject(
410 new Type(XNameContainer.class),
411 oObj.getPropertyValue("ParaUserDefinedAttributes"));
412 } catch (com.sun.star.lang.IllegalArgumentException e){
413 log.println("ParaUserDefinedAttributes is empty.");
414 uda = new _ParagraphProperties.OwnUserDefinedAttributes();
416 AttributeData attr = new AttributeData();
417 attr.Namespace = "http://www.sun.com/staroffice/apitest/Cellprop";
418 attr.Type = "CDATA";
419 attr.Value = "true";
420 uda.insertByName("Cellprop:has-first-alien-attribute", attr);
422 String[] els = uda.getElementNames();
423 oObj.setPropertyValue("ParaUserDefinedAttributes", uda);
424 uda = (XNameContainer) AnyConverter.toObject(
425 new Type(XNameContainer.class),
426 oObj.getPropertyValue("ParaUserDefinedAttributes"));
427 els = uda.getElementNames();
429 Object obj = uda.getByName("Cellprop:has-first-alien-attribute");
430 res = true;
431 } catch (com.sun.star.beans.UnknownPropertyException upe) {
432 if (isOptional("ParaUserDefinedAttributes")) {
433 log.println("Property is optional and not supported");
434 res = true;
435 } else {
436 log.println("Don't know the Property 'ParaUserDefinedAttributes'");
438 } catch (com.sun.star.lang.WrappedTargetException wte) {
439 log.println(
440 "WrappedTargetException while getting Property 'ParaUserDefinedAttributes'");
441 } catch (com.sun.star.container.NoSuchElementException nee) {
442 log.println("added Element isn't part of the NameContainer");
443 } catch (com.sun.star.lang.IllegalArgumentException iae) {
444 log.println(
445 "IllegalArgumentException while getting Property 'ParaUserDefinedAttributes'");
446 } catch (com.sun.star.beans.PropertyVetoException pve) {
447 log.println(
448 "PropertyVetoException while getting Property 'ParaUserDefinedAttributes'");
449 } catch (com.sun.star.container.ElementExistException eee) {
450 log.println(
451 "ElementExistException while getting Property 'ParaUserDefinedAttributes'");
454 tRes.tested("ParaUserDefinedAttributes", res);
457 private class OwnUserDefinedAttributes implements XNameContainer{
458 Hashtable members = null;
461 public OwnUserDefinedAttributes() {
462 members = new Hashtable();
465 public Object getByName(String str) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException {
466 return members.get(str);
469 public String[] getElementNames() {
470 Enumeration oEnum = members.keys();
471 int count = members.size();
472 String[] res = new String[count];
473 int i=0;
474 while(oEnum.hasMoreElements())
475 res[i] = (String)oEnum.nextElement();
476 return res;
479 public com.sun.star.uno.Type getElementType() {
480 Enumeration oEnum = members.keys();
481 String key = (String)oEnum.nextElement();
482 Object o = members.get(key);
483 return new Type(o.getClass());
486 public boolean hasByName(String str) {
487 return members.get(str) != null;
490 public boolean hasElements() {
491 return members.size() > 0;
494 public void insertByName(String str, Object obj) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.container.ElementExistException, com.sun.star.lang.WrappedTargetException {
495 members.put(str, obj);
498 public void removeByName(String str) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException {
499 members.remove(str);
502 public void replaceByName(String str, Object obj) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException {
503 members.put(str, obj);
507 } // finish class _ParagraphProperties