diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-10-20 20:05:33 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-10-20 21:26:15 +0200 |
commit | cda653d7d9038fdcab72cfcae37d3d20463693d5 (patch) | |
tree | 5ab4af20eb6306a059ff9db71ee3f2cc29e385e4 /sc | |
parent | d72701bba66817fbd0ddcb8dea969aea49f8426a (diff) |
extract helper methods for debuging calc tests
Diffstat (limited to 'sc')
-rw-r--r-- | sc/qa/unit/helper/debughelper.hxx | 170 | ||||
-rw-r--r-- | sc/qa/unit/ucalc.cxx | 124 |
2 files changed, 172 insertions, 122 deletions
diff --git a/sc/qa/unit/helper/debughelper.hxx b/sc/qa/unit/helper/debughelper.hxx new file mode 100644 index 000000000000..ac3e31a6acf5 --- /dev/null +++ b/sc/qa/unit/helper/debughelper.hxx @@ -0,0 +1,170 @@ +/* + * Version: MPL 1.1 / GPLv3+ / LGPLv3+ + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License or as specified alternatively below. You may obtain a copy of + * the License at http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * Major Contributor(s): + * [ Copyright (C) 2011 Markus Mohrhard <markus.mohrhard@googlemail.com> (initial developer) ] + * + * All Rights Reserved. + * + * For minor contributions see the git repository. + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 3 or later (the "GPLv3+"), or + * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), + * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable + * instead of those above. + */ + +/** + * Print nicely formatted sheet content to stdout. Indispensable when + * debugging the unit test code involving testing of sheet contents. + */ + +#include <rtl/strbuf.hxx> +#include <rtl/ustring.hxx> +#include "document.hxx" + +#ifdef WNT +#define NOMINMAX +#include <prewin.h> +#include <postwin.h> +#undef NOMINMAX +#endif + +#define MDDS_HASH_CONTAINER_BOOST 1 +#include <mdds/mixed_type_matrix.hpp> + +#include <iostream> + +using namespace ::com::sun::star; +using ::rtl::OUString; +using ::rtl::OUStringBuffer; +using ::std::cout; +using ::std::cerr; +using ::std::endl; +using ::std::vector; + + + +namespace { + +::std::ostream& operator<< (::std::ostream& os, const rtl::OUString& str) +{ + return os << ::rtl::OUStringToOString(str, RTL_TEXTENCODING_UTF8).getStr(); +} + +} + +class SheetPrinter +{ + typedef ::mdds::mixed_type_matrix<OUString, bool> MatrixType; +public: + SheetPrinter(size_t rows, size_t cols) : + maMatrix(rows, cols, ::mdds::matrix_density_sparse_empty) {} + + void set(size_t row, size_t col, const OUString& aStr) + { + maMatrix.set_string(row, col, new OUString(aStr)); + } + +#if UCALC_DEBUG_OUTPUT + void print(const char* header) const + { + if (header) + cout << header << endl; + + MatrixType::size_pair_type ns = maMatrix.size(); + vector<sal_Int32> aColWidths(ns.second, 0); + + // Calculate column widths first. + for (size_t row = 0; row < ns.first; ++row) + { + for (size_t col = 0; col < ns.second; ++col) + { + const OUString* p = maMatrix.get_string(row, col); + if (aColWidths[col] < p->getLength()) + aColWidths[col] = p->getLength(); + } + } + + // Make the row separator string. + OUStringBuffer aBuf; + aBuf.appendAscii("+"); + for (size_t col = 0; col < ns.second; ++col) + { + aBuf.appendAscii("-"); + for (sal_Int32 i = 0; i < aColWidths[col]; ++i) + aBuf.append(sal_Unicode('-')); + aBuf.appendAscii("-+"); + } + + OUString aSep = aBuf.makeStringAndClear(); + + // Now print to stdout. + cout << aSep << endl; + for (size_t row = 0; row < ns.first; ++row) + { + cout << "| "; + for (size_t col = 0; col < ns.second; ++col) + { + const OUString* p = maMatrix.get_string(row, col); + size_t nPadding = aColWidths[col] - p->getLength(); + aBuf.append(*p); + for (size_t i = 0; i < nPadding; ++i) + aBuf.append(sal_Unicode(' ')); + cout << aBuf.makeStringAndClear() << " | "; + } + cout << endl; + cout << aSep << endl; + } + } +#else + void print(const char*) const {} +#endif + + /** + * Print nested string array which can be copy-n-pasted into the test code + * for content verification. + */ + void printArray() const + { +#if UCALC_DEBUG_OUTPUT + MatrixType::size_pair_type ns = maMatrix.size(); + for (size_t row = 0; row < ns.first; ++row) + { + cout << " { "; + for (size_t col = 0; col < ns.second; ++col) + { + const OUString* p = maMatrix.get_string(row, col); + if (p->getLength()) + cout << "\"" << *p << "\""; + else + cout << "0"; + if (col < ns.second - 1) + cout << ", "; + } + cout << " }"; + if (row < ns.first - 1) + cout << ","; + cout << endl; + } +#endif + } + + void clear() { maMatrix.clear(); } + void resize(size_t rows, size_t cols) { maMatrix.resize(rows, cols); } + +private: + MatrixType maMatrix; +}; + diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index 232a62e3a104..9abe9f7ae48c 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -71,18 +71,10 @@ #include <iostream> #include <vector> -#ifdef WNT -#define NOMINMAX -#include <prewin.h> -#include <postwin.h> -#undef NOMINMAX -#endif - -#define MDDS_HASH_CONTAINER_BOOST 1 -#include <mdds/mixed_type_matrix.hpp> - #define UCALC_DEBUG_OUTPUT 0 +#include "helper/debughelper.hxx" + const int indeterminate = 2; using namespace ::com::sun::star; @@ -95,118 +87,6 @@ using ::std::vector; namespace { -::std::ostream& operator<< (::std::ostream& os, const OUString& str) -{ - return os << ::rtl::OUStringToOString(str, RTL_TEXTENCODING_UTF8).getStr(); -} - -/** - * 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<OUString, bool> MatrixType; -public: - SheetPrinter(size_t rows, size_t cols) : - maMatrix(rows, cols, ::mdds::matrix_density_sparse_empty) {} - - void set(size_t row, size_t col, const OUString& aStr) - { - maMatrix.set_string(row, col, new OUString(aStr)); - } - -#if UCALC_DEBUG_OUTPUT - void print(const char* header) const - { - if (header) - cout << header << endl; - - MatrixType::size_pair_type ns = maMatrix.size(); - vector<sal_Int32> aColWidths(ns.second, 0); - - // Calculate column widths first. - for (size_t row = 0; row < ns.first; ++row) - { - for (size_t col = 0; col < ns.second; ++col) - { - const OUString* p = maMatrix.get_string(row, col); - if (aColWidths[col] < p->getLength()) - aColWidths[col] = p->getLength(); - } - } - - // Make the row separator string. - OUStringBuffer aBuf; - aBuf.appendAscii("+"); - for (size_t col = 0; col < ns.second; ++col) - { - aBuf.appendAscii("-"); - for (sal_Int32 i = 0; i < aColWidths[col]; ++i) - aBuf.append(sal_Unicode('-')); - aBuf.appendAscii("-+"); - } - - OUString aSep = aBuf.makeStringAndClear(); - - // Now print to stdout. - cout << aSep << endl; - for (size_t row = 0; row < ns.first; ++row) - { - cout << "| "; - for (size_t col = 0; col < ns.second; ++col) - { - const OUString* p = maMatrix.get_string(row, col); - size_t nPadding = aColWidths[col] - p->getLength(); - aBuf.append(*p); - for (size_t i = 0; i < nPadding; ++i) - aBuf.append(sal_Unicode(' ')); - cout << aBuf.makeStringAndClear() << " | "; - } - cout << endl; - cout << aSep << endl; - } - } -#else - void print(const char*) const {} -#endif - - /** - * Print nested string array which can be copy-n-pasted into the test code - * for content verification. - */ - void printArray() const - { -#if UCALC_DEBUG_OUTPUT - MatrixType::size_pair_type ns = maMatrix.size(); - for (size_t row = 0; row < ns.first; ++row) - { - cout << " { "; - for (size_t col = 0; col < ns.second; ++col) - { - const OUString* p = maMatrix.get_string(row, col); - if (p->getLength()) - cout << "\"" << *p << "\""; - else - cout << "0"; - if (col < ns.second - 1) - cout << ", "; - } - cout << " }"; - if (row < ns.first - 1) - cout << ","; - cout << endl; - } -#endif - } - - void clear() { maMatrix.clear(); } - void resize(size_t rows, size_t cols) { maMatrix.resize(rows, cols); } - -private: - MatrixType maMatrix; -}; - class Test : public test::BootstrapFixture { public: Test(); |