summaryrefslogtreecommitdiff
path: root/chart2/qa/extras/charttest.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'chart2/qa/extras/charttest.hxx')
-rw-r--r--chart2/qa/extras/charttest.hxx257
1 files changed, 124 insertions, 133 deletions
diff --git a/chart2/qa/extras/charttest.hxx b/chart2/qa/extras/charttest.hxx
index 9b8e98a48f96..db416affaa9f 100644
--- a/chart2/qa/extras/charttest.hxx
+++ b/chart2/qa/extras/charttest.hxx
@@ -7,11 +7,9 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-#ifndef INCLUDED_CHART2_QA_EXTRAS_CHARTTEST_HXX
-#define INCLUDED_CHART2_QA_EXTRAS_CHARTTEST_HXX
+#pragma once
-#include <test/bootstrapfixture.hxx>
-#include <unotest/macros_test.hxx>
+#include <test/unoapixml_test.hxx>
#include <comphelper/processfactory.hxx>
#include <comphelper/propertysequence.hxx>
@@ -20,6 +18,7 @@
#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
#include <com/sun/star/container/XIndexAccess.hpp>
+#include <com/sun/star/container/XNamed.hpp>
#include <com/sun/star/table/XTableChartsSupplier.hpp>
#include <com/sun/star/table/XTableChart.hpp>
#include <com/sun/star/table/XTablePivotChartsSupplier.hpp>
@@ -28,9 +27,12 @@
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/frame/XStorable.hpp>
+#include <o3tl/string_view.hxx>
#include <unotools/tempfile.hxx>
#include <rtl/math.hxx>
+#include <svx/charthelper.hxx>
+#include <com/sun/star/chart2/AxisType.hpp>
#include <com/sun/star/chart2/XAnyDescriptionAccess.hpp>
#include <com/sun/star/chart2/XChartDocument.hpp>
#include <com/sun/star/chart2/XChartTypeContainer.hpp>
@@ -42,17 +44,21 @@
#include <com/sun/star/chart2/data/XLabeledDataSequence.hpp>
#include <com/sun/star/chart2/data/XDataSource.hpp>
#include <com/sun/star/chart/XChartDataArray.hpp>
+#include <com/sun/star/chart2/XInternalDataProvider.hpp>
+#include <com/sun/star/chart/XDateCategories.hpp>
#include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
#include <com/sun/star/chart/XChartDocument.hpp>
#include <com/sun/star/text/XTextEmbeddedObjectsSupplier.hpp>
#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
#include <com/sun/star/util/NumberFormat.hpp>
+#include <com/sun/star/util/NumberFormatter.hpp>
#include <unonames.hxx>
#include <iostream>
#include <memory>
+#include <string_view>
#include <com/sun/star/embed/Aspects.hpp>
#include <com/sun/star/embed/XVisualObject.hpp>
@@ -66,119 +72,27 @@ namespace com::sun::star::chart2 { class XDiagram; }
namespace com::sun::star::table { class XTableCharts; }
namespace com::sun::star::table { class XTablePivotCharts; }
-class ChartTest : public test::BootstrapFixture, public unotest::MacrosTest
+class ChartTest : public UnoApiXmlTest
{
public:
- ChartTest():mbSkipValidation(false) {}
- void load( const OUString& rDir, const OUString& rFileName );
- std::shared_ptr<utl::TempFile> save( const OUString& rFileName );
- std::shared_ptr<utl::TempFile> reload( const OUString& rFileName );
- uno::Sequence < OUString > getImpressChartColumnDescriptions( const OUString& pDir, const char* pName );
- OUString getFileExtension( const OUString& rFileName );
+ ChartTest(OUString path)
+ : UnoApiXmlTest(path)
+ {
+ }
- uno::Reference< chart::XChartDocument > getChartDocFromImpress( const OUString& pDir, const char* pName );
+ uno::Sequence < OUString > getImpressChartColumnDescriptions(sal_Int32 nPage, sal_Int32 nShape);
uno::Reference<chart::XChartDocument> getChartDocFromDrawImpress( sal_Int32 nPage, sal_Int32 nShape );
+ uno::Reference<chart::XChartDocument> getChartDocFromDrawImpressNamed( sal_Int32 nPage, std::u16string_view rName);
+
uno::Reference<chart::XChartDocument> getChartDocFromWriter( sal_Int32 nShape );
+ Sequence< OUString > getFormattedDateCategories( const Reference<chart2::XChartDocument>& xChartDoc );
awt::Size getPageSize( const Reference< chart2::XChartDocument > & xChartDoc );
awt::Size getSize(css::uno::Reference<chart2::XDiagram> xDiagram, const awt::Size& rPageSize);
-
- virtual void setUp() override;
- virtual void tearDown() override;
-
-protected:
- Reference< lang::XComponent > mxComponent;
- OUString maServiceName;
- bool mbSkipValidation; // if you set this flag for a new test I'm going to haunt you!
};
-OUString ChartTest::getFileExtension( const OUString& aFileName )
-{
- sal_Int32 nDotLocation = aFileName.lastIndexOf('.');
- CPPUNIT_ASSERT(nDotLocation != -1);
- return aFileName.copy(nDotLocation+1); // Skip the dot.
-}
-
-void ChartTest::load( const OUString& aDir, const OUString& aName )
-{
- OUString extension = getFileExtension(aName);
- if (extension == "ods" || extension == "xlsx" || extension == "fods")
- {
- maServiceName = "com.sun.star.sheet.SpreadsheetDocument";
- }
- else if (extension == "docx")
- {
- maServiceName = "com.sun.star.text.TextDocument";
- }
- else if (extension == "odg")
- {
- maServiceName = "com.sun.star.drawing.DrawingDocument";
- }
- if (mxComponent.is())
- mxComponent->dispose();
- mxComponent = loadFromDesktop(m_directories.getURLFromSrc(aDir) + aName, maServiceName);
- CPPUNIT_ASSERT(mxComponent.is());
-}
-
-std::shared_ptr<utl::TempFile> ChartTest::save(const OUString& rFilterName)
-{
- uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
- auto aArgs(::comphelper::InitPropertySequence({
- { "FilterName", Any(rFilterName) }
- }));
- std::shared_ptr<utl::TempFile> pTempFile = std::make_shared<utl::TempFile>();
- pTempFile->EnableKillingFile();
- xStorable->storeToURL(pTempFile->GetURL(), aArgs);
-
- return pTempFile;
-}
-
-std::shared_ptr<utl::TempFile> ChartTest::reload(const OUString& rFilterName)
-{
- std::shared_ptr<utl::TempFile> pTempFile = save(rFilterName);
- mxComponent->dispose();
- mxComponent = loadFromDesktop(pTempFile->GetURL(), maServiceName);
- std::cout << pTempFile->GetURL();
- if(rFilterName == "Calc Office Open XML")
- {
- validate(pTempFile->GetFileName(), test::OOXML);
- }
- else if(rFilterName == "Office Open XML Text")
- {
- // validate(pTempFile->GetFileName(), test::OOXML);
- }
- else if(rFilterName == "calc8")
- {
- if(!mbSkipValidation)
- validate(pTempFile->GetFileName(), test::ODF);
- }
- else if(rFilterName == "MS Excel 97")
- {
- if(!mbSkipValidation)
- validate(pTempFile->GetFileName(), test::MSBINARY);
- }
- CPPUNIT_ASSERT(mxComponent.is());
- return pTempFile;
-}
-
-void ChartTest::setUp()
-{
- test::BootstrapFixture::setUp();
-
- mxDesktop.set( css::frame::Desktop::create( comphelper::getComponentContext(getMultiServiceFactory()) ) );
-}
-
-void ChartTest::tearDown()
-{
- if(mxComponent.is())
- mxComponent->dispose();
-
- test::BootstrapFixture::tearDown();
-
-}
-
-Reference< lang::XComponent > getChartCompFromSheet( sal_Int32 nSheet, uno::Reference< lang::XComponent > const & xComponent )
+Reference< lang::XComponent > getChartCompFromSheet( sal_Int32 nSheet, sal_Int32 nChart, uno::Reference< lang::XComponent > const & xComponent )
{
// let us assume that we only have one chart per sheet
@@ -192,7 +106,7 @@ Reference< lang::XComponent > getChartCompFromSheet( sal_Int32 nSheet, uno::Refe
CPPUNIT_ASSERT(xCharts.is());
uno::Reference< container::XIndexAccess > xIACharts(xCharts, UNO_QUERY_THROW);
- uno::Reference< table::XTableChart > xChart( xIACharts->getByIndex(0), UNO_QUERY_THROW);
+ uno::Reference< table::XTableChart > xChart( xIACharts->getByIndex(nChart), UNO_QUERY_THROW);
uno::Reference< document::XEmbeddedObjectSupplier > xEmbObjectSupplier(xChart, UNO_QUERY_THROW);
@@ -204,7 +118,12 @@ Reference< lang::XComponent > getChartCompFromSheet( sal_Int32 nSheet, uno::Refe
Reference< chart2::XChartDocument > getChartDocFromSheet( sal_Int32 nSheet, uno::Reference< lang::XComponent > const & xComponent )
{
- uno::Reference< chart2::XChartDocument > xChartDoc ( getChartCompFromSheet(nSheet, xComponent), UNO_QUERY_THROW );
+ uno::Reference< chart2::XChartDocument > xChartDoc ( getChartCompFromSheet(nSheet, 0, xComponent), UNO_QUERY_THROW );
+
+ // Update the chart view, so that its draw page is updated and ready for the test
+ css::uno::Reference<css::frame::XModel> xModel(xChartDoc, css::uno::UNO_QUERY_THROW);
+ ChartHelper::updateChart(xModel);
+
return xChartDoc;
}
@@ -344,7 +263,7 @@ Reference< chart2::data::XDataSequence > getLabelDataSequenceFromDoc(
}
Reference< chart2::data::XDataSequence > getDataSequenceFromDocByRole(
- Reference< chart2::XChartDocument > const & xChartDoc, const OUString& rRole,
+ Reference< chart2::XChartDocument > const & xChartDoc, std::u16string_view rRole,
sal_Int32 nDataSeries = 0, sal_Int32 nChartType = 0 )
{
Reference< chart2::XDataSeries > xDataSeries =
@@ -391,9 +310,6 @@ std::vector<std::vector<double> > getDataSeriesYValuesFromChartType( const Refer
CPPUNIT_ASSERT(xDSCont.is());
const Sequence<uno::Reference<chart2::XDataSeries> > aDataSeriesSeq = xDSCont->getDataSeries();
- double fNan;
- rtl::math::setNan(&fNan);
-
std::vector<std::vector<double> > aRet;
for (uno::Reference<chart2::XDataSeries> const & ds : aDataSeriesSeq)
{
@@ -421,7 +337,7 @@ std::vector<std::vector<double> > getDataSeriesYValuesFromChartType( const Refer
if (any >>= fVal)
aValues.push_back(fVal);
else
- aValues.push_back(fNan);
+ aValues.push_back(std::numeric_limits<double>::quiet_NaN());
}
aRet.push_back(aValues);
}
@@ -470,23 +386,6 @@ std::vector<uno::Sequence<uno::Any> > getDataSeriesLabelsFromChartType( const Re
return aRet;
}
-uno::Reference< chart::XChartDocument > ChartTest::getChartDocFromImpress( const OUString& pDir, const char* pName )
-{
- mxComponent = loadFromDesktop(m_directories.getURLFromSrc(pDir) + OUString::createFromAscii(pName), "com.sun.star.comp.Draw.PresentationDocument");
- uno::Reference< drawing::XDrawPagesSupplier > xDoc(mxComponent, uno::UNO_QUERY_THROW );
- uno::Reference< drawing::XDrawPage > xPage(
- xDoc->getDrawPages()->getByIndex(0), uno::UNO_QUERY_THROW );
- uno::Reference< beans::XPropertySet > xShapeProps(
- xPage->getByIndex(0), uno::UNO_QUERY );
- CPPUNIT_ASSERT(xShapeProps.is());
- uno::Reference< frame::XModel > xDocModel;
- xShapeProps->getPropertyValue("Model") >>= xDocModel;
- CPPUNIT_ASSERT(xDocModel.is());
- uno::Reference< chart::XChartDocument > xChartDoc( xDocModel, uno::UNO_QUERY_THROW );
-
- return xChartDoc;
-}
-
uno::Reference<chart::XChartDocument> ChartTest::getChartDocFromDrawImpress(
sal_Int32 nPage, sal_Int32 nShape )
{
@@ -512,6 +411,42 @@ uno::Reference<chart::XChartDocument> ChartTest::getChartDocFromDrawImpress(
return xChartDoc;
}
+uno::Reference<chart::XChartDocument> ChartTest::getChartDocFromDrawImpressNamed(sal_Int32 nPage, std::u16string_view rName)
+{
+ uno::Reference<chart::XChartDocument> xChart;
+
+ uno::Reference<drawing::XDrawPagesSupplier> xPages(mxComponent, uno::UNO_QUERY);
+ if (!xPages.is())
+ return xChart;
+
+ uno::Reference<drawing::XDrawPage> xPage(xPages->getDrawPages()->getByIndex(nPage), uno::UNO_QUERY);
+ if (!xPage.is())
+ return xChart;
+
+ for (sal_Int32 i=0; i < xPage->getCount(); ++i)
+ {
+ uno::Reference<container::XNamed> xNamedShape(xPage->getByIndex(i), uno::UNO_QUERY);
+ if (!xNamedShape.is())
+ continue;
+
+ if (xNamedShape->getName() != rName)
+ continue;
+
+ uno::Reference<beans::XPropertySet> xShapeProps(xNamedShape, uno::UNO_QUERY);
+ if (!xShapeProps.is())
+ continue;
+
+ uno::Reference<frame::XModel> xDocModel;
+ xShapeProps->getPropertyValue("Model") >>= xDocModel;
+ if (!xDocModel.is())
+ continue;
+
+ return uno::Reference<chart::XChartDocument>(xDocModel, uno::UNO_QUERY);
+ }
+
+ return xChart;
+}
+
uno::Reference<chart::XChartDocument> ChartTest::getChartDocFromWriter( sal_Int32 nShape )
{
// DO NOT use XDrawPageSupplier since SwVirtFlyDrawObj are not created
@@ -532,9 +467,9 @@ uno::Reference<chart::XChartDocument> ChartTest::getChartDocFromWriter( sal_Int3
return xChartDoc;
}
-uno::Sequence < OUString > ChartTest::getImpressChartColumnDescriptions( const OUString& pDir, const char* pName )
+uno::Sequence < OUString > ChartTest::getImpressChartColumnDescriptions(sal_Int32 nPage, sal_Int32 nShape)
{
- uno::Reference< chart::XChartDocument > xChartDoc = getChartDocFromImpress( pDir, pName );
+ uno::Reference< chart::XChartDocument > xChartDoc = getChartDocFromDrawImpress( nPage, nShape );
uno::Reference< chart::XChartDataArray > xChartData ( xChartDoc->getData(), uno::UNO_QUERY_THROW);
uno::Sequence < OUString > seriesList = xChartData->getColumnDescriptions();
return seriesList;
@@ -587,6 +522,39 @@ sal_Int16 getNumberFormatType( const Reference<chart2::XChartDocument>& xChartDo
return nType;
}
+Sequence< double > getDateCategories(const Reference<chart2::XChartDocument>& xChartDoc)
+{
+ CPPUNIT_ASSERT(xChartDoc->hasInternalDataProvider());
+ uno::Reference< chart2::XInternalDataProvider > xDataProvider( xChartDoc->getDataProvider(), uno::UNO_QUERY_THROW );
+ uno::Reference< chart::XDateCategories > xDateCategories( xDataProvider, uno::UNO_QUERY_THROW );
+ CPPUNIT_ASSERT(xDateCategories.is());
+ return xDateCategories->getDateCategories();
+}
+
+Sequence< OUString > ChartTest::getFormattedDateCategories( const Reference<chart2::XChartDocument>& xChartDoc )
+{
+ Reference<util::XNumberFormatsSupplier> xNFS(xChartDoc, uno::UNO_QUERY_THROW);
+ Reference< util::XNumberFormatter > xNumFormatter(
+ util::NumberFormatter::create(comphelper::getComponentContext(m_xSFactory)), uno::UNO_QUERY_THROW );
+ xNumFormatter->attachNumberFormatsSupplier(xNFS);
+
+ Reference<chart2::XAxis> xAxisX = getAxisFromDoc(xChartDoc, 0, 0, 0);
+ chart2::ScaleData aScaleData = xAxisX->getScaleData();
+ CPPUNIT_ASSERT_EQUAL(chart2::AxisType::DATE, aScaleData.AxisType);
+
+ sal_Int32 nNumFmt = getNumberFormatFromAxis(xAxisX);
+
+ Sequence<double> aDateSeq = getDateCategories(xChartDoc);
+ const sal_Int32 nNumCategories = aDateSeq.getLength();
+ Sequence<OUString> aFormattedDates(nNumCategories);
+ auto aFormattedDatesRange = asNonConstRange(aFormattedDates);
+
+ for (sal_Int32 nIdx = 0; nIdx < nNumCategories; ++nIdx)
+ aFormattedDatesRange[nIdx] = xNumFormatter->convertNumberToString(nNumFmt, aDateSeq[nIdx]);
+
+ return aFormattedDates;
+}
+
awt::Size ChartTest::getPageSize( const Reference< chart2::XChartDocument > & xChartDoc )
{
awt::Size aSize( 0, 0 );
@@ -609,6 +577,29 @@ awt::Size ChartTest::getSize(css::uno::Reference<chart2::XDiagram> xDiagram, con
return aSize;
}
-#endif // INCLUDED_CHART2_QA_EXTRAS_CHARTTEST_HXX
+uno::Reference<drawing::XShape>
+getShapeByName(const uno::Reference<drawing::XShapes>& rShapes, const OUString& rName,
+ const std::function<bool(const uno::Reference<drawing::XShape>&)>& pCondition
+ = nullptr)
+{
+ for (sal_Int32 i = 0; i < rShapes->getCount(); ++i)
+ {
+ uno::Reference<drawing::XShapes> xShapes(rShapes->getByIndex(i), uno::UNO_QUERY);
+ if (xShapes.is())
+ {
+ uno::Reference<drawing::XShape> xRet = getShapeByName(xShapes, rName, pCondition);
+ if (xRet.is())
+ return xRet;
+ }
+ uno::Reference<container::XNamed> xNamedShape(rShapes->getByIndex(i), uno::UNO_QUERY);
+ if (xNamedShape->getName() == rName)
+ {
+ uno::Reference<drawing::XShape> xShape(xNamedShape, uno::UNO_QUERY);
+ if (pCondition == nullptr || pCondition(xShape))
+ return xShape;
+ }
+ }
+ return uno::Reference<drawing::XShape>();
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */