summaryrefslogtreecommitdiffstats
path: root/sc/qa/unit/helper/qahelper.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/qa/unit/helper/qahelper.hxx')
-rw-r--r--sc/qa/unit/helper/qahelper.hxx223
1 files changed, 223 insertions, 0 deletions
diff --git a/sc/qa/unit/helper/qahelper.hxx b/sc/qa/unit/helper/qahelper.hxx
new file mode 100644
index 000000000..1a7212874
--- /dev/null
+++ b/sc/qa/unit/helper/qahelper.hxx
@@ -0,0 +1,223 @@
+/* -*- 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_SC_QA_UNIT_HELPER_QAHELPER_HXX
+#define INCLUDED_SC_QA_UNIT_HELPER_QAHELPER_HXX
+
+#include <docsh.hxx>
+#include <address.hxx>
+
+#include <cppunit/SourceLine.h>
+
+#include <test/bootstrapfixture.hxx>
+#include <comphelper/documentconstants.hxx>
+
+#include <comphelper/fileformat.h>
+#include <formula/grammar.hxx>
+#include "scqahelperdllapi.h"
+
+#include <string>
+#include <sstream>
+
+#include <sal/types.h>
+
+#include <memory>
+
+namespace utl { class TempFile; }
+
+#define ODS_FORMAT_TYPE (SfxFilterFlags::IMPORT | SfxFilterFlags::EXPORT | SfxFilterFlags::TEMPLATE | SfxFilterFlags::OWN | SfxFilterFlags::DEFAULT | SfxFilterFlags::ENCRYPTION | SfxFilterFlags::PASSWORDTOMODIFY)
+#define XLS_FORMAT_TYPE (SfxFilterFlags::IMPORT | SfxFilterFlags::EXPORT | SfxFilterFlags::ALIEN | SfxFilterFlags::ENCRYPTION | SfxFilterFlags::PASSWORDTOMODIFY | SfxFilterFlags::PREFERED)
+#define XLSX_FORMAT_TYPE (SfxFilterFlags::IMPORT | SfxFilterFlags::EXPORT | SfxFilterFlags::ALIEN | SfxFilterFlags::STARONEFILTER | SfxFilterFlags::PREFERED)
+#define LOTUS123_FORMAT_TYPE (SfxFilterFlags::IMPORT | SfxFilterFlags::ALIEN | SfxFilterFlags::PREFERED)
+#define CSV_FORMAT_TYPE (SfxFilterFlags::IMPORT | SfxFilterFlags::EXPORT | SfxFilterFlags::ALIEN )
+#define HTML_FORMAT_TYPE (SfxFilterFlags::IMPORT | SfxFilterFlags::EXPORT | SfxFilterFlags::ALIEN )
+#define DIF_FORMAT_TYPE (SfxFilterFlags::IMPORT | SfxFilterFlags::EXPORT | SfxFilterFlags::ALIEN )
+#define XLS_XML_FORMAT_TYPE (SfxFilterFlags::IMPORT | SfxFilterFlags::ALIEN | SfxFilterFlags::PREFERED)
+#define XLSB_XML_FORMAT_TYPE (SfxFilterFlags::IMPORT | SfxFilterFlags::ALIEN | SfxFilterFlags::STARONEFILTER | SfxFilterFlags::PREFERED)
+#define FODS_FORMAT_TYPE (SfxFilterFlags::IMPORT | SfxFilterFlags::EXPORT | SfxFilterFlags::OWN | SfxFilterFlags::STARONEFILTER )
+#define GNUMERIC_FORMAT_TYPE (SfxFilterFlags::IMPORT | SfxFilterFlags::ALIEN | SfxFilterFlags::PREFERED )
+#define XLTX_FORMAT_TYPE (SfxFilterFlags::IMPORT | SfxFilterFlags::EXPORT | SfxFilterFlags::TEMPLATE |SfxFilterFlags::ALIEN | SfxFilterFlags::STARONEFILTER | SfxFilterFlags::PREFERED)
+
+#define FORMAT_ODS 0
+#define FORMAT_XLS 1
+#define FORMAT_XLSX 2
+#define FORMAT_XLSM 3
+#define FORMAT_CSV 4
+#define FORMAT_HTML 5
+#define FORMAT_LOTUS123 6
+#define FORMAT_DIF 7
+#define FORMAT_XLS_XML 8
+#define FORMAT_XLSB 9
+#define FORMAT_FODS 10
+#define FORMAT_GNUMERIC 11
+#define FORMAT_XLTX 12
+
+enum class StringType { PureString, StringValue };
+
+SCQAHELPER_DLLPUBLIC bool testEqualsWithTolerance( long nVal1, long nVal2, long nTol );
+
+#define CHECK_OPTIMAL 0x1
+
+class SdrOle2Obj;
+class ScRangeList;
+class ScTokenArray;
+
+// data format for row height tests
+struct TestParam
+{
+ struct RowData
+ {
+ SCROW nStartRow;
+ SCROW nEndRow;
+ SCTAB nTab;
+ int nExpectedHeight; // -1 for default height
+ int nCheck; // currently only CHECK_OPTIMAL ( we could add CHECK_MANUAL etc.)
+ bool bOptimal;
+ };
+ const char* sTestDoc;
+ int nImportType;
+ int nExportType; // -1 for import test, otherwise this is an export test
+ int nRowData;
+ RowData const * pData;
+};
+
+struct FileFormat {
+ const char* pName; const char* pFilterName; const char* pTypeName; SfxFilterFlags nFormatType;
+};
+
+// Printers for the calc data structures. Needed for the EQUAL assertion
+// macros from CPPUNIT.
+
+SCQAHELPER_DLLPUBLIC std::ostream& operator<<(std::ostream& rStrm, const ScAddress& rAddr);
+
+SCQAHELPER_DLLPUBLIC std::ostream& operator<<(std::ostream& rStrm, const ScRange& rRange);
+
+SCQAHELPER_DLLPUBLIC std::ostream& operator<<(std::ostream& rStrm, const ScRangeList& rList);
+
+SCQAHELPER_DLLPUBLIC std::ostream& operator<<(std::ostream& rStrm, const Color& rColor);
+
+SCQAHELPER_DLLPUBLIC std::ostream& operator<<(std::ostream& rStrm, const OpCode& rCode);
+
+// Why is this here and not in osl, and using the already existing file
+// handling APIs? Do we really want to add arbitrary new file handling
+// wrappers here and there (and then having to handle the Android (and
+// eventually perhaps iOS) special cases here, too)? Please move this to osl,
+// it sure looks generally useful. Or am I missing something?
+
+void loadFile(const OUString& aFileName, std::string& aContent);
+
+SCQAHELPER_DLLPUBLIC void testFile(const OUString& aFileName, ScDocument& rDoc, SCTAB nTab, StringType aStringFormat = StringType::StringValue);
+
+//need own handler because conditional formatting strings must be generated
+SCQAHELPER_DLLPUBLIC void testCondFile(const OUString& aFileName, ScDocument* pDoc, SCTAB nTab);
+
+SCQAHELPER_DLLPUBLIC const SdrOle2Obj* getSingleOleObject(ScDocument& rDoc, sal_uInt16 nPage);
+
+SCQAHELPER_DLLPUBLIC const SdrOle2Obj* getSingleChartObject(ScDocument& rDoc, sal_uInt16 nPage);
+
+SCQAHELPER_DLLPUBLIC ScRangeList getChartRanges(ScDocument& rDoc, const SdrOle2Obj& rChartObj);
+
+bool checkFormula(ScDocument& rDoc, const ScAddress& rPos, const char* pExpected);
+
+bool checkFormulaPosition(ScDocument& rDoc, const ScAddress& rPos);
+bool checkFormulaPositions(
+ ScDocument& rDoc, SCTAB nTab, SCCOL nCol, const SCROW* pRows, size_t nRowCount);
+
+std::unique_ptr<ScTokenArray> compileFormula(
+ ScDocument* pDoc, const OUString& rFormula,
+ formula::FormulaGrammar::Grammar eGram = formula::FormulaGrammar::GRAM_NATIVE );
+
+SCQAHELPER_DLLPUBLIC bool checkOutput(
+ const ScDocument* pDoc, const ScRange& aOutRange,
+ const std::vector<std::vector<const char*>>& aCheck, const char* pCaption );
+
+void clearFormulaCellChangedFlag( ScDocument& rDoc, const ScRange& rRange );
+
+/**
+ * Check if the cell at specified position is a formula cell that doesn't
+ * have an error value.
+ */
+SCQAHELPER_DLLPUBLIC bool isFormulaWithoutError(ScDocument& rDoc, const ScAddress& rPos);
+
+/**
+ * Convert formula token array to a formula string.
+ */
+SCQAHELPER_DLLPUBLIC OUString toString(
+ ScDocument& rDoc, const ScAddress& rPos, ScTokenArray& rArray,
+ formula::FormulaGrammar::Grammar eGram);
+
+inline std::string print(const ScAddress& rAddr)
+{
+ std::ostringstream str;
+ str << "Col: " << rAddr.Col();
+ str << " Row: " << rAddr.Row();
+ str << " Tab: " << rAddr.Tab();
+ return str.str();
+}
+
+class SCQAHELPER_DLLPUBLIC ScBootstrapFixture : public test::BootstrapFixture
+{
+ static const FileFormat aFileFormats[];
+protected:
+ OUString m_aBaseString;
+
+ ScDocShellRef load(
+ bool bReadWrite, const OUString& rURL, const OUString& rFilter, const OUString &rUserData,
+ const OUString& rTypeName, SfxFilterFlags nFilterFlags, SotClipboardFormatId nClipboardID,
+ sal_uIntPtr nFilterVersion = SOFFICE_FILEFORMAT_CURRENT, const OUString* pPassword = nullptr );
+
+ ScDocShellRef load(
+ const OUString& rURL, const OUString& rFilter, const OUString &rUserData,
+ const OUString& rTypeName, SfxFilterFlags nFilterFlags, SotClipboardFormatId nClipboardID,
+ sal_uIntPtr nFilterVersion = SOFFICE_FILEFORMAT_CURRENT, const OUString* pPassword = nullptr );
+
+ ScDocShellRef loadDoc(const OUString& rFileName, sal_Int32 nFormat, bool bReadWrite = false );
+
+public:
+ static const FileFormat* getFileFormats() { return aFileFormats; }
+
+ explicit ScBootstrapFixture( const OUString& rsBaseString );
+ virtual ~ScBootstrapFixture() override;
+
+ void createFileURL(const OUString& aFileBase, const OUString& aFileExtension, OUString& rFilePath);
+
+ void createCSVPath(const OUString& aFileBase, OUString& rCSVPath);
+
+ ScDocShellRef saveAndReload(ScDocShell* pShell, const OUString &rFilter,
+ const OUString &rUserData, const OUString& rTypeName, SfxFilterFlags nFormatType);
+
+ ScDocShellRef saveAndReload( ScDocShell* pShell, sal_Int32 nFormat );
+
+ std::shared_ptr<utl::TempFile> saveAs(ScDocShell* pShell, sal_Int32 nFormat);
+ std::shared_ptr<utl::TempFile> exportTo(ScDocShell* pShell, sal_Int32 nFormat);
+
+ void miscRowHeightsTest( TestParam const * aTestValues, unsigned int numElems );
+};
+
+#define ASSERT_DOUBLES_EQUAL( expected, result ) \
+ CPPUNIT_ASSERT_DOUBLES_EQUAL( (expected), (result), 1e-14 )
+
+#define ASSERT_DOUBLES_EQUAL_MESSAGE( message, expected, result ) \
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( (message), (expected), (result), 1e-14 )
+
+SCQAHELPER_DLLPUBLIC void checkFormula(ScDocument& rDoc, const ScAddress& rPos,
+ const char* expected, const char* msg, CppUnit::SourceLine const & sourceLine);
+
+#define ASSERT_FORMULA_EQUAL(doc, pos, expected, msg) \
+ checkFormula(doc, pos, expected, msg, CPPUNIT_SOURCELINE())
+
+SCQAHELPER_DLLPUBLIC void testFormats(ScBootstrapFixture* pTest, ScDocument* pDoc, sal_Int32 nFormat);
+
+SCQAHELPER_DLLPUBLIC ScTokenArray* getTokens(ScDocument& rDoc, const ScAddress& rPos);
+
+SCQAHELPER_DLLPUBLIC std::string to_std_string(const OUString& rStr);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */