diff options
Diffstat (limited to 'src/orcus_test_global.cpp')
-rw-r--r-- | src/orcus_test_global.cpp | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/orcus_test_global.cpp b/src/orcus_test_global.cpp new file mode 100644 index 0000000..78de0f2 --- /dev/null +++ b/src/orcus_test_global.cpp @@ -0,0 +1,98 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * 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 "orcus_test_global.hpp" + +#include <orcus/spreadsheet/document.hpp> +#include <orcus/spreadsheet/sheet.hpp> +#include <orcus/stream.hpp> +#include <orcus/parser_global.hpp> + +#include <sstream> +#include <cmath> +#include <iostream> +#include <chrono> + +namespace orcus { namespace test { + +std::string get_content_check(const spreadsheet::document& doc) +{ + std::ostringstream os; + doc.dump_check(os); + return os.str(); +} + +std::string get_content_as_csv(const spreadsheet::document& doc, spreadsheet::sheet_t sheet_index) +{ + const spreadsheet::sheet* sh = doc.get_sheet(sheet_index); + if (!sh) + return std::string(); + + std::ostringstream os; + sh->dump_csv(os); + return os.str(); +} + +void verify_content( + const char* filename, size_t line_no, const spreadsheet::document& doc, std::string_view expected) +{ + std::string actual = get_content_check(doc); + verify_content(filename, line_no, expected, actual); +} + +void verify_value_to_decimals( + const char* filename, size_t line_no, double expected, double actual, int decimals) +{ + double expected_f = expected; + double actual_f = actual; + + for (int i = 0; i < decimals; ++i) + { + expected_f *= 10.0; + actual_f *= 10.0; + } + + long expected_i = std::lround(expected_f); + long actual_i = std::lround(actual_f); + + if (expected_i == actual_i) + return; + + std::ostringstream os; + os << "value is not as expected: (expected: " << expected << "; actual: " << actual << ")"; + throw assert_error(filename, line_no, os.str().data()); +} + +std::string prefix_multiline_string(std::string_view str, std::string_view prefix) +{ + std::ostringstream os; + + const char* p = str.data(); + const char* p_end = p + str.size(); + + const char* p0 = nullptr; + for (; p != p_end; ++p) + { + if (!p0) + p0 = p; + + if (*p == '\n') + { + os << prefix << std::string_view(p0, std::distance(p0, p)) << '\n'; + p0 = nullptr; + } + } + + if (p0) + os << prefix << std::string_view(p0, std::distance(p0, p)); + + return os.str(); +} + +}} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |