diff options
Diffstat (limited to 'sw/qa/inc/bordertest.hxx')
-rw-r--r-- | sw/qa/inc/bordertest.hxx | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/sw/qa/inc/bordertest.hxx b/sw/qa/inc/bordertest.hxx new file mode 100644 index 000000000..3137c85c9 --- /dev/null +++ b/sw/qa/inc/bordertest.hxx @@ -0,0 +1,206 @@ +/* -*- 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/. + */ +#ifndef INCLUDED_SW_QA_INC_BORDERTEST_HXX +#define INCLUDED_SW_QA_INC_BORDERTEST_HXX + +#include <cppunit/TestAssert.h> +#include <com/sun/star/table/BorderLine.hpp> +#include <com/sun/star/text/XTextTable.hpp> +#include <com/sun/star/text/XTextDocument.hpp> +#include <com/sun/star/container/XEnumerationAccess.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> + +#include <map> + +namespace com::sun::star::table { class XCell; } + +typedef std::map<OUString, css::table::BorderLine> BorderLineMap; +typedef std::pair<OUString, css::table::BorderLine> StringBorderPair; + +using namespace com::sun::star; + +class BorderTest +{ +public: + BorderTest() + { + + } + static void testTheBorders(uno::Reference<lang::XComponent> const & mxComponent, bool isBinaryDoc) + { + uno::Reference<text::XTextDocument> textDocument(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xParaEnumAccess(textDocument->getText(), uno::UNO_QUERY); + // list of paragraphs + uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration(); + + // maps containing TopBorder widths for every cell + // one map for each tables - there are 8 of them, counting from 0 + BorderLineMap map0; + map0.insert(StringBorderPair(OUString("A1"), table::BorderLine(0, 53, 26, 26))); + map0.insert(StringBorderPair(OUString("B1"), table::BorderLine(0, 79, 26, 26))); + map0.insert(StringBorderPair(OUString("C1"), table::BorderLine(0, 106, 26, 26))); + map0.insert(StringBorderPair(OUString("D1"), table::BorderLine(0, 159, 26, 26))); + map0.insert(StringBorderPair(OUString("E1"), table::BorderLine(0, 212, 26, 26))); + BorderLineMap map1; + map1.insert(StringBorderPair(OUString("A1"), table::BorderLine(0, 9, 9, 9))); + map1.insert(StringBorderPair(OUString("B1"), table::BorderLine(0, 18, 18, 18))); + map1.insert(StringBorderPair(OUString("C1"), table::BorderLine(0, 26, 26, 26))); + map1.insert(StringBorderPair(OUString("D1"), table::BorderLine(0, 53, 53, 53))); + map1.insert(StringBorderPair(OUString("E1"), table::BorderLine(0, 79, 79, 79))); + map1.insert(StringBorderPair(OUString("F1"), table::BorderLine(0, 106, 106, 106))); + BorderLineMap map2; + map2.insert(StringBorderPair(OUString("A1"), table::BorderLine(0, 9, 5, 5))); + map2.insert(StringBorderPair(OUString("B1"), table::BorderLine(0, 18, 9, 9))); + map2.insert(StringBorderPair(OUString("C1"), table::BorderLine(0, 26, 14, 14))); + map2.insert(StringBorderPair(OUString("D1"), table::BorderLine(0, 35, 18, 18))); + map2.insert(StringBorderPair(OUString("E1"), table::BorderLine(0, 53, 26, 26))); + map2.insert(StringBorderPair(OUString("F1"), table::BorderLine(0, 79, 41, 41))); + map2.insert(StringBorderPair(OUString("G1"), table::BorderLine(0, 106, 53, 53))); + map2.insert(StringBorderPair(OUString("H1"), table::BorderLine(0, 159, 79, 79))); + map2.insert(StringBorderPair(OUString("I1"), table::BorderLine(0, 212, 106, 106))); + BorderLineMap map3; + map3.insert(StringBorderPair(OUString("A1"), table::BorderLine(0, 53, 26, 9))); + map3.insert(StringBorderPair(OUString("B1"), table::BorderLine(0, 53, 26, 18))); + map3.insert(StringBorderPair(OUString("C1"), table::BorderLine(0, 53, 26, 26))); + map3.insert(StringBorderPair(OUString("D1"), table::BorderLine(0, 53, 26, 35))); + map3.insert(StringBorderPair(OUString("E1"), table::BorderLine(0, 53, 26, 53))); + map3.insert(StringBorderPair(OUString("F1"), table::BorderLine(0, 53, 26, 79))); + map3.insert(StringBorderPair(OUString("G1"), table::BorderLine(0, 53, 26, 106))); + map3.insert(StringBorderPair(OUString("H1"), table::BorderLine(0, 53, 26, 159))); + map3.insert(StringBorderPair(OUString("I1"), table::BorderLine(0, 53, 26, 212))); + map3.insert(StringBorderPair(OUString("A1"), table::BorderLine(0, 53, 26, 9))); + + // Binary-DOC importer changes 'inset' and 'outset' border styles to other styles + // during import, so for now - leaving binary-doc results as they were. + BorderLineMap map4; + if (isBinaryDoc) + { + map4.insert(StringBorderPair(OUString("B1"), table::BorderLine(0, 53, 26, 18))); + map4.insert(StringBorderPair(OUString("C1"), table::BorderLine(0, 53, 26, 26))); + map4.insert(StringBorderPair(OUString("D1"), table::BorderLine(0, 53, 26, 35))); + map4.insert(StringBorderPair(OUString("E1"), table::BorderLine(0, 53, 26, 35))); + map4.insert(StringBorderPair(OUString("F1"), table::BorderLine(0, 53, 26, 79))); + map4.insert(StringBorderPair(OUString("G1"), table::BorderLine(0, 53, 26, 106))); + map4.insert(StringBorderPair(OUString("H1"), table::BorderLine(0, 53, 26, 159))); + map4.insert(StringBorderPair(OUString("I1"), table::BorderLine(0, 53, 26, 212))); + } + else + { + map4.insert(StringBorderPair(OUString("A1"), table::BorderLine(0, 0, 26, 4))); + map4.insert(StringBorderPair(OUString("B1"), table::BorderLine(0, 5, 26, 5))); + map4.insert(StringBorderPair(OUString("C1"), table::BorderLine(0, 14, 26, 14))); + map4.insert(StringBorderPair(OUString("D1"), table::BorderLine(0, 23, 26, 23))); + map4.insert(StringBorderPair(OUString("E1"), table::BorderLine(0, 41, 26, 41))); + map4.insert(StringBorderPair(OUString("F1"), table::BorderLine(0, 67, 26, 67))); + map4.insert(StringBorderPair(OUString("G1"), table::BorderLine(0, 93, 26, 93))); + map4.insert(StringBorderPair(OUString("H1"), table::BorderLine(0, 146, 26, 146))); + map4.insert(StringBorderPair(OUString("I1"), table::BorderLine(0, 199, 26, 199))); + } + BorderLineMap map5; + if (isBinaryDoc) + { + map5.insert(StringBorderPair(OUString("A1"), table::BorderLine(0, 26, 53, 9))); + map5.insert(StringBorderPair(OUString("B1"), table::BorderLine(0, 26, 53, 18))); + map5.insert(StringBorderPair(OUString("C1"), table::BorderLine(0, 26, 53, 26))); + map5.insert(StringBorderPair(OUString("D1"), table::BorderLine(0, 26, 53, 35))); + map5.insert(StringBorderPair(OUString("E1"), table::BorderLine(0, 26, 53, 53))); + map5.insert(StringBorderPair(OUString("F1"), table::BorderLine(0, 26, 53, 79))); + map5.insert(StringBorderPair(OUString("G1"), table::BorderLine(0, 26, 53, 106))); + map5.insert(StringBorderPair(OUString("H1"), table::BorderLine(0, 26, 53, 159))); + map5.insert(StringBorderPair(OUString("I1"), table::BorderLine(0, 26, 53, 212))); + } + else + { + map5.insert(StringBorderPair(OUString("A1"), table::BorderLine(0, 26, 2, 4))); + map5.insert(StringBorderPair(OUString("B1"), table::BorderLine(0, 26, 5, 5))); + map5.insert(StringBorderPair(OUString("C1"), table::BorderLine(0, 26, 14, 14))); + map5.insert(StringBorderPair(OUString("D1"), table::BorderLine(0, 26, 23, 23))); + map5.insert(StringBorderPair(OUString("E1"), table::BorderLine(0, 26, 41, 41))); + map5.insert(StringBorderPair(OUString("F1"), table::BorderLine(0, 26, 67, 67))); + map5.insert(StringBorderPair(OUString("G1"), table::BorderLine(0, 26, 93, 93))); + map5.insert(StringBorderPair(OUString("H1"), table::BorderLine(0, 26, 146, 146))); + map5.insert(StringBorderPair(OUString("I1"), table::BorderLine(0, 26, 199, 199))); + } + BorderLineMap map6; + map6.insert(StringBorderPair(OUString("A1"), table::BorderLine(0, 14, 14, 26))); + map6.insert(StringBorderPair(OUString("B1"), table::BorderLine(0, 26, 26, 53))); + map6.insert(StringBorderPair(OUString("C1"), table::BorderLine(0, 41, 41, 79))); + map6.insert(StringBorderPair(OUString("D1"), table::BorderLine(0, 53, 53, 106))); + map6.insert(StringBorderPair(OUString("E1"), table::BorderLine(0, 79, 79, 159))); + map6.insert(StringBorderPair(OUString("F1"), table::BorderLine(0, 106, 106, 212))); + BorderLineMap map7; + map7.insert(StringBorderPair(OUString("A1"), table::BorderLine(0, 14, 14, 26))); + map7.insert(StringBorderPair(OUString("B1"), table::BorderLine(0, 26, 26, 53))); + map7.insert(StringBorderPair(OUString("C1"), table::BorderLine(0, 41, 41, 79))); + map7.insert(StringBorderPair(OUString("D1"), table::BorderLine(0, 53, 53, 106))); + map7.insert(StringBorderPair(OUString("E1"), table::BorderLine(0, 79, 79, 159))); + map7.insert(StringBorderPair(OUString("F1"), table::BorderLine(0, 106, 106, 212))); + + sal_Int32 currentTable = 0; //to know which map should we check with the current table + BorderLineMap* tempMap; + tempMap = &map0; + do + { + uno::Reference<lang::XServiceInfo> xServiceInfo; + if (xParaEnum->nextElement() >>= xServiceInfo) + { + if (xServiceInfo->supportsService("com.sun.star.text.TextTable")) + { + uno::Reference<text::XTextTable> const xTextTable(xServiceInfo, uno::UNO_QUERY_THROW); + uno::Sequence<OUString> const cells = xTextTable->getCellNames(); + + if(currentTable == sal_Int32(1)) + tempMap = &map1; + if(currentTable == sal_Int32(2)) + tempMap = &map2; + if(currentTable == sal_Int32(3)) + tempMap = &map3; + if(currentTable == sal_Int32(4)) + tempMap = &map4; + if(currentTable == sal_Int32(5)) + tempMap = &map5; + if(currentTable == sal_Int32(6)) + tempMap = &map6; + if(currentTable == sal_Int32(7)) + tempMap = &map7; + + BorderLineMap::iterator it = tempMap->begin(); + + for (const auto& rCell : cells) + { + uno::Reference<table::XCell> xCell = xTextTable->getCellByName(rCell); + uno::Reference< beans::XPropertySet > xPropSet(xCell, uno::UNO_QUERY_THROW); + uno::Any aAny = xPropSet->getPropertyValue("TopBorder"); + table::BorderLine aBorderLine; + it = tempMap->find(rCell); + if ((aAny >>= aBorderLine) && (it!=tempMap->end())) + { + sal_Int32 innerLineWidth = aBorderLine.InnerLineWidth; + sal_Int32 outerLineWidth = aBorderLine.OuterLineWidth; + sal_Int32 lineDistance = aBorderLine.LineDistance; + + sal_Int32 perfectInner = it->second.InnerLineWidth; + sal_Int32 perfectOuter = it->second.OuterLineWidth; + sal_Int32 perfectDistance = it->second.LineDistance; + CPPUNIT_ASSERT_EQUAL(perfectInner, innerLineWidth); + CPPUNIT_ASSERT_EQUAL(perfectOuter, outerLineWidth); + CPPUNIT_ASSERT_EQUAL(perfectDistance, lineDistance); + } + } + ++currentTable; + } + } + } while(xParaEnum->hasMoreElements()); + } + +}; +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |