1 // package name: as default, start with complex
5 import complexlib
.ComplexTestCase
;
6 import com
.sun
.star
.uno
.XInterface
;
7 import com
.sun
.star
.uno
.UnoRuntime
;
8 import com
.sun
.star
.uno
.Type
;
9 import com
.sun
.star
.uno
.XComponentContext
;
11 import java
.io
.PrintWriter
;
12 import java
.util
.Hashtable
;
14 import com
.sun
.star
.lang
.*;
15 import com
.sun
.star
.beans
.*;
16 import com
.sun
.star
.frame
.*;
17 import com
.sun
.star
.chart
.*;
18 import com
.sun
.star
.drawing
.*;
19 import com
.sun
.star
.awt
.*;
20 import com
.sun
.star
.container
.*;
21 import com
.sun
.star
.util
.XCloseable
;
22 import com
.sun
.star
.util
.CloseVetoException
;
24 import com
.sun
.star
.uno
.AnyConverter
;
25 import com
.sun
.star
.comp
.helper
.ComponentContext
;
28 * The following Complex Test will test the
29 * com.sun.star.document.IndexedPropertyValues
33 public class TestCaseOldAPI
extends ComplexTestCase
{
35 // The name of the tested service
36 private final String testedServiceName
=
37 "com.sun.star.chart.ChartDocument";
39 // The first of the mandatory functions:
41 * Return the name of the test.
42 * In this case it is the actual name of the service.
43 * @return The tested service.
45 public String
getTestObjectName() {
46 return testedServiceName
;
49 // The second of the mandatory functions: return all test methods as an
50 // array. There is only one test function in this example.
52 * Return all test methods.
53 * @return The test methods.
55 public String
[] getTestMethodNames() {
56 // For some tests a view needs to be created. Accessing the model via
57 // this program and the view may lead to problems
58 boolean bAvoidViewCreation
= false;
60 if( bAvoidViewCreation
)
67 "testDataSeriesAndPoints",
83 "testDataSeriesAndPoints",
93 // set to "true" to get a view
97 mxChartModel
= createDocument( "schart" );
99 mxChartModel
= createChartModel();
101 mxOldDoc
= (XChartDocument
) UnoRuntime
.queryInterface(
102 XChartDocument
.class, mxChartModel
);
109 XCloseable xCloseable
= (XCloseable
) UnoRuntime
.queryInterface(
110 XCloseable
.class, mxChartModel
);
111 assure( "document is no XCloseable", xCloseable
!= null );
113 // do not close document if there exists a view
118 xCloseable
.close( true );
120 catch( CloseVetoException ex
)
122 failed( ex
.getMessage() );
123 ex
.printStackTrace( (PrintWriter
)log
);
130 public void testTitle()
134 XPropertySet xDocProp
= (XPropertySet
) UnoRuntime
.queryInterface(
135 XPropertySet
.class, mxOldDoc
);
136 assure( "Chart Document is no XPropertySet", xDocProp
!= null );
137 xDocProp
.setPropertyValue( "HasMainTitle", new Boolean( true ));
138 assure( "Property HasMainTitle", AnyConverter
.toBoolean(
139 xDocProp
.getPropertyValue( "HasMainTitle" )));
141 XShape xTitleShape
= mxOldDoc
.getTitle();
142 XPropertySet xTitleProp
= (XPropertySet
) UnoRuntime
.queryInterface(
143 XPropertySet
.class, xTitleShape
);
145 // set property via old API
146 if( xTitleProp
!= null )
148 String aTitle
= " Overwritten by Old API ";
149 float fHeight
= (float)17.0;
151 xTitleProp
.setPropertyValue( "String", aTitle
);
152 xTitleProp
.setPropertyValue( "CharHeight", new Float( fHeight
) );
154 float fNewHeight
= AnyConverter
.toFloat( xTitleProp
.getPropertyValue( "CharHeight" ) );
155 assure( "Changing CharHeight via old API failed", fNewHeight
== fHeight
);
157 String aNewTitle
= AnyConverter
.toString( xTitleProp
.getPropertyValue( "String" ) );
158 assure( "Property \"String\" failed", aNewTitle
.equals( aTitle
));
162 Point aSetPos
= new Point();
165 xTitleShape
.setPosition( aSetPos
);
167 Point aNewPos
= xTitleShape
.getPosition();
168 assure( "Title Position X", approxEqual( aNewPos
.X
, aSetPos
.X
, 1 ));
169 assure( "Title Position Y", approxEqual( aNewPos
.Y
, aSetPos
.Y
, 1 ));
171 catch( Exception ex
)
173 failed( ex
.getMessage() );
174 ex
.printStackTrace( (PrintWriter
)log
);
180 public void testSubTitle()
184 XPropertySet xDocProp
= (XPropertySet
) UnoRuntime
.queryInterface(
185 XPropertySet
.class, mxOldDoc
);
186 assure( "Chart Document is no XPropertySet", xDocProp
!= null );
187 xDocProp
.setPropertyValue( "HasSubTitle", new Boolean( true ));
188 assure( "Property HasSubTitle", AnyConverter
.toBoolean(
189 xDocProp
.getPropertyValue( "HasSubTitle" )));
191 XShape xTitleShape
= mxOldDoc
.getSubTitle();
192 XPropertySet xTitleProp
= (XPropertySet
) UnoRuntime
.queryInterface(
193 XPropertySet
.class, xTitleShape
);
195 // set Property via old API
196 if( xTitleProp
!= null )
198 int nColor
= 0x009acd; // DeepSkyBlue3
199 float fWeight
= FontWeight
.BOLD
;
200 float fHeight
= (float)14.0;
202 xTitleProp
.setPropertyValue( "CharColor", new Integer( nColor
) );
203 xTitleProp
.setPropertyValue( "CharWeight", new Float( fWeight
));
204 xTitleProp
.setPropertyValue( "CharHeight", new Float( fHeight
) );
206 int nNewColor
= AnyConverter
.toInt( xTitleProp
.getPropertyValue( "CharColor" ) );
207 assure( "Changing CharColor via old API failed", nNewColor
== nColor
);
209 float fNewWeight
= AnyConverter
.toFloat( xTitleProp
.getPropertyValue( "CharWeight" ) );
210 assure( "Changing CharWeight via old API failed", fNewWeight
== fWeight
);
212 float fNewHeight
= AnyConverter
.toFloat( xTitleProp
.getPropertyValue( "CharHeight" ) );
213 assure( "Changing CharHeight via old API failed", fNewHeight
== fHeight
);
216 catch( Exception ex
)
218 failed( ex
.getMessage() );
219 ex
.printStackTrace( (PrintWriter
)log
);
225 public void testDiagram()
230 XDiagram xDia
= mxOldDoc
.getDiagram();
233 X3DDisplay xDisp
= (X3DDisplay
) UnoRuntime
.queryInterface(
234 X3DDisplay
.class, xDia
);
235 assure( "X3DDisplay not supported", xDisp
!= null );
238 XPropertySet xProp
= xDisp
.getWall();
241 int nColor
= 0xffe1ff; // thistle1
242 xProp
.setPropertyValue( "FillColor", new Integer( nColor
) );
243 int nNewColor
= AnyConverter
.toInt( xProp
.getPropertyValue( "FillColor" ) );
244 assure( "Changing FillColor via old API failed", nNewColor
== nColor
);
247 assure( "Wrong Diagram Type", xDia
.getDiagramType().equals(
248 "com.sun.star.chart.BarDiagram" ));
250 // Diagram properties
251 xProp
= (XPropertySet
) UnoRuntime
.queryInterface( XPropertySet
.class, xDia
);
252 assure( "Diagram is no property set", xProp
!= null );
255 boolean bFirstYAxisText
= false;
256 xProp
.setPropertyValue( "HasYAxisDescription", new Boolean( bFirstYAxisText
));
257 boolean bNewFirstYAxisText
= AnyConverter
.toBoolean(
258 xProp
.getPropertyValue( "HasYAxisDescription" ));
259 assure( "Removing description of first y-axis", bNewFirstYAxisText
== bFirstYAxisText
);
261 // boolean bYAxisTitle = true;
262 // xProp.setPropertyValue( "HasYAxisTitle", new Boolean( bYAxisTitle ));
263 // boolean bNewYAxisTitle = AnyConverter.toBoolean(
264 // xProp.getPropertyValue( "HasYAxisTitle" ));
265 // assure( "Adding y-axis title", bNewYAxisTitle == bYAxisTitle );
268 // XAxisYSupplier xYAxisSuppl = (XAxisYSupplier) UnoRuntime.queryInterface(
269 // XAxisYSupplier.class, mxOldDoc.getDiagram() );
270 // assure( "Diagram is no y-axis supplier", xYAxisSuppl != null );
271 // XPropertySet xAxisTitleProp = (XPropertySet) UnoRuntime.queryInterface(
272 // XPropertySet.class, xYAxisSuppl.getYAxisTitle() );
273 // assure( "Y-Axis Title is no XPropertySet", xAxisTitleProp != null );
274 // xAxisTitleProp.setPropertyValue( "String", "New y axis title" );
277 boolean bSecondaryYAxis
= true;
278 xProp
.setPropertyValue( "HasSecondaryYAxis", new Boolean( bSecondaryYAxis
));
279 boolean bNewSecYAxisValue
= AnyConverter
.toBoolean(
280 xProp
.getPropertyValue( "HasSecondaryYAxis" ));
281 assure( "Adding a second y-axis does not work", bNewSecYAxisValue
== bSecondaryYAxis
);
283 XTwoAxisYSupplier xSecYAxisSuppl
= (XTwoAxisYSupplier
) UnoRuntime
.queryInterface(
284 XTwoAxisYSupplier
.class, xDia
);
285 assure( "XTwoAxisYSupplier not implemented", xSecYAxisSuppl
!= null );
286 assure( "No second y-axis found", xSecYAxisSuppl
.getSecondaryYAxis() != null );
291 XShape xDiagramShape
= (XShape
) UnoRuntime
.queryInterface(
292 XShape
.class, xDia
);
294 Point aOldPos
= xDiagramShape
.getPosition();
297 Point aSetPos
= new Point();
298 aSetPos
.X
= aOldPos
.X
+ xDiff
;
299 aSetPos
.Y
= aOldPos
.Y
+ yDiff
;
300 xDiagramShape
.setPosition( aSetPos
);
302 Point aNewPos
= xDiagramShape
.getPosition();
303 //System.out.println( "set X = " + aSetPos.X + ", new X = " + aNewPos.X );
304 //System.out.println( "set Y = " + aSetPos.Y + ", new Y = " + aNewPos.Y );
305 assure( "Diagram Position X", approxEqual( aNewPos
.X
, aSetPos
.X
, 1 ));
306 assure( "Diagram Position Y", approxEqual( aNewPos
.Y
, aSetPos
.Y
, 1 ));
311 XShape xDiagramShape
= (XShape
) UnoRuntime
.queryInterface(
312 XShape
.class, xDia
);
314 Size aOldSize
= xDiagramShape
.getSize();
315 int xDiff
= aOldSize
.Width
/2+2;
316 int yDiff
= aOldSize
.Height
/2+2;
317 Size aSetSize
= new Size();
318 aSetSize
.Width
= aOldSize
.Width
- xDiff
;
319 aSetSize
.Height
= aOldSize
.Height
- yDiff
;
320 xDiagramShape
.setSize( aSetSize
);
322 Size aNewSize
= xDiagramShape
.getSize();
323 //System.out.println( "set width = " + aSetSize.Width + ", new width = " + aNewSize.Width );
324 //System.out.println( "set height = " + aSetSize.Height + ", new height = " + aNewSize.Height );
325 assure( "Diagram Width", approxEqual( aNewSize
.Width
, aSetSize
.Width
, 2 ));
326 assure( "Diagram Height", approxEqual( aNewSize
.Height
, aSetSize
.Height
, 2 ));
329 catch( Exception ex
)
331 failed( ex
.getMessage() );
332 ex
.printStackTrace( (PrintWriter
)log
);
338 public void testAxis()
342 XAxisYSupplier xYAxisSuppl
= (XAxisYSupplier
) UnoRuntime
.queryInterface(
343 XAxisYSupplier
.class, mxOldDoc
.getDiagram() );
344 assure( "Diagram is no y-axis supplier", xYAxisSuppl
!= null );
346 XPropertySet xProp
= xYAxisSuppl
.getYAxis();
347 assure( "No y-axis found", xProp
!= null );
350 Object oMax
= xProp
.getPropertyValue( "Max" );
351 assure( "No Maximum set", AnyConverter
.isDouble( oMax
));
352 fMax1
= AnyConverter
.toDouble( oMax
);
353 log
.println( "Maximum retrieved: " + fMax1
);
354 //todo: the view has to be built before there is an explicit value
355 // assure( "Max is 0.0", fMax1 > 0.0 );
356 xProp
.setPropertyValue( "AutoMax", new Boolean( false ));
357 oMax
= xProp
.getPropertyValue( "Max" );
358 assure( "No Maximum set", AnyConverter
.isDouble( oMax
));
359 fMax2
= AnyConverter
.toDouble( oMax
);
360 log
.println( "Maximum with AutoMax off: " + fMax2
);
361 assure( "maxima differ", fMax1
== fMax2
);
363 double nNewMax
= 12.3;
364 double nNewOrigin
= 2.7;
366 xProp
.setPropertyValue( "Max", new Double( nNewMax
));
367 assure( "AutoMax is on", ! AnyConverter
.toBoolean( xProp
.getPropertyValue( "AutoMax" )) );
369 assure( "Maximum value invalid",
371 AnyConverter
.toDouble( xProp
.getPropertyValue( "Max" )),
374 xProp
.setPropertyValue( "AutoMin", new Boolean( true ));
375 assure( "AutoMin is off", AnyConverter
.toBoolean( xProp
.getPropertyValue( "AutoMin" )) );
377 xProp
.setPropertyValue( "Origin", new Double( nNewOrigin
));
378 assure( "Origin invalid",
380 AnyConverter
.toDouble( xProp
.getPropertyValue( "Origin" )),
382 xProp
.setPropertyValue( "AutoOrigin", new Boolean( true ));
383 assure( "AutoOrigin is off", AnyConverter
.toBoolean( xProp
.getPropertyValue( "AutoOrigin" )) );
384 Object oOrigin
= xProp
.getPropertyValue( "Origin" );
385 assure( "No Origin set", AnyConverter
.isDouble( oOrigin
));
386 log
.println( "Origin retrieved: " + AnyConverter
.toDouble( oOrigin
));
388 xProp
.setPropertyValue( "Logarithmic", new Boolean( true ));
389 assure( "Scaling is not logarithmic",
390 AnyConverter
.toBoolean( xProp
.getPropertyValue( "Logarithmic" )) );
391 xProp
.setPropertyValue( "Logarithmic", new Boolean( false ));
392 assure( "Scaling is not logarithmic",
393 ! AnyConverter
.toBoolean( xProp
.getPropertyValue( "Logarithmic" )) );
395 int nNewColor
= 0xcd853f; // peru
396 xProp
.setPropertyValue( "LineColor", new Integer( nNewColor
));
397 assure( "Property LineColor",
398 AnyConverter
.toInt( xProp
.getPropertyValue( "LineColor" )) == nNewColor
);
399 float fNewCharHeight
= (float)(16.0);
400 xProp
.setPropertyValue( "CharHeight", new Float( fNewCharHeight
));
401 assure( "Property CharHeight",
402 AnyConverter
.toFloat( xProp
.getPropertyValue( "CharHeight" )) == fNewCharHeight
);
404 int nNewTextRotation
= 700; // in 1/100 degrees
405 xProp
.setPropertyValue( "TextRotation", new Integer( nNewTextRotation
));
406 assure( "Property TextRotation",
407 AnyConverter
.toInt( xProp
.getPropertyValue( "TextRotation" )) == nNewTextRotation
);
409 double fStepMain
= 10.0;
410 xProp
.setPropertyValue( "StepMain", new Double( fStepMain
));
411 assure( "Property StepMain",
412 AnyConverter
.toDouble( xProp
.getPropertyValue( "StepMain" )) == fStepMain
);
414 // note: fStepHelp must be a divider of fStepMain, because
415 // internally, the help-step is stored as an integer number of
417 double fStepHelp
= 5.0;
418 xProp
.setPropertyValue( "StepHelp", new Double( fStepHelp
));
419 assure( "Property StepHelp",
420 AnyConverter
.toDouble( xProp
.getPropertyValue( "StepHelp" )) == fStepHelp
);
422 xProp
.setPropertyValue( "DisplayLabels", new Boolean( false ));
423 assure( "Property DisplayLabels", ! AnyConverter
.toBoolean(
424 xProp
.getPropertyValue( "DisplayLabels" )));
426 catch( Exception ex
)
428 failed( ex
.getMessage() );
429 ex
.printStackTrace( (PrintWriter
)log
);
435 public void testLegend()
437 XShape xLegend
= mxOldDoc
.getLegend();
438 assure( "No Legend returned", xLegend
!= null );
440 XPropertySet xLegendProp
= (XPropertySet
) UnoRuntime
.queryInterface(
441 XPropertySet
.class, xLegend
);
442 assure( "Legend is no property set", xLegendProp
!= null );
446 ChartLegendPosition eNewPos
= ChartLegendPosition
.BOTTOM
;
447 xLegendProp
.setPropertyValue( "Alignment", eNewPos
);
448 assure( "Property Alignment",
449 AnyConverter
.toObject(
450 new Type( ChartLegendPosition
.class ),
451 xLegendProp
.getPropertyValue( "Alignment" )) == eNewPos
);
453 float fNewCharHeight
= (float)(11.0);
454 xLegendProp
.setPropertyValue( "CharHeight", new Float( fNewCharHeight
));
455 assure( "Property CharHeight",
456 AnyConverter
.toFloat( xLegendProp
.getPropertyValue( "CharHeight" )) == fNewCharHeight
);
460 Point aOldPos
= xLegend
.getPosition();
463 Point aSetPos
= new Point();
464 aSetPos
.X
= aOldPos
.X
+ xDiff
;
465 aSetPos
.Y
= aOldPos
.Y
+ yDiff
;
466 xLegend
.setPosition( aSetPos
);
468 Point aNewPos
= xLegend
.getPosition();
469 assure( "Legend Position X", approxEqual( aNewPos
.X
, aSetPos
.X
, 1 ));
470 assure( "Legend Position Y", approxEqual( aNewPos
.Y
, aSetPos
.Y
, 1 ));
473 catch( Exception ex
)
475 failed( ex
.getMessage() );
476 ex
.printStackTrace( (PrintWriter
)log
);
482 public void testArea()
484 XPropertySet xArea
= mxOldDoc
.getArea();
485 assure( "No Area", xArea
!= null );
489 int nColor
= 0xf5fffa; // mint cream
490 xArea
.setPropertyValue( "FillColor", new Integer( nColor
) );
491 xArea
.setPropertyValue( "FillStyle", FillStyle
.SOLID
);
492 // XPropertySetInfo xInfo = xArea.getPropertySetInfo();
493 // assure( "Area does not support ChartUserDefinedAttributes",
494 // xInfo.hasPropertyByName( "ChartUserDefinedAttributes" ));
496 // String aTestAttributeName = "test:foo";
497 // String aTestAttributeValue = "content";
498 // XNameContainer xUserDefAttributes = (XNameContainer) AnyConverter.toObject(
499 // new Type( XNameContainer.class ), xArea.getPropertyValue( "ChartUserDefinedAttributes" ));
500 // xUserDefAttributes.insertByName( aTestAttributeName, aTestAttributeValue );
502 // String aContent = AnyConverter.toString( xUserDefAttributes.getByName( aTestAttributeName ));
503 // assure( "Wrong content in UserDefinedAttributes container",
504 // aContent.equals( aTestAttributeValue ));
506 int nNewColor
= AnyConverter
.toInt( xArea
.getPropertyValue( "FillColor" ) );
507 assure( "Changing FillColor of Area failed", nNewColor
== nColor
);
509 catch( Exception ex
)
511 failed( ex
.getMessage() );
512 ex
.printStackTrace( (PrintWriter
)log
);
518 public void testChartType()
520 XMultiServiceFactory xFact
= (XMultiServiceFactory
) UnoRuntime
.queryInterface(
521 XMultiServiceFactory
.class, mxOldDoc
);
522 assure( "document is no factory", xFact
!= null );
526 String aMyServiceName
= new String( "com.sun.star.chart.BarDiagram" );
527 String aServices
[] = xFact
.getAvailableServiceNames();
528 boolean bServiceFound
= false;
529 for( int i
= 0; i
< aServices
.length
; ++i
)
531 if( aServices
[ i
].equals( aMyServiceName
))
533 bServiceFound
= true;
537 assure( "getAvailableServiceNames did not return " + aMyServiceName
, bServiceFound
);
541 XDiagram xDia
= (XDiagram
) UnoRuntime
.queryInterface(
542 XDiagram
.class, xFact
.createInstance( aMyServiceName
));
543 assure( aMyServiceName
+ " could not be created", xDia
!= null );
545 mxOldDoc
.setDiagram( xDia
);
547 XPropertySet xDiaProp
= (XPropertySet
) UnoRuntime
.queryInterface(
548 XPropertySet
.class, xDia
);
549 assure( "Diagram is no XPropertySet", xDiaProp
!= null );
551 xDiaProp
.setPropertyValue( "Stacked", new Boolean( true ));
552 assure( "StackMode could not be set correctly",
553 AnyConverter
.toBoolean(
554 xDiaProp
.getPropertyValue( "Stacked" )));
556 xDiaProp
.setPropertyValue( "Dim3D", new Boolean( false ));
557 assure( "Dim3D could not be set correctly",
558 ! AnyConverter
.toBoolean(
559 xDiaProp
.getPropertyValue( "Dim3D" )));
561 xDiaProp
.setPropertyValue( "Vertical", new Boolean( true ));
562 assure( "Vertical could not be set correctly",
563 AnyConverter
.toBoolean(
564 xDiaProp
.getPropertyValue( "Vertical" )));
567 // reset to bar-chart
568 // aMyServiceName = new String( "com.sun.star.chart.BarDiagram" );
569 // XDiagram xDia = (XDiagram) UnoRuntime.queryInterface(
570 // XDiagram.class, xFact.createInstance( aMyServiceName ));
571 // assure( aMyServiceName + " could not be created", xDia != null );
573 // mxOldDoc.setDiagram( xDia );
575 catch( Exception ex
)
577 failed( ex
.getMessage() );
578 ex
.printStackTrace( (PrintWriter
)log
);
584 public void testAggregation()
587 XChartDocument xDiaProv
= (XChartDocument
) UnoRuntime
.queryInterface(
588 XChartDocument
.class, mxOldDoc
);
589 assure( "query to new interface failed", xDiaProv
!= null );
591 com
.sun
.star
.chart
.XChartDocument xDoc
= (com
.sun
.star
.chart
.XChartDocument
) UnoRuntime
.queryInterface(
592 com
.sun
.star
.chart
.XChartDocument
.class, xDiaProv
);
593 assure( "querying back to old interface failed", xDoc
!= null );
598 public void testDataSeriesAndPoints()
602 XDiagram xDia
= mxOldDoc
.getDiagram();
603 assure( "Invalid Diagram", xDia
!= null );
604 XMultiServiceFactory xFact
= (XMultiServiceFactory
) UnoRuntime
.queryInterface(
605 XMultiServiceFactory
.class, mxOldDoc
);
606 assure( "document is no factory", xFact
!= null );
609 XPropertySet xProp
= xDia
.getDataRowProperties( 0 );
610 int nColor
= 0xffd700; // gold
611 xProp
.setPropertyValue( "FillColor", new Integer( nColor
));
612 int nNewColor
= AnyConverter
.toInt( xProp
.getPropertyValue( "FillColor" ) );
613 assure( "Changing FillColor of Data Series failed", nNewColor
== nColor
);
616 assure( "No DataRowProperties for series 0", xProp
!= null );
618 // note: the FillGradient property is optional, however it was
619 // supported in the old chart's API
620 XNameContainer xGradientTable
= (XNameContainer
) UnoRuntime
.queryInterface(
621 XNameContainer
.class,
622 xFact
.createInstance( "com.sun.star.drawing.GradientTable" ));
623 assure( "no gradient table", xGradientTable
!= null );
624 String aGradientName
= "NewAPITestGradient";
625 Gradient aGradient
= new Gradient();
626 aGradient
.Style
= GradientStyle
.LINEAR
;
627 aGradient
.StartColor
= 0xe0ffff; // light cyan
628 aGradient
.EndColor
= 0xff8c00; // dark orange
629 aGradient
.Angle
= 300; // 30 degrees
630 aGradient
.Border
= 15;
631 aGradient
.XOffset
= 0;
632 aGradient
.YOffset
= 0;
633 aGradient
.StartIntensity
= 100;
634 aGradient
.EndIntensity
= 80;
635 aGradient
.StepCount
= 23;
637 xGradientTable
.insertByName( aGradientName
, aGradient
);
638 xProp
.setPropertyValue( "FillStyle", FillStyle
.GRADIENT
);
639 xProp
.setPropertyValue( "FillGradientName", aGradientName
);
640 String aNewGradientName
= AnyConverter
.toString( xProp
.getPropertyValue( "FillGradientName" ));
641 assure( "GradientName", aNewGradientName
.equals( aGradientName
));
642 Gradient aNewGradient
= (Gradient
) AnyConverter
.toObject(
643 new Type( Gradient
.class ),
644 xGradientTable
.getByName( aNewGradientName
));
645 assure( "Gradient Style", aNewGradient
.Style
== aGradient
.Style
);
646 assure( "Gradient StartColor", aNewGradient
.StartColor
== aGradient
.StartColor
);
647 assure( "Gradient EndColor", aNewGradient
.EndColor
== aGradient
.EndColor
);
648 assure( "Gradient Angle", aNewGradient
.Angle
== aGradient
.Angle
);
649 assure( "Gradient Border", aNewGradient
.Border
== aGradient
.Border
);
650 assure( "Gradient XOffset", aNewGradient
.XOffset
== aGradient
.XOffset
);
651 assure( "Gradient YOffset", aNewGradient
.YOffset
== aGradient
.YOffset
);
652 assure( "Gradient StartIntensity", aNewGradient
.StartIntensity
== aGradient
.StartIntensity
);
653 assure( "Gradient EndIntensity", aNewGradient
.EndIntensity
== aGradient
.EndIntensity
);
654 assure( "Gradient StepCount", aNewGradient
.StepCount
== aGradient
.StepCount
);
657 xProp
= xDia
.getDataPointProperties( 1, 0 );
658 assure( "No DataPointProperties for (1,0)", xProp
!= null );
660 // note: the FillHatch property is optional, however it was
661 // supported in the old chart's API
662 XNameContainer xHatchTable
= (XNameContainer
) UnoRuntime
.queryInterface(
663 XNameContainer
.class,
664 xFact
.createInstance( "com.sun.star.drawing.HatchTable" ));
665 assure( "no hatch table", xHatchTable
!= null );
666 String aHatchName
= "NewAPITestHatch";
667 Hatch aHatch
= new Hatch();
668 aHatch
.Style
= HatchStyle
.DOUBLE
;
669 aHatch
.Color
= 0xd2691e; // chocolate
670 aHatch
.Distance
= 200; // 2 mm (?)
671 aHatch
.Angle
= 230; // 23 degrees
673 xHatchTable
.insertByName( aHatchName
, aHatch
);
674 xProp
.setPropertyValue( "FillHatchName", aHatchName
);
675 xProp
.setPropertyValue( "FillStyle", FillStyle
.HATCH
);
676 xProp
.setPropertyValue( "FillBackground", new Boolean( true ));
677 String aNewHatchName
= AnyConverter
.toString( xProp
.getPropertyValue( "FillHatchName" ));
678 assure( "HatchName", aNewHatchName
.equals( aHatchName
));
679 Hatch aNewHatch
= (Hatch
) AnyConverter
.toObject(
680 new Type( Hatch
.class ),
681 xHatchTable
.getByName( aNewHatchName
));
682 assure( "Hatch Style", aNewHatch
.Style
== aHatch
.Style
);
683 assure( "Hatch Color", aNewHatch
.Color
== aHatch
.Color
);
684 assure( "Hatch Distance", aNewHatch
.Distance
== aHatch
.Distance
);
685 assure( "Hatch Angle", aNewHatch
.Angle
== aHatch
.Angle
);
686 assure( "FillBackground", AnyConverter
.toBoolean( xProp
.getPropertyValue( "FillBackground" )) );
688 catch( Exception ex
)
690 failed( ex
.getMessage() );
691 ex
.printStackTrace( (PrintWriter
)log
);
697 public void testStatistics()
701 XDiagram xDia
= mxOldDoc
.getDiagram();
702 assure( "Invalid Diagram", xDia
!= null );
704 XPropertySet xProp
= xDia
.getDataRowProperties( 0 );
705 assure( "No DataRowProperties for first series", xProp
!= null );
707 xProp
.setPropertyValue( "MeanValue", new Boolean( true ));
708 assure( "No MeanValue", AnyConverter
.toBoolean( xProp
.getPropertyValue( "MeanValue" )) );
710 catch( Exception ex
)
712 failed( ex
.getMessage() );
713 ex
.printStackTrace( (PrintWriter
)log
);
719 public void setStockData_Type4()
723 XPropertySet xDiaProp
= (XPropertySet
) UnoRuntime
.queryInterface(
724 XPropertySet
.class, mxOldDoc
.getDiagram() );
726 ChartDataRowSource eNewSource
= ChartDataRowSource
.ROWS
;
727 xDiaProp
.setPropertyValue( "DataRowSource", eNewSource
);
728 assure( "Couldn't set \"DataRowSource\" property at Diagram",
729 AnyConverter
.toObject(
730 new Type( ChartDataRowSource
.class ),
731 xDiaProp
.getPropertyValue( "DataRowSource" )) == eNewSource
);
735 { 100.0, 200.0, 300.0, 250.0, 300.0 },
736 { 6.5, 4.5, 6.0, 5.5, 3.5 },
737 { 1.0, 1.5, 2.0, 2.5, 3.0 },
738 { 6.0, 6.5, 7.0, 6.5, 5.0 },
739 { 6.0, 5.5, 4.0, 4.5, 4.0 }
742 String
[] aRowDescriptions
=
744 "Volume", "Open", "Min", "Max", "Close"
747 String
[] aColumnDescriptions
=
749 "First Row", "Second Row", "Third Row", "Fourth Row", "Fifth Row"
753 XChartData xData
= mxOldDoc
.getData();
754 XChartDataArray xDataArray
= (XChartDataArray
) UnoRuntime
.queryInterface(
755 XChartDataArray
.class, xData
);
756 assure( "document has no XChartDataArray", xDataArray
!= null );
758 xDataArray
.setData( aData
);
759 xDataArray
.setRowDescriptions( aRowDescriptions
);
760 xDataArray
.setColumnDescriptions( aColumnDescriptions
);
762 mxOldDoc
.attachData( xData
);
764 catch( Exception ex
)
766 failed( ex
.getMessage() );
767 ex
.printStackTrace( (PrintWriter
)log
);
773 public void testStockProperties()
777 setStockData_Type4();
779 XMultiServiceFactory xFact
= (XMultiServiceFactory
) UnoRuntime
.queryInterface(
780 XMultiServiceFactory
.class, mxOldDoc
);
781 assure( "document is no factory", xFact
!= null );
783 String aMyServiceName
= new String( "com.sun.star.chart.StockDiagram" );
784 XDiagram xDia
= (XDiagram
) UnoRuntime
.queryInterface(
785 XDiagram
.class, xFact
.createInstance( aMyServiceName
));
786 assure( aMyServiceName
+ " could not be created", xDia
!= null );
788 mxOldDoc
.setDiagram( xDia
);
790 XPropertySet xDiaProp
= (XPropertySet
) UnoRuntime
.queryInterface(
791 XPropertySet
.class, xDia
);
792 assure( "Diagram is no XPropertySet", xDiaProp
!= null );
794 xDiaProp
.setPropertyValue( "Volume", new Boolean( true ));
795 assure( "Has Volume", AnyConverter
.toBoolean( xDiaProp
.getPropertyValue( "Volume" )));
797 xDiaProp
.setPropertyValue( "UpDown", new Boolean( true ));
798 assure( "Has UpDown", AnyConverter
.toBoolean( xDiaProp
.getPropertyValue( "UpDown" )));
801 XStatisticDisplay xMinMaxProvider
= (XStatisticDisplay
) UnoRuntime
.queryInterface(
802 XStatisticDisplay
.class, xDia
);
803 assure( "Diagram is no XStatisticDisplay", xMinMaxProvider
!= null );
804 XPropertySet xMinMaxProp
= xMinMaxProvider
.getMinMaxLine();
805 assure( "No MinMaxLine", xMinMaxProp
!= null );
807 int nLineColor
= 0x458b00; // chartreuse4
808 xMinMaxProp
.setPropertyValue( "LineColor", new Integer( nLineColor
));
809 int nNewColor
= AnyConverter
.toInt( xMinMaxProp
.getPropertyValue( "LineColor" ) );
810 assure( "Changing LineColor of MinMax Line", nNewColor
== nLineColor
);
812 catch( Exception ex
)
814 failed( ex
.getMessage() );
815 ex
.printStackTrace( (PrintWriter
)log
);
821 public void testFactory()
825 XMultiServiceFactory xFact
= (XMultiServiceFactory
) UnoRuntime
.queryInterface(
826 XMultiServiceFactory
.class, mxOldDoc
);
827 assure( "document is no factory", xFact
!= null );
829 Object aTestTable
= xFact
.createInstance( "com.sun.star.drawing.GradientTable" );
830 assure( "Couldn't create gradient table via factory", aTestTable
!= null );
832 catch( Exception ex
)
834 failed( ex
.getMessage() );
835 ex
.printStackTrace( (PrintWriter
)log
);
841 public void testData()
847 { 1.0, 1.5, 2.0, 2.5, 3.0 },
848 { 2.0, 2.5, 3.0, 3.5, 4.0 },
849 { 3.0, 3.5, 4.0, 4.5, 5.0 }
852 String
[] aColumnDescriptions
= {
853 "First Column", "Second Column", "Third Column",
854 "Fourth Column", "Fifth Column"
857 String
[] aRowDescriptions
= {
858 "First Row", "Second Row", "Third Row"
861 XPropertySet xDiaProp
= (XPropertySet
) UnoRuntime
.queryInterface(
862 XPropertySet
.class, mxOldDoc
.getDiagram() );
863 ChartDataRowSource eNewSource
= ChartDataRowSource
.ROWS
;
864 xDiaProp
.setPropertyValue( "DataRowSource", eNewSource
);
865 assure( "Couldn't set \"DataRowSource\" property at Diagram",
866 AnyConverter
.toObject(
867 new Type( ChartDataRowSource
.class ),
868 xDiaProp
.getPropertyValue( "DataRowSource" )) == eNewSource
);
870 XChartData xData
= mxOldDoc
.getData();
871 XChartDataArray xDataArray
= (XChartDataArray
) UnoRuntime
.queryInterface(
872 XChartDataArray
.class, xData
);
873 assure( "document has no XChartDataArray", xDataArray
!= null );
875 xDataArray
.setData( aData
);
876 xDataArray
.setRowDescriptions( aRowDescriptions
);
877 xDataArray
.setColumnDescriptions( aColumnDescriptions
);
879 mxOldDoc
.attachData( xData
);
882 double aReadData
[][];
883 String
[] aReadColumnDescriptions
;
884 String
[] aReadRowDescriptions
;
887 xData
= mxOldDoc
.getData();
888 xDataArray
= (XChartDataArray
) UnoRuntime
.queryInterface(
889 XChartDataArray
.class, xData
);
890 assure( "document has no XChartDataArray", xDataArray
!= null );
892 aReadData
= xDataArray
.getData();
893 aReadRowDescriptions
= xDataArray
.getRowDescriptions();
894 aReadColumnDescriptions
= xDataArray
.getColumnDescriptions();
896 // compare to values set before
897 assure( "Data size differs", aData
.length
== aReadData
.length
);
898 for( int i
=0; i
<aReadData
.length
; ++i
)
900 assure( "Data size differs", aData
[i
].length
== aReadData
[i
].length
);
901 for( int j
=0; j
<aReadData
[i
].length
; ++j
)
902 assure( "Data differs", aData
[i
][j
] == aReadData
[i
][j
] );
905 assure( "Column Description size differs", aColumnDescriptions
.length
== aReadColumnDescriptions
.length
);
906 for( int i
=0; i
<aReadColumnDescriptions
.length
; ++i
)
907 assure( "Column Descriptions differ", aColumnDescriptions
[i
].equals( aReadColumnDescriptions
[i
] ));
909 assure( "Row Description size differs", aRowDescriptions
.length
== aReadRowDescriptions
.length
);
910 for( int i
=0; i
<aReadRowDescriptions
.length
; ++i
)
911 assure( "Row Descriptions differ", aRowDescriptions
[i
].equals( aReadRowDescriptions
[i
] ));
913 catch( Exception ex
)
915 failed( ex
.getMessage() );
916 ex
.printStackTrace( (PrintWriter
)log
);
920 // ================================================================================
922 private XModel mxChartModel
;
923 private XChartDocument mxOldDoc
;
924 private boolean mbCreateView
;
926 // --------------------------------------------------------------------------------
928 private XModel
createDocument( String sDocType
)
930 XModel aResult
= null;
933 XComponentLoader aLoader
= (XComponentLoader
) UnoRuntime
.queryInterface(
934 XComponentLoader
.class,
935 ((XMultiServiceFactory
)param
.getMSF()).createInstance( "com.sun.star.frame.Desktop" ) );
937 aResult
= (XModel
) UnoRuntime
.queryInterface(
939 aLoader
.loadComponentFromURL( "private:factory/" + sDocType
,
942 new PropertyValue
[ 0 ] ) );
944 catch( Exception ex
)
946 failed( ex
.getMessage() );
947 ex
.printStackTrace( (PrintWriter
)log
);
955 public XModel
createChartModel()
957 XModel aResult
= null;
960 aResult
= (XModel
) UnoRuntime
.queryInterface(
962 ((XMultiServiceFactory
)param
.getMSF()).createInstance( "com.sun.star.comp.chart2.ChartModel" ) );
964 catch( Exception ex
)
966 failed( ex
.getMessage() );
967 ex
.printStackTrace( (PrintWriter
)log
);
975 private XComponentContext
getComponentContext( XMultiServiceFactory xFact
)
977 XComponentContext xResult
= null;
979 XPropertySet xProp
= (XPropertySet
) UnoRuntime
.queryInterface(
980 XPropertySet
.class, xFact
);
984 xResult
= (XComponentContext
)
985 AnyConverter
.toObject(
986 new Type( XComponentContext
.class ),
987 xProp
.getPropertyValue( "DefaultContext" ) );
989 catch( Exception ex
)
991 failed( ex
.getMessage() );
992 ex
.printStackTrace( (PrintWriter
)log
);
1000 private void printInterfacesAndServices( Object oObj
)
1002 log
.println( "Services:" );
1003 util
.dbg
.getSuppServices( oObj
);
1004 log
.println( "Interfaces:" );
1005 util
.dbg
.printInterfaces( (XInterface
)oObj
, true );
1010 /// see rtl/math.hxx
1011 private boolean approxEqual( double a
, double b
)
1016 return (x
< 0.0 ?
-x
: x
)
1017 < ((a
< 0.0 ?
-a
: a
) * (1.0 / (16777216.0 * 16777216.0)));
1021 /** returns true if a and b differ no more than tolerance.
1024 must be non-negative
1026 private boolean approxEqual( int a
, int b
, int tolerance
)
1029 log
.println( "Integer values differ by " + java
.lang
.Math
.abs( a
-b
));
1030 return ( ( a
- tolerance
<= b
) ||
1031 ( a
+ tolerance
>= b
));