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/qa/unit/helper/debughelper.hxx | |
parent | d72701bba66817fbd0ddcb8dea969aea49f8426a (diff) |
extract helper methods for debuging calc tests
Diffstat (limited to 'sc/qa/unit/helper/debughelper.hxx')
-rw-r--r-- | sc/qa/unit/helper/debughelper.hxx | 170 |
1 files changed, 170 insertions, 0 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; +}; + |