summaryrefslogtreecommitdiff
path: root/sc/qa/unit/helper/debughelper.hxx
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2011-10-20 20:05:33 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2011-10-20 21:26:15 +0200
commitcda653d7d9038fdcab72cfcae37d3d20463693d5 (patch)
tree5ab4af20eb6306a059ff9db71ee3f2cc29e385e4 /sc/qa/unit/helper/debughelper.hxx
parentd72701bba66817fbd0ddcb8dea969aea49f8426a (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.hxx170
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;
+};
+