tdf#45904 Move XEnumerationAccess Java test to C++

Move XEnumerationAccess Java test to C++ for ScNamedRangesObj.

Change-Id: Ia19281b8e481eda2535eb6f26c60dedc65f1beec
Reviewed-on: https://gerrit.libreoffice.org/66933
Tested-by: Jenkins
Reviewed-by: Jens Carl <[email protected]>
diff --git a/include/test/sheet/xnamedranges.hxx b/include/test/sheet/xnamedranges.hxx
index 9e750c3..3ce90f8 100644
--- a/include/test/sheet/xnamedranges.hxx
+++ b/include/test/sheet/xnamedranges.hxx
@@ -10,23 +10,33 @@
#ifndef INCLUDED_TEST_SHEET_XNAMEDRANGES_HXX
#define INCLUDED_TEST_SHEET_XNAMEDRANGES_HXX

#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/sheet/XSpreadsheet.hpp>

#include <com/sun/star/uno/Reference.hxx>

#include <rtl/ustring.hxx>
#include <sal/types.h>
#include <test/testdllapi.hxx>

namespace apitest {

namespace apitest
{
class OOO_DLLPUBLIC_TEST XNamedRanges
{
public:
    // remove default entry
    XNamedRanges();
    XNamedRanges()
        : maNameToRemove("initial1")
    {
    }

    // removes given entry
    XNamedRanges(const OUString& rNameToRemove);
    XNamedRanges(const OUString& rNameToRemove)
        : maNameToRemove(rNameToRemove)
    {
    }

    virtual ~XNamedRanges();

    virtual css::uno::Reference< css::uno::XInterface > init(sal_Int32 nSheets = 0) = 0;
    virtual css::uno::Reference<css::uno::XInterface> init() = 0;
    virtual css::uno::Reference<css::uno::XInterface> getXNamedRanges(sal_Int32 nSheet = 0) = 0;

    // XNamedRanges
    void testAddNewByName();
@@ -35,13 +45,14 @@ public:
    void testOutputList();

protected:
    css::uno::Reference< css::sheet::XSpreadsheet > xSheet;
    ~XNamedRanges(){};
    css::uno::Reference<css::sheet::XSpreadsheet> xSheet;

private:
    OUString const maNameToRemove;
};

}
} // namespace apitest

#endif // INCLUDED_TEST_SHEET_XNAMEDRANGES_HXX

diff --git a/qadevOOo/objdsc/sc/com.sun.star.comp.office.ScNamedRangesObj.csv b/qadevOOo/objdsc/sc/com.sun.star.comp.office.ScNamedRangesObj.csv
index 815f57b..da83532 100644
--- a/qadevOOo/objdsc/sc/com.sun.star.comp.office.ScNamedRangesObj.csv
+++ b/qadevOOo/objdsc/sc/com.sun.star.comp.office.ScNamedRangesObj.csv
@@ -5,4 +5,3 @@
"ScNamedRangesObj";"com::sun::star::container::XIndexAccess";"getByIndex()"
"ScNamedRangesObj";"com::sun::star::container::XElementAccess";"getElementType()"
"ScNamedRangesObj";"com::sun::star::container::XElementAccess";"hasElements()"
"ScNamedRangesObj";"com::sun::star::container::XEnumerationAccess";"createEnumeration()"
diff --git a/sc/qa/extras/scnamedrangesobj.cxx b/sc/qa/extras/scnamedrangesobj.cxx
index dd08cbb..d09ad0d 100644
--- a/sc/qa/extras/scnamedrangesobj.cxx
+++ b/sc/qa/extras/scnamedrangesobj.cxx
@@ -8,18 +8,24 @@
 */

#include <test/calc_unoapi_test.hxx>
#include <test/container/xenumerationaccess.hxx>
#include <test/sheet/xnamedranges.hxx>

#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/sheet/XNamedRanges.hpp>
#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
#include <com/sun/star/uno/XInterface.hpp>

#include <com/sun/star/uno/Reference.hxx>

using namespace css;
using namespace css::uno;

namespace sc_apitest {

class ScNamedRangesObj : public CalcUnoApiTest, public apitest::XNamedRanges
namespace sc_apitest
{
class ScNamedRangesObj : public CalcUnoApiTest,
                         public apitest::XEnumerationAccess,
                         public apitest::XNamedRanges
{
public:
    ScNamedRangesObj();
@@ -27,10 +33,14 @@ public:
    virtual void setUp() override;
    virtual void tearDown() override;

    virtual uno::Reference< uno::XInterface > init(sal_Int32 nSheet = 0) override;
    virtual uno::Reference<uno::XInterface> init() override;
    virtual uno::Reference<uno::XInterface> getXNamedRanges(sal_Int32 nSheet = 0) override;

    CPPUNIT_TEST_SUITE(ScNamedRangesObj);

    // XEnumerationAccess
    CPPUNIT_TEST(testCreateEnumeration);

    // XNamedRanges
    CPPUNIT_TEST(testAddNewByName);
    CPPUNIT_TEST(testAddNewFromTitles);
@@ -40,24 +50,37 @@ public:
    CPPUNIT_TEST_SUITE_END();

private:
    uno::Reference< lang::XComponent > mxComponent;
    uno::Reference<lang::XComponent> mxComponent;
};

ScNamedRangesObj::ScNamedRangesObj()
     : CalcUnoApiTest("/sc/qa/extras/testdocuments")
    : CalcUnoApiTest("/sc/qa/extras/testdocuments")
{
}

uno::Reference< uno::XInterface > ScNamedRangesObj::init(sal_Int32 nSheet)
uno::Reference<uno::XInterface> ScNamedRangesObj::init()
{
    CPPUNIT_ASSERT_MESSAGE("no component loaded", mxComponent.is());

    uno::Reference< beans::XPropertySet > xPropSet (mxComponent, UNO_QUERY_THROW);
    uno::Reference< sheet::XNamedRanges > xNamedRanges(xPropSet->getPropertyValue("NamedRanges"), UNO_QUERY_THROW);
    uno::Reference<beans::XPropertySet> xPropSet(mxComponent, UNO_QUERY_THROW);
    uno::Reference<sheet::XNamedRanges> xNamedRanges(xPropSet->getPropertyValue("NamedRanges"),
                                                     UNO_QUERY_THROW);

    //set value from xnamedranges.hxx
    uno::Reference< sheet::XSpreadsheetDocument > xDoc(mxComponent, UNO_QUERY_THROW);
    uno::Reference< container::XIndexAccess > xIndexAccess(xDoc->getSheets(), UNO_QUERY_THROW);
    uno::Reference<sheet::XSpreadsheetDocument> xDoc(mxComponent, UNO_QUERY_THROW);
    uno::Reference<container::XIndexAccess> xIndexAccess(xDoc->getSheets(), UNO_QUERY_THROW);
    xSheet.set(xIndexAccess->getByIndex(0), UNO_QUERY_THROW);

    return xNamedRanges;
}

uno::Reference<uno::XInterface> ScNamedRangesObj::getXNamedRanges(sal_Int32 nSheet)
{
    uno::Reference<beans::XPropertySet> xPropSet(mxComponent, UNO_QUERY_THROW);
    uno::Reference<sheet::XNamedRanges> xNamedRanges(xPropSet->getPropertyValue("NamedRanges"),
                                                     UNO_QUERY_THROW);

    //set value from xnamedranges.hxx
    uno::Reference<sheet::XSpreadsheetDocument> xDoc(mxComponent, UNO_QUERY_THROW);
    uno::Reference<container::XIndexAccess> xIndexAccess(xDoc->getSheets(), UNO_QUERY_THROW);
    xSheet.set(xIndexAccess->getByIndex(nSheet), UNO_QUERY_THROW);

    return xNamedRanges;
@@ -80,7 +103,7 @@ void ScNamedRangesObj::tearDown()

CPPUNIT_TEST_SUITE_REGISTRATION(ScNamedRangesObj);

}
} // namespace sc_apitest

CPPUNIT_PLUGIN_IMPLEMENT();

diff --git a/solenv/clang-format/blacklist b/solenv/clang-format/blacklist
index 5b24ae8..fe3dc1f 100644
--- a/solenv/clang-format/blacklist
+++ b/solenv/clang-format/blacklist
@@ -7599,7 +7599,6 @@ include/test/sheet/xdatapilottable.hxx
include/test/sheet/xdatapilottable2.hxx
include/test/sheet/xgoalseek.hxx
include/test/sheet/xnamedrange.hxx
include/test/sheet/xnamedranges.hxx
include/test/sheet/xprintareas.hxx
include/test/sheet/xsheetannotation.hxx
include/test/sheet/xsheetannotations.hxx
@@ -10146,7 +10145,6 @@ sc/qa/extras/sceditfieldobj-header.cxx
sc/qa/extras/scfilterdescriptorbaseobj.cxx
sc/qa/extras/scmodelobj.cxx
sc/qa/extras/scnamedrangeobj.cxx
sc/qa/extras/scnamedrangesobj.cxx
sc/qa/extras/scoutlineobj.cxx
sc/qa/extras/scsubtotaldescriptorbaseobj.cxx
sc/qa/extras/scsubtotalfieldobj.cxx
@@ -16588,7 +16586,6 @@ test/source/sheet/xdatapilottable.cxx
test/source/sheet/xdatapilottable2.cxx
test/source/sheet/xgoalseek.cxx
test/source/sheet/xnamedrange.cxx
test/source/sheet/xnamedranges.cxx
test/source/sheet/xprintareas.cxx
test/source/sheet/xsheetannotation.cxx
test/source/sheet/xsheetannotations.cxx
diff --git a/test/source/sheet/xnamedranges.cxx b/test/source/sheet/xnamedranges.cxx
index 109cebd..036f5b7 100644
--- a/test/source/sheet/xnamedranges.cxx
+++ b/test/source/sheet/xnamedranges.cxx
@@ -8,116 +8,108 @@
 */

#include <test/sheet/xnamedranges.hxx>
#include <rtl/ustring.hxx>

#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
#include <com/sun/star/sheet/XSpreadsheet.hpp>
#include <com/sun/star/table/XCellRange.hpp>
#include <com/sun/star/sheet/XCellRangeAddressable.hpp>
#include <com/sun/star/sheet/XCellRangeReferrer.hpp>
#include <com/sun/star/sheet/XNamedRanges.hpp>
#include <com/sun/star/sheet/XNamedRange.hpp>
#include <com/sun/star/table/XCell.hpp>
#include <com/sun/star/text/XTextRange.hpp>
#include <com/sun/star/container/XIndexAccess.hpp>

#include <com/sun/star/table/CellAddress.hpp>
#include <com/sun/star/table/CellRangeAddress.hpp>
#include <com/sun/star/sheet/Border.hpp>
#include <com/sun/star/sheet/NamedRangeFlag.hpp>
#include <com/sun/star/sheet/XCellRangeAddressable.hpp>
#include <com/sun/star/sheet/XCellRangeReferrer.hpp>
#include <com/sun/star/sheet/XNamedRange.hpp>
#include <com/sun/star/sheet/XNamedRanges.hpp>
#include <com/sun/star/sheet/XSpreadsheet.hpp>
#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
#include <com/sun/star/table/CellAddress.hpp>
#include <com/sun/star/table/CellRangeAddress.hpp>
#include <com/sun/star/table/XCell.hpp>
#include <com/sun/star/table/XCellRange.hpp>
#include <com/sun/star/text/XTextRange.hpp>

#include <rtl/ustring.hxx>
#include <com/sun/star/uno/Reference.hxx>

#include <cppunit/extensions/HelperMacros.h>

#include <iostream>

using namespace css;
using namespace css::uno;

namespace apitest {

XNamedRanges::XNamedRanges():
    maNameToRemove("initial1")
namespace apitest
{

}

XNamedRanges::XNamedRanges(const OUString& rNameToRemove):
    maNameToRemove(rNameToRemove)
{

}

XNamedRanges::~XNamedRanges()
{
}

void XNamedRanges::testAddNewByName()
{
    uno::Reference< sheet::XNamedRanges > xNamedRanges(init(), UNO_QUERY_THROW);
    uno::Reference< container::XNameAccess > xNamedRangesNameAccess(init(1), UNO_QUERY_THROW);
    uno::Reference<sheet::XNamedRanges> xNamedRanges(init(), UNO_QUERY_THROW);
    uno::Reference<container::XNameAccess> xNamedRangesNameAccess(getXNamedRanges(1),
                                                                  UNO_QUERY_THROW);

    table::CellAddress aBaseAddress = table::CellAddress(0,0,0);
    table::CellAddress aBaseAddress = table::CellAddress(0, 0, 0);

    sal_Int32 nType = 0;
    OUString const aContent1("D1");
    OUString aName1("type_0");
    xNamedRanges->addNewByName(aName1, aContent1, aBaseAddress, nType);
    CPPUNIT_ASSERT_MESSAGE("Failed to create Namedrange Type 0 - Normal case", xNamedRanges->hasByName(aName1));
    CPPUNIT_ASSERT_MESSAGE("Failed to create Namedrange Type 0 - Normal case",
                           xNamedRanges->hasByName(aName1));

    nType = ::sheet::NamedRangeFlag::COLUMN_HEADER;
    OUString const aContent2("D2");
    OUString aName2("type_COLUMN_HEADER");
    xNamedRanges->addNewByName(aName2, aContent2, aBaseAddress, nType);
    CPPUNIT_ASSERT_MESSAGE("Failed to create Namedrange Type COLUMN_HEADER", xNamedRanges->hasByName(aName2));
    CPPUNIT_ASSERT_MESSAGE("Failed to create Namedrange Type COLUMN_HEADER",
                           xNamedRanges->hasByName(aName2));

    nType = ::sheet::NamedRangeFlag::FILTER_CRITERIA;
    OUString const aContent3("D3");
    OUString aName3("type_FILTER_CRITERIA");
    xNamedRanges->addNewByName(aName3, aContent3, aBaseAddress, nType);
    CPPUNIT_ASSERT_MESSAGE("Failed to create Namedrange Type FILTER_CRITERIA", xNamedRanges->hasByName(aName3));
    CPPUNIT_ASSERT_MESSAGE("Failed to create Namedrange Type FILTER_CRITERIA",
                           xNamedRanges->hasByName(aName3));

    nType = ::sheet::NamedRangeFlag::PRINT_AREA;
    OUString const aContent4("D4");
    OUString aName4("type_PRINT_AREA");
    xNamedRanges->addNewByName(aName4, aContent4, aBaseAddress, nType);
    CPPUNIT_ASSERT_MESSAGE("Failed to create Namedrange Type PRINT_AREA", xNamedRanges->hasByName(aName4));
    CPPUNIT_ASSERT_MESSAGE("Failed to create Namedrange Type PRINT_AREA",
                           xNamedRanges->hasByName(aName4));

    nType = ::sheet::NamedRangeFlag::ROW_HEADER;
    OUString const aContent5("D5");
    OUString aName5("type_ROW_HEADER");
    xNamedRanges->addNewByName(aName5, aContent5, aBaseAddress, nType);
    CPPUNIT_ASSERT_MESSAGE("Failed to create Namedrange Type ROW_HEADER", xNamedRanges->hasByName(aName5));

    CPPUNIT_ASSERT_MESSAGE("Failed to create Namedrange Type ROW_HEADER",
                           xNamedRanges->hasByName(aName5));
}

void XNamedRanges::testAddNewFromTitles()
{
    uno::Reference< sheet::XNamedRanges > xNamedRanges(init(1), UNO_QUERY_THROW);
    uno::Reference< container::XIndexAccess > xNamedRangesIndex(xNamedRanges, UNO_QUERY_THROW);
    uno::Reference< container::XNameAccess > xNamedRangesNameAccess(xNamedRanges, UNO_QUERY_THROW);
    uno::Reference<sheet::XNamedRanges> xNamedRanges(getXNamedRanges(1), UNO_QUERY_THROW);
    uno::Reference<container::XIndexAccess> xNamedRangesIndex(xNamedRanges, UNO_QUERY_THROW);
    uno::Reference<container::XNameAccess> xNamedRangesNameAccess(xNamedRanges, UNO_QUERY_THROW);

    table::CellRangeAddress aCellRangeAddress = table::CellRangeAddress(1,0,0,3,3);
    table::CellRangeAddress aCellRangeAddress = table::CellRangeAddress(1, 0, 0, 3, 3);

    OUString aString;
    uno::Reference< table::XCell > xCell;
    uno::Reference<table::XCell> xCell;

    xNamedRanges->addNewFromTitles(aCellRangeAddress, sheet::Border_TOP);

    for (sal_Int32 i = 1; i < 4; i++)
    {
        // verify namedrange exists
        xCell = xSheet->getCellByPosition(i,0);
        uno::Reference< text::XTextRange > xTextRange(xCell, UNO_QUERY_THROW);
        xCell = xSheet->getCellByPosition(i, 0);
        uno::Reference<text::XTextRange> xTextRange(xCell, UNO_QUERY_THROW);
        aString = xTextRange->getString();
        std::cout << "addNewFromTitles: verify " << aString << std::endl;
        CPPUNIT_ASSERT_MESSAGE("Non existing NamedRange", xNamedRanges->hasByName(aString));

        // verify it points on the right cell
        uno::Any aNr = xNamedRangesNameAccess->getByName(aString);
        uno::Reference< sheet::XNamedRange > xNamedRange(aNr, UNO_QUERY_THROW);
        uno::Reference<sheet::XNamedRange> xNamedRange(aNr, UNO_QUERY_THROW);

        uno::Reference< sheet::XCellRangeReferrer > xCellRangeRef(xNamedRange, UNO_QUERY_THROW);
        uno::Reference< sheet::XCellRangeAddressable > xCellRangeAdr(xCellRangeRef->getReferredCells(), UNO_QUERY_THROW);
        uno::Reference<sheet::XCellRangeReferrer> xCellRangeRef(xNamedRange, UNO_QUERY_THROW);
        uno::Reference<sheet::XCellRangeAddressable> xCellRangeAdr(
            xCellRangeRef->getReferredCells(), UNO_QUERY_THROW);
        table::CellRangeAddress cellRangeAddress = xCellRangeAdr->getRangeAddress();

        CPPUNIT_ASSERT_EQUAL(i, cellRangeAddress.EndColumn);
@@ -132,18 +124,19 @@ void XNamedRanges::testAddNewFromTitles()
    for (sal_Int32 i = 1; i < 4; i++)
    {
        // verify namedrange exists
        xCell = xSheet->getCellByPosition(0,i);
        uno::Reference< text::XTextRange > xTextRange(xCell, UNO_QUERY_THROW);
        xCell = xSheet->getCellByPosition(0, i);
        uno::Reference<text::XTextRange> xTextRange(xCell, UNO_QUERY_THROW);
        aString = xTextRange->getString();
        std::cout << "verify " << aString << std::endl;
        CPPUNIT_ASSERT_MESSAGE("Non existing NamedRange", xNamedRanges->hasByName(aString));

        // verify it points on the right cell
        uno::Any aNr= xNamedRangesNameAccess->getByName(aString);
        uno::Reference< sheet::XNamedRange > xNamedRange(aNr, UNO_QUERY_THROW);
        uno::Any aNr = xNamedRangesNameAccess->getByName(aString);
        uno::Reference<sheet::XNamedRange> xNamedRange(aNr, UNO_QUERY_THROW);

        uno::Reference< sheet::XCellRangeReferrer > xCellRangeRef(xNamedRange, UNO_QUERY_THROW);
        uno::Reference< sheet::XCellRangeAddressable > xCellRangeAdr(xCellRangeRef->getReferredCells(), UNO_QUERY_THROW);
        uno::Reference<sheet::XCellRangeReferrer> xCellRangeRef(xNamedRange, UNO_QUERY_THROW);
        uno::Reference<sheet::XCellRangeAddressable> xCellRangeAdr(
            xCellRangeRef->getReferredCells(), UNO_QUERY_THROW);
        table::CellRangeAddress cellRangeAddress = xCellRangeAdr->getRangeAddress();

        CPPUNIT_ASSERT_EQUAL(i, cellRangeAddress.EndRow);
@@ -156,8 +149,8 @@ void XNamedRanges::testAddNewFromTitles()

void XNamedRanges::testRemoveByName()
{
    uno::Reference< sheet::XNamedRanges > xNamedRanges(init(), UNO_QUERY_THROW);
    uno::Reference< container::XIndexAccess > xIndex(xNamedRanges, UNO_QUERY_THROW);
    uno::Reference<sheet::XNamedRanges> xNamedRanges(init(), UNO_QUERY_THROW);
    uno::Reference<container::XIndexAccess> xIndex(xNamedRanges, UNO_QUERY_THROW);

    bool bHasIt = xNamedRanges->hasByName(maNameToRemove);
    CPPUNIT_ASSERT_MESSAGE("NamedRange initial1 does not exist, can't remove it", bHasIt);
@@ -168,35 +161,38 @@ void XNamedRanges::testRemoveByName()
        sal_Int32 nInitialCount = xIndex->getCount();
        xNamedRanges->removeByName(maNameToRemove);
        sal_Int32 nNewCount = xIndex->getCount();
        CPPUNIT_ASSERT_EQUAL_MESSAGE("NamedRange initial1 not removed", nNewCount, nInitialCount - 1);
        CPPUNIT_ASSERT_MESSAGE("Wrong NamedRange removed, initial1 still present", !xNamedRanges->hasByName(maNameToRemove));
        CPPUNIT_ASSERT_EQUAL_MESSAGE("NamedRange initial1 not removed", nNewCount,
                                     nInitialCount - 1);
        CPPUNIT_ASSERT_MESSAGE("Wrong NamedRange removed, initial1 still present",
                               !xNamedRanges->hasByName(maNameToRemove));
        // try to remove non existing
        xNamedRanges->removeByName("dummyNonExistingNamedRange");// an exception should be raised here
        xNamedRanges->removeByName(
            "dummyNonExistingNamedRange"); // an exception should be raised here
    }
}

void XNamedRanges::testOutputList()
{
    table::CellAddress aCellAddress = table::CellAddress (0,2,0);
    uno::Reference< sheet::XNamedRanges > xNamedRanges(init(), UNO_QUERY_THROW);
    uno::Reference< container::XIndexAccess > xNamedRangesIndex(init(), UNO_QUERY_THROW);
    table::CellAddress aCellAddress = table::CellAddress(0, 2, 0);
    uno::Reference<sheet::XNamedRanges> xNamedRanges(init(), UNO_QUERY_THROW);
    uno::Reference<container::XIndexAccess> xNamedRangesIndex(init(), UNO_QUERY_THROW);
    sal_Int32 nElementsCount = xNamedRangesIndex->getCount();

    xNamedRanges->outputList(aCellAddress);

    OUString aString;
    uno::Reference< table::XCell > xCell;
    uno::Reference<table::XCell> xCell;

    for (sal_Int32 i = 0; i < nElementsCount; i++)
    {
        xCell = xSheet->getCellByPosition(2,i);
        uno::Reference< text::XTextRange > xTextRange(xCell, UNO_QUERY_THROW);
        xCell = xSheet->getCellByPosition(2, i);
        uno::Reference<text::XTextRange> xTextRange(xCell, UNO_QUERY_THROW);
        aString = xTextRange->getString();
        std::cout << "verify " << aString << std::endl;
        CPPUNIT_ASSERT_MESSAGE("Non existing NamedRange", xNamedRanges->hasByName(aString));
    }
}

}
} // namespace apitest

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */