1
0
Fork 0
libreoffice/sc/qa/extras/sccheck_xcell_ranges_query.cxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

178 lines
5.3 KiB
C++

/* -*- 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 <test/unoapi_test.hxx>
#include <com/sun/star/container/XIndexAccess.hpp>
#include <com/sun/star/sheet/XCellRangesQuery.hpp>
#include <com/sun/star/sheet/XSheetCellRanges.hpp>
#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
#include <com/sun/star/sheet/XSpreadsheet.hpp>
#include <com/sun/star/table/CellAddress.hpp>
#include <com/sun/star/container/XNamed.hpp>
using namespace css;
namespace sc_apitest
{
class CheckXCellRangesQuery : public UnoApiTest
{
public:
CheckXCellRangesQuery();
virtual void setUp() override;
uno::Reference<uno::XInterface> init();
void checkEmptyCell();
void checkFilledCell();
void _queryColumnDifferences(const OUString& expected);
void _queryRowDifferences(const OUString& expected);
void _queryEmptyCells(const OUString& expected);
CPPUNIT_TEST_SUITE(CheckXCellRangesQuery);
CPPUNIT_TEST(checkEmptyCell);
CPPUNIT_TEST(checkFilledCell);
CPPUNIT_TEST_SUITE_END();
private:
uno::Reference<sheet::XCellRangesQuery> m_xCell;
OUString sSheetName;
};
CheckXCellRangesQuery::CheckXCellRangesQuery()
: UnoApiTest(u"/sc/qa/extras/testdocuments"_ustr)
{
}
uno::Reference<uno::XInterface> CheckXCellRangesQuery::init()
{
// create a calc document
if (!mxComponent.is())
// Load an empty document.
loadFromURL(u"private:factory/scalc"_ustr);
uno::Reference<sheet::XSpreadsheetDocument> xSheetDoc(mxComponent, uno::UNO_QUERY_THROW);
// Getting spreadsheet
uno::Reference<sheet::XSpreadsheets> oSheets = xSheetDoc->getSheets();
uno::Reference<container::XIndexAccess> oIndexSheets(oSheets, uno::UNO_QUERY_THROW);
uno::Any aAny = oIndexSheets->getByIndex(0);
uno::Reference<container::XNamed> xNamed;
CPPUNIT_ASSERT(aAny >>= xNamed);
sSheetName = xNamed->getName();
// get the cell
uno::Reference<sheet::XSpreadsheet> xSpreadSheet;
CPPUNIT_ASSERT(aAny >>= xSpreadSheet);
uno::Reference<uno::XInterface> oObj = xSpreadSheet->getCellByPosition(2, 3);
m_xCell = uno::Reference<sheet::XCellRangesQuery>(oObj, uno::UNO_QUERY_THROW);
// set one value for comparison.
xSpreadSheet->getCellByPosition(1, 1)->setValue(15);
xSpreadSheet->getCellByPosition(1, 3)->setValue(5);
xSpreadSheet->getCellByPosition(2, 1)->setFormula(u"=B2+B4"_ustr);
return xSpreadSheet;
}
/**
* Perform some tests on an empty cell:
* <ol>
* <li>compare an empty cell with a cell with a value in the same column</li>
* <li>compare an empty cell with a cell with a value in the same row</li>
* <li>query for empty cells</li>
* <ol>
*/
void CheckXCellRangesQuery::checkEmptyCell()
{
// compare an empty cell with a cell with a value
_queryColumnDifferences(sSheetName + ".C4");
// compare an empty cell with a cell with a value
_queryRowDifferences(sSheetName + ".C4");
}
/**
* Perform some tests on a filled cell:
* <ol>
* <li>compare a cell with value 5 with a cell with value 15 in the same
* column</li>
* <li>compare a cell with value 5 with a cell with value 15 in the same
* row</li>
* <li>query for an empty cell.</li>
* <ol>
*/
void CheckXCellRangesQuery::checkFilledCell()
{
uno::Reference<sheet::XSpreadsheet> xSpreadSheet(init(), uno::UNO_QUERY_THROW);
// fill the cell with a value
xSpreadSheet->getCellByPosition(2, 3)->setValue(15);
// compare a cell with value 5 with a cell with value 15
_queryColumnDifferences(sSheetName + ".C4");
// compare a cell with value 5 with a cell with value 15
_queryRowDifferences(sSheetName + ".C4");
// try to get nothing
_queryEmptyCells(u""_ustr);
}
/**
* Query column differences between my cell(2,3) and (1,1).
*
* @param expected The expected outcome value.
*/
void CheckXCellRangesQuery::_queryColumnDifferences(const OUString& expected)
{
//Query column differences
uno::Reference<sheet::XSheetCellRanges> ranges
= m_xCell->queryColumnDifferences(table::CellAddress(0, 1, 1));
OUString getting = ranges->getRangeAddressesAsString();
CPPUNIT_ASSERT_EQUAL(expected, getting);
}
/**
* Query for an empty cell.
*
* @param expected The expected outcome value.
*/
void CheckXCellRangesQuery::_queryEmptyCells(const OUString& expected)
{
//Query empty cells
uno::Reference<sheet::XSheetCellRanges> ranges = m_xCell->queryEmptyCells();
OUString getting = ranges->getRangeAddressesAsString();
CPPUNIT_ASSERT_EQUAL(expected, getting);
}
/**
* Query row differences between my cell(2,3) and (1,1).
*
* @param expected The expected outcome value.
*/
void CheckXCellRangesQuery::_queryRowDifferences(const OUString& expected)
{
//Query row differences
uno::Reference<sheet::XSheetCellRanges> ranges
= m_xCell->queryRowDifferences(table::CellAddress(0, 1, 1));
OUString getting = ranges->getRangeAddressesAsString();
CPPUNIT_ASSERT_EQUAL(expected, getting);
}
void CheckXCellRangesQuery::setUp()
{
UnoApiTest::setUp();
init();
}
CPPUNIT_TEST_SUITE_REGISTRATION(CheckXCellRangesQuery);
}
CPPUNIT_PLUGIN_IMPLEMENT();