From eef53622798e2e2f81f28ee5e1c82de0d48c149c Mon Sep 17 00:00:00 2001 From: Kohei Yoshida Date: Mon, 8 Jul 2013 18:08:30 -0400 Subject: Create a new library to store shared qa code for sc. Change-Id: I38aa1461d05e3dee096e69b7cd95e2ddfccc9594 --- sc/qa/unit/helper/csv_handler.hxx | 9 ++ sc/qa/unit/helper/debughelper.hxx | 13 +- sc/qa/unit/helper/qahelper.cxx | 251 ++++++++++++++++++++++++++++++++++++ sc/qa/unit/helper/qahelper.hxx | 264 +++++--------------------------------- 4 files changed, 301 insertions(+), 236 deletions(-) create mode 100644 sc/qa/unit/helper/qahelper.cxx (limited to 'sc/qa/unit/helper') diff --git a/sc/qa/unit/helper/csv_handler.hxx b/sc/qa/unit/helper/csv_handler.hxx index aa982575173a..0f4b018d9168 100644 --- a/sc/qa/unit/helper/csv_handler.hxx +++ b/sc/qa/unit/helper/csv_handler.hxx @@ -7,6 +7,9 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#ifndef SC_QA_CSV_HANDLER_HXX +#define SC_QA_CSV_HANDLER_HXX + #include #include "docsh.hxx" @@ -17,6 +20,10 @@ #include "cellform.hxx" #include "cellvalue.hxx" +#include "rtl/strbuf.hxx" + +#include + #define DEBUG_CSV_HANDLER 0 namespace { @@ -221,4 +228,6 @@ private: SCTAB mnTab; }; +#endif + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/qa/unit/helper/debughelper.hxx b/sc/qa/unit/helper/debughelper.hxx index b9cf0a41fcaf..11dfc5130457 100644 --- a/sc/qa/unit/helper/debughelper.hxx +++ b/sc/qa/unit/helper/debughelper.hxx @@ -10,11 +10,6 @@ #ifndef SC_DEBUG_HELPER_HXX #define SC_DEBUG_HELPER_HXX -/** - * Print nicely formatted sheet content to stdout. Indispensable when - * debugging the unit test code involving testing of sheet contents. - */ - #include #include @@ -32,13 +27,19 @@ #include +#define CALC_DEBUG_OUTPUT 0 +#define CALC_TEST_PERF 0 + using namespace ::com::sun::star; using ::std::cout; using ::std::cerr; using ::std::endl; using ::std::vector; - +/** + * Print nicely formatted sheet content to stdout. Indispensable when + * debugging the unit test code involving testing of sheet contents. + */ class SheetPrinter { typedef ::mdds::mixed_type_matrix MatrixType; diff --git a/sc/qa/unit/helper/qahelper.cxx b/sc/qa/unit/helper/qahelper.cxx new file mode 100644 index 000000000000..b330f2c5fffb --- /dev/null +++ b/sc/qa/unit/helper/qahelper.cxx @@ -0,0 +1,251 @@ +/* -*- 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 "qahelper.hxx" + +#define __ORCUS_STATIC_LIB +#include + +#include + +bool testEqualsWithTolerance( long nVal1, long nVal2, long nTol ) +{ + return ( labs( nVal1 - nVal2 ) <= nTol ); +} + +void loadFile(const OUString& aFileName, std::string& aContent) +{ + OString aOFileName = OUStringToOString(aFileName, RTL_TEXTENCODING_UTF8); + +#ifdef ANDROID + size_t size; + if (strncmp(aOFileName.getStr(), "/assets/", sizeof("/assets/")-1) == 0) { + const char *contents = (const char *) lo_apkentry(aOFileName.getStr(), &size); + if (contents != 0) { + aContent = std::string(contents, size); + return; + } + } +#endif + + std::ifstream aFile(aOFileName.getStr()); + + OStringBuffer aErrorMsg("Could not open csv file: "); + aErrorMsg.append(aOFileName); + CPPUNIT_ASSERT_MESSAGE(aErrorMsg.getStr(), aFile); + std::ostringstream aOStream; + aOStream << aFile.rdbuf(); + aFile.close(); + aContent = aOStream.str(); +} + +void testFile(OUString& aFileName, ScDocument* pDoc, SCTAB nTab, StringType aStringFormat) +{ + csv_handler aHandler(pDoc, nTab, aStringFormat); + orcus::csv_parser_config aConfig; + aConfig.delimiters.push_back(','); + aConfig.delimiters.push_back(';'); + aConfig.text_qualifier = '"'; + aConfig.trim_cell_value = false; + + + std::string aContent; + loadFile(aFileName, aContent); + orcus::csv_parser parser ( &aContent[0], aContent.size() , aHandler, aConfig); + try + { + parser.parse(); + } + catch (const orcus::csv_parse_error& e) + { + std::cout << "reading csv content file failed: " << e.what() << std::endl; + OStringBuffer aErrorMsg("csv parser error: "); + aErrorMsg.append(e.what()); + CPPUNIT_ASSERT_MESSAGE(aErrorMsg.getStr(), false); + } +} + +void testCondFile(OUString& aFileName, ScDocument* pDoc, SCTAB nTab) +{ + conditional_format_handler aHandler(pDoc, nTab); + orcus::csv_parser_config aConfig; + aConfig.delimiters.push_back(','); + aConfig.delimiters.push_back(';'); + aConfig.text_qualifier = '"'; + std::string aContent; + loadFile(aFileName, aContent); + orcus::csv_parser parser ( &aContent[0], aContent.size() , aHandler, aConfig); + try + { + parser.parse(); + } + catch (const orcus::csv_parse_error& e) + { + std::cout << "reading csv content file failed: " << e.what() << std::endl; + OStringBuffer aErrorMsg("csv parser error: "); + aErrorMsg.append(e.what()); + CPPUNIT_ASSERT_MESSAGE(aErrorMsg.getStr(), false); + } +} + +ScDocShellRef ScBootstrapFixture::load( bool bReadWrite, + const OUString& rURL, const OUString& rFilter, const OUString &rUserData, + const OUString& rTypeName, unsigned int nFilterFlags, unsigned int nClipboardID, + sal_uIntPtr nFilterVersion, const OUString* pPassword ) +{ + SfxFilter* pFilter = new SfxFilter( + rFilter, + OUString(), nFilterFlags, nClipboardID, rTypeName, 0, OUString(), + rUserData, OUString("private:factory/scalc*")); + pFilter->SetVersion(nFilterVersion); + + ScDocShellRef xDocShRef = new ScDocShell; + xDocShRef->GetDocument()->EnableUserInteraction(false); + SfxMedium* pSrcMed = new SfxMedium(rURL, bReadWrite ? STREAM_STD_READWRITE : STREAM_STD_READ ); + pSrcMed->SetFilter(pFilter); + pSrcMed->UseInteractionHandler(false); + if (pPassword) + { + SfxItemSet* pSet = pSrcMed->GetItemSet(); + pSet->Put(SfxStringItem(SID_PASSWORD, *pPassword)); + } + printf("about to load %s\n", OUStringToOString( rURL, RTL_TEXTENCODING_UTF8 ).getStr() ); + if (!xDocShRef->DoLoad(pSrcMed)) + { + xDocShRef->DoClose(); + // load failed. + xDocShRef.Clear(); + } + + return xDocShRef; +} + +ScDocShellRef ScBootstrapFixture::load( + const OUString& rURL, const OUString& rFilter, const OUString &rUserData, + const OUString& rTypeName, unsigned int nFilterFlags, unsigned int nClipboardID, + sal_uIntPtr nFilterVersion, const OUString* pPassword ) +{ + return load( false, rURL, rFilter, rUserData, rTypeName, nFilterFlags, nClipboardID, nFilterVersion, pPassword ); +} + +ScDocShellRef ScBootstrapFixture::loadDoc( + const OUString& rFileName, sal_Int32 nFormat, bool bReadWrite ) +{ + OUString aFileExtension(aFileFormats[nFormat].pName, strlen(aFileFormats[nFormat].pName), RTL_TEXTENCODING_UTF8 ); + OUString aFilterName(aFileFormats[nFormat].pFilterName, strlen(aFileFormats[nFormat].pFilterName), RTL_TEXTENCODING_UTF8) ; + OUString aFileName; + createFileURL( rFileName, aFileExtension, aFileName ); + OUString aFilterType(aFileFormats[nFormat].pTypeName, strlen(aFileFormats[nFormat].pTypeName), RTL_TEXTENCODING_UTF8); + unsigned int nFormatType = aFileFormats[nFormat].nFormatType; + unsigned int nClipboardId = nFormatType ? SFX_FILTER_IMPORT | SFX_FILTER_USESOPTIONS : 0; + + return load(bReadWrite, aFileName, aFilterName, OUString(), aFilterType, nFormatType, nClipboardId, nFormatType); +} + +void ScBootstrapFixture::createFileURL( + const OUString& aFileBase, const OUString& aFileExtension, OUString& rFilePath) +{ + OUString aSep("/"); + OUStringBuffer aBuffer( getSrcRootURL() ); + aBuffer.append(m_aBaseString).append(aSep).append(aFileExtension); + aBuffer.append(aSep).append(aFileBase).append(aFileExtension); + rFilePath = aBuffer.makeStringAndClear(); +} + +void ScBootstrapFixture::createCSVPath(const OUString& aFileBase, OUString& rCSVPath) +{ + OUStringBuffer aBuffer( getSrcRootPath()); + aBuffer.append(m_aBaseString).append(OUString("/contentCSV/")); + aBuffer.append(aFileBase).append(OUString("csv")); + rCSVPath = aBuffer.makeStringAndClear(); +} + +ScDocShellRef ScBootstrapFixture::saveAndReload( + ScDocShell* pShell, const OUString &rFilter, + const OUString &rUserData, const OUString& rTypeName, sal_uLong nFormatType) +{ + + utl::TempFile aTempFile; + aTempFile.EnableKillingFile(); + SfxMedium aStoreMedium( aTempFile.GetURL(), STREAM_STD_WRITE ); + sal_uInt32 nExportFormat = 0; + if (nFormatType == ODS_FORMAT_TYPE) + nExportFormat = SFX_FILTER_EXPORT | SFX_FILTER_USESOPTIONS; + SfxFilter* pExportFilter = new SfxFilter( + rFilter, + OUString(), nFormatType, nExportFormat, rTypeName, 0, OUString(), + rUserData, OUString("private:factory/scalc*") ); + pExportFilter->SetVersion(SOFFICE_FILEFORMAT_CURRENT); + aStoreMedium.SetFilter(pExportFilter); + pShell->DoSaveAs( aStoreMedium ); + pShell->DoClose(); + + //std::cout << "File: " << aTempFile.GetURL() << std::endl; + + sal_uInt32 nFormat = 0; + if (nFormatType == ODS_FORMAT_TYPE) + nFormat = SFX_FILTER_IMPORT | SFX_FILTER_USESOPTIONS; + + return load(aTempFile.GetURL(), rFilter, rUserData, rTypeName, nFormatType, nFormat ); +} + +ScDocShellRef ScBootstrapFixture::saveAndReload( ScDocShell* pShell, sal_Int32 nFormat ) +{ + OUString aFilterName(aFileFormats[nFormat].pFilterName, strlen(aFileFormats[nFormat].pFilterName), RTL_TEXTENCODING_UTF8) ; + OUString aFilterType(aFileFormats[nFormat].pTypeName, strlen(aFileFormats[nFormat].pTypeName), RTL_TEXTENCODING_UTF8); + ScDocShellRef xDocSh = saveAndReload(pShell, aFilterName, OUString(), aFilterType, aFileFormats[nFormat].nFormatType); + + CPPUNIT_ASSERT(xDocSh.Is()); + return xDocSh; +} + +void ScBootstrapFixture::miscRowHeightsTest( TestParam* aTestValues, unsigned int numElems ) +{ + for ( unsigned int index=0; indexGetDocument(); + + for (int i=0; iGetRowHeight(nRow, nTab, false) ); + if ( bCheckOpt ) + { + bool bOpt = !(pDoc->GetRowFlags( nRow, nTab ) & CR_MANUALSIZE); + CPPUNIT_ASSERT_EQUAL(aTestValues[ index ].pData[ i ].bOptimal, bOpt); + } + CPPUNIT_ASSERT_EQUAL(nExpectedHeight, nHeight); + } + } + xShell->DoClose(); + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/qa/unit/helper/qahelper.hxx b/sc/qa/unit/helper/qahelper.hxx index ad25b74d1967..b01a58104ad0 100644 --- a/sc/qa/unit/helper/qahelper.hxx +++ b/sc/qa/unit/helper/qahelper.hxx @@ -10,15 +10,11 @@ #ifndef SC_QA_HELPER_HXX #define SC_QA_HELPER_HXX -#include -#define __ORCUS_STATIC_LIB -#include "helper/csv_handler.hxx" -#include "helper/debughelper.hxx" -#include "orcus/csv_parser.hpp" -#include -#include -#include +#include "scdllapi.h" +#include "debughelper.hxx" +#include "csv_handler.hxx" +#include #include #include @@ -26,6 +22,11 @@ #include #include #include +#include "sfx2/docfile.hxx" +#include "svl/stritem.hxx" + +#include +#include #define ODS_FORMAT_TYPE 50331943 #define XLS_FORMAT_TYPE 318767171 @@ -43,14 +44,7 @@ #define LOTUS123 5 #define DIF 6 -bool testEqualsWithTolerance( long nVal1, long nVal2, long nTol ) -{ - return ( labs( nVal1 - nVal2 ) <= nTol ); -} - -struct FileFormat { - const char* pName; const char* pFilterName; const char* pTypeName; unsigned int nFormatType; -}; +SC_DLLPUBLIC bool testEqualsWithTolerance( long nVal1, long nVal2, long nTol ); #define CHECK_OPTIMAL 0x1 @@ -73,6 +67,10 @@ struct TestParam RowData* pData; }; +struct FileFormat { + const char* pName; const char* pFilterName; const char* pTypeName; unsigned int nFormatType; +}; + FileFormat aFileFormats[] = { { "ods" , "calc8", "", ODS_FORMAT_TYPE }, { "xls" , "MS Excel 97", "calc_MS_EXCEL_97", XLS_FORMAT_TYPE }, @@ -89,35 +87,16 @@ FileFormat aFileFormats[] = { // eventually perhaps iOS) special cases here, too)? Please move this to osl, // it sure looks gemerally useful. Or am I missing something? -void loadFile(const OUString& aFileName, std::string& aContent) -{ - OString aOFileName = OUStringToOString(aFileName, RTL_TEXTENCODING_UTF8); - -#ifdef ANDROID - size_t size; - if (strncmp(aOFileName.getStr(), "/assets/", sizeof("/assets/")-1) == 0) { - const char *contents = (const char *) lo_apkentry(aOFileName.getStr(), &size); - if (contents != 0) { - aContent = std::string(contents, size); - return; - } - } -#endif +SC_DLLPUBLIC void loadFile(const OUString& aFileName, std::string& aContent); - std::ifstream aFile(aOFileName.getStr()); +SC_DLLPUBLIC void testFile(OUString& aFileName, ScDocument* pDoc, SCTAB nTab, StringType aStringFormat = StringValue); - OStringBuffer aErrorMsg("Could not open csv file: "); - aErrorMsg.append(aOFileName); - CPPUNIT_ASSERT_MESSAGE(aErrorMsg.getStr(), aFile); - std::ostringstream aOStream; - aOStream << aFile.rdbuf(); - aFile.close(); - aContent = aOStream.str(); -} +//need own handler because conditional formatting strings must be generated +SC_DLLPUBLIC void testCondFile(OUString& aFileName, ScDocument* pDoc, SCTAB nTab); std::string print(const ScAddress& rAddr) { - std::stringstream str; + std::ostringstream str; str << "Col: " << rAddr.Col(); str << " Row: " << rAddr.Row(); str << " Tab: " << rAddr.Tab(); @@ -145,213 +124,38 @@ struct assertion_traits } -class ScBootstrapFixture : public test::BootstrapFixture +class SC_DLLPUBLIC ScBootstrapFixture : public test::BootstrapFixture { protected: OUString m_aBaseString; - ScDocShellRef load( bool bReadWrite, - const OUString& rURL, const OUString& rFilter, const OUString &rUserData, - const OUString& rTypeName, unsigned int nFilterFlags, unsigned int nClipboardID, sal_uIntPtr nFilterVersion = SOFFICE_FILEFORMAT_CURRENT, const OUString* pPassword = NULL ) - { - SfxFilter* pFilter = new SfxFilter( - rFilter, - OUString(), nFilterFlags, nClipboardID, rTypeName, 0, OUString(), - rUserData, OUString("private:factory/scalc*")); - pFilter->SetVersion(nFilterVersion); - - ScDocShellRef xDocShRef = new ScDocShell; - xDocShRef->GetDocument()->EnableUserInteraction(false); - SfxMedium* pSrcMed = new SfxMedium(rURL, bReadWrite ? STREAM_STD_READWRITE : STREAM_STD_READ ); - pSrcMed->SetFilter(pFilter); - pSrcMed->UseInteractionHandler(false); - if (pPassword) - { - SfxItemSet* pSet = pSrcMed->GetItemSet(); - pSet->Put(SfxStringItem(SID_PASSWORD, *pPassword)); - } - printf("about to load %s\n", OUStringToOString( rURL, RTL_TEXTENCODING_UTF8 ).getStr() ); - if (!xDocShRef->DoLoad(pSrcMed)) - { - xDocShRef->DoClose(); - // load failed. - xDocShRef.Clear(); - } - - return xDocShRef; - } ScDocShellRef load( - const OUString& rURL, const OUString& rFilter, const OUString &rUserData, - const OUString& rTypeName, unsigned int nFilterFlags, unsigned int nClipboardID, sal_uIntPtr nFilterVersion = SOFFICE_FILEFORMAT_CURRENT, const OUString* pPassword = NULL ) - { - return load( false, rURL, rFilter, rUserData, rTypeName, nFilterFlags, nClipboardID, nFilterVersion, pPassword ); - } + bool bReadWrite, const OUString& rURL, const OUString& rFilter, const OUString &rUserData, + const OUString& rTypeName, unsigned int nFilterFlags, unsigned int nClipboardID, + sal_uIntPtr nFilterVersion = SOFFICE_FILEFORMAT_CURRENT, const OUString* pPassword = NULL ); - ScDocShellRef loadDoc(const OUString& rFileName, sal_Int32 nFormat, bool bReadWrite = false ) - { - OUString aFileExtension(aFileFormats[nFormat].pName, strlen(aFileFormats[nFormat].pName), RTL_TEXTENCODING_UTF8 ); - OUString aFilterName(aFileFormats[nFormat].pFilterName, strlen(aFileFormats[nFormat].pFilterName), RTL_TEXTENCODING_UTF8) ; - OUString aFileName; - createFileURL( rFileName, aFileExtension, aFileName ); - OUString aFilterType(aFileFormats[nFormat].pTypeName, strlen(aFileFormats[nFormat].pTypeName), RTL_TEXTENCODING_UTF8); - unsigned int nFormatType = aFileFormats[nFormat].nFormatType; - unsigned int nClipboardId = nFormatType ? SFX_FILTER_IMPORT | SFX_FILTER_USESOPTIONS : 0; - - return load(bReadWrite, aFileName, aFilterName, OUString(), aFilterType, nFormatType, nClipboardId, nFormatType); - } + ScDocShellRef load( + const OUString& rURL, const OUString& rFilter, const OUString &rUserData, + const OUString& rTypeName, unsigned int nFilterFlags, unsigned int nClipboardID, + sal_uIntPtr nFilterVersion = SOFFICE_FILEFORMAT_CURRENT, const OUString* pPassword = NULL ); + ScDocShellRef loadDoc(const OUString& rFileName, sal_Int32 nFormat, bool bReadWrite = false ); public: ScBootstrapFixture( const OUString& rsBaseString ) : m_aBaseString( rsBaseString ) {} - void createFileURL(const OUString& aFileBase, const OUString& aFileExtension, OUString& rFilePath) - { - OUString aSep("/"); - OUStringBuffer aBuffer( getSrcRootURL() ); - aBuffer.append(m_aBaseString).append(aSep).append(aFileExtension); - aBuffer.append(aSep).append(aFileBase).append(aFileExtension); - rFilePath = aBuffer.makeStringAndClear(); - } - void createCSVPath(const OUString& aFileBase, OUString& rCSVPath) - { - OUStringBuffer aBuffer( getSrcRootPath()); - aBuffer.append(m_aBaseString).append(OUString("/contentCSV/")); - aBuffer.append(aFileBase).append(OUString("csv")); - rCSVPath = aBuffer.makeStringAndClear(); - } + void createFileURL(const OUString& aFileBase, const OUString& aFileExtension, OUString& rFilePath); - ScDocShellRef saveAndReload(ScDocShell* pShell, const OUString &rFilter, - const OUString &rUserData, const OUString& rTypeName, sal_uLong nFormatType) - { + void createCSVPath(const OUString& aFileBase, OUString& rCSVPath); - utl::TempFile aTempFile; - aTempFile.EnableKillingFile(); - SfxMedium aStoreMedium( aTempFile.GetURL(), STREAM_STD_WRITE ); - sal_uInt32 nExportFormat = 0; - if (nFormatType == ODS_FORMAT_TYPE) - nExportFormat = SFX_FILTER_EXPORT | SFX_FILTER_USESOPTIONS; - SfxFilter* pExportFilter = new SfxFilter( - rFilter, - OUString(), nFormatType, nExportFormat, rTypeName, 0, OUString(), - rUserData, OUString("private:factory/scalc*") ); - pExportFilter->SetVersion(SOFFICE_FILEFORMAT_CURRENT); - aStoreMedium.SetFilter(pExportFilter); - pShell->DoSaveAs( aStoreMedium ); - pShell->DoClose(); - - //std::cout << "File: " << aTempFile.GetURL() << std::endl; - - sal_uInt32 nFormat = 0; - if (nFormatType == ODS_FORMAT_TYPE) - nFormat = SFX_FILTER_IMPORT | SFX_FILTER_USESOPTIONS; - - return load(aTempFile.GetURL(), rFilter, rUserData, rTypeName, nFormatType, nFormat ); - } - ScDocShellRef saveAndReload( ScDocShell* pShell, sal_Int32 nFormat ) - { - OUString aFilterName(aFileFormats[nFormat].pFilterName, strlen(aFileFormats[nFormat].pFilterName), RTL_TEXTENCODING_UTF8) ; - OUString aFilterType(aFileFormats[nFormat].pTypeName, strlen(aFileFormats[nFormat].pTypeName), RTL_TEXTENCODING_UTF8); - ScDocShellRef xDocSh = saveAndReload(pShell, aFilterName, OUString(), aFilterType, aFileFormats[nFormat].nFormatType); + ScDocShellRef saveAndReload(ScDocShell* pShell, const OUString &rFilter, + const OUString &rUserData, const OUString& rTypeName, sal_uLong nFormatType); - CPPUNIT_ASSERT(xDocSh.Is()); - return xDocSh; - } + ScDocShellRef saveAndReload( ScDocShell* pShell, sal_Int32 nFormat ); - void miscRowHeightsTest( TestParam* aTestValues, unsigned int numElems ) - { - for ( unsigned int index=0; indexGetDocument(); - - for (int i=0; iGetRowHeight(nRow, nTab, false) ); - if ( bCheckOpt ) - { - bool bOpt = !(pDoc->GetRowFlags( nRow, nTab ) & CR_MANUALSIZE); - CPPUNIT_ASSERT_EQUAL(aTestValues[ index ].pData[ i ].bOptimal, bOpt); - } - CPPUNIT_ASSERT_EQUAL(nExpectedHeight, nHeight); - } - } - xShell->DoClose(); - } - } + void miscRowHeightsTest( TestParam* aTestValues, unsigned int numElems ); }; -void testFile(OUString& aFileName, ScDocument* pDoc, SCTAB nTab, StringType aStringFormat = StringValue) -{ - csv_handler aHandler(pDoc, nTab, aStringFormat); - orcus::csv_parser_config aConfig; - aConfig.delimiters.push_back(','); - aConfig.delimiters.push_back(';'); - aConfig.text_qualifier = '"'; - aConfig.trim_cell_value = false; - - - std::string aContent; - loadFile(aFileName, aContent); - orcus::csv_parser parser ( &aContent[0], aContent.size() , aHandler, aConfig); - try - { - parser.parse(); - } - catch (const orcus::csv_parse_error& e) - { - std::cout << "reading csv content file failed: " << e.what() << std::endl; - OStringBuffer aErrorMsg("csv parser error: "); - aErrorMsg.append(e.what()); - CPPUNIT_ASSERT_MESSAGE(aErrorMsg.getStr(), false); - } -} - -//need own handler because conditional formatting strings must be generated -void testCondFile(OUString& aFileName, ScDocument* pDoc, SCTAB nTab) -{ - conditional_format_handler aHandler(pDoc, nTab); - orcus::csv_parser_config aConfig; - aConfig.delimiters.push_back(','); - aConfig.delimiters.push_back(';'); - aConfig.text_qualifier = '"'; - std::string aContent; - loadFile(aFileName, aContent); - orcus::csv_parser parser ( &aContent[0], aContent.size() , aHandler, aConfig); - try - { - parser.parse(); - } - catch (const orcus::csv_parse_error& e) - { - std::cout << "reading csv content file failed: " << e.what() << std::endl; - OStringBuffer aErrorMsg("csv parser error: "); - aErrorMsg.append(e.what()); - CPPUNIT_ASSERT_MESSAGE(aErrorMsg.getStr(), false); - } - -} - #define ASSERT_DOUBLES_EQUAL( expected, result ) \ CPPUNIT_ASSERT_DOUBLES_EQUAL( (expected), (result), 1e-14 ) -- cgit