/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //check the DataPilot of Calc. using namespace css; using namespace css::lang; namespace sc_apitest { class CheckDataPilotField : public CalcUnoApiTest, public apitest::XNamed, public apitest::XPropertySet { public: CheckDataPilotField(); virtual void setUp() override; virtual void tearDown() override; uno::Reference init() override; CPPUNIT_TEST_SUITE(CheckDataPilotField); // _XNamed CPPUNIT_TEST(testGetName); CPPUNIT_TEST(testSetName); // XPropertySet CPPUNIT_TEST(testGetPropertySetInfo); CPPUNIT_TEST(testSetPropertyValue); CPPUNIT_TEST(testGetPropertyValue); CPPUNIT_TEST_SUITE_END(); protected: virtual bool isPropertyIgnored(const OUString& rName) override; private: uno::Reference mxComponent; uno::Reference mxObject; int mMaxFieldIndex = 6; }; bool CheckDataPilotField::isPropertyIgnored(const OUString& rName) { return rName == "Function" || rName == "Subtotals" || rName == "Function2" || rName == "Subtotals2"; } CheckDataPilotField::CheckDataPilotField() : CalcUnoApiTest("/sc/qa/extras/testdocuments") , apitest::XNamed("Col1") { } uno::Reference CheckDataPilotField::init() { // create a calc document if (!mxComponent.is()) // Load an empty document. mxComponent = loadFromDesktop("private:factory/scalc"); else return mxObject; uno::Reference xSheetDoc(mxComponent, uno::UNO_QUERY_THROW); // the cell range table::CellRangeAddress sCellRangeAddress; sCellRangeAddress.Sheet = 0; sCellRangeAddress.StartColumn = 1; sCellRangeAddress.StartRow = 0; sCellRangeAddress.EndColumn = mMaxFieldIndex - 1; sCellRangeAddress.EndRow = mMaxFieldIndex - 1; // position of the data pilot table table::CellAddress sCellAddress; sCellAddress.Sheet = 0; sCellAddress.Column = 7; sCellAddress.Row = 8; // Getting spreadsheet uno::Reference xSpreadsheets = xSheetDoc->getSheets(); uno::Reference oIndexAccess(xSpreadsheets, uno::UNO_QUERY_THROW); // Per default there's now just one sheet, make sure we have at least two, then xSpreadsheets->insertNewByName("Some Sheet", 0); uno::Any aAny = oIndexAccess->getByIndex(0); uno::Reference oSheet; CPPUNIT_ASSERT(aAny >>= oSheet); uno::Any aAny2 = oIndexAccess->getByIndex(1); uno::Reference oSheet2; CPPUNIT_ASSERT(aAny2 >>= oSheet2); //Filling a table for (int i = 1; i < mMaxFieldIndex; i++) { oSheet->getCellByPosition(i, 0)->setFormula("Col" + OUString::number(i)); oSheet->getCellByPosition(0, i)->setFormula("Row" + OUString::number(i)); oSheet2->getCellByPosition(i, 0)->setFormula("Col" + OUString::number(i)); oSheet2->getCellByPosition(0, i)->setFormula("Row" + OUString::number(i)); } for (int i = 1; i < mMaxFieldIndex; i++) { for (int j = 1; j < mMaxFieldIndex; j++) { oSheet->getCellByPosition(i, j)->setValue(i * (j + 1)); oSheet2->getCellByPosition(i, j)->setValue(i * (j + 2)); } } // change a value of a cell and check the change in the data pilot // cell of data uno::Any oChangeCell; oChangeCell <<= oSheet->getCellByPosition(1, 5); int x = sCellAddress.Column; int y = sCellAddress.Row + 3; // cell of the data pilot output uno::Any oCheckCell; oCheckCell <<= oSheet->getCellByPosition(x, y); // create the test objects uno::Reference DPTS(oSheet, uno::UNO_QUERY_THROW); uno::Reference DPT = DPTS->getDataPilotTables(); uno::Reference DPDsc = DPT->createDataPilotDescriptor(); DPDsc->setSourceRange(sCellRangeAddress); uno::Any oDataPilotField = DPDsc->getDataPilotFields()->getByIndex(0); uno::Reference fieldPropSet(oDataPilotField, uno::UNO_QUERY_THROW); uno::Any sum; sum <<= sheet::GeneralFunction_SUM; fieldPropSet->setPropertyValue("Function", sum); uno::Any data; data <<= sheet::DataPilotFieldOrientation_DATA; fieldPropSet->setPropertyValue("Orientation", data); //Insert the DataPilotTable if (DPT->hasByName("DataPilotField")) DPT->removeByName("DataPilotField"); DPT->insertNewByName("DataPilotTField", sCellAddress, DPDsc); uno::Reference IA = DPDsc->getDataPilotFields(); uno::Reference xDataPilotFieldObject; data = IA->getByIndex(0); CPPUNIT_ASSERT(data >>= xDataPilotFieldObject); mxObject = xDataPilotFieldObject; return xDataPilotFieldObject; } void CheckDataPilotField::setUp() { CalcUnoApiTest::setUp(); init(); } void CheckDataPilotField::tearDown() { closeDocument(mxComponent); mxComponent.clear(); CalcUnoApiTest::tearDown(); } CPPUNIT_TEST_SUITE_REGISTRATION(CheckDataPilotField); } CPPUNIT_PLUGIN_IMPLEMENT();