From 26892bf42b075b4b0fec78a053f22a90b79c56dc Mon Sep 17 00:00:00 2001 From: Thomas Fussell Date: Thu, 8 May 2014 15:32:12 -0400 Subject: [PATCH] some changes --- .gitmodules | 3 + build/premake5.lua | 12 +- include/xlnt/cell.h | 58 +- include/xlnt/chart.h | 30 + include/xlnt/date_time.h | 0 include/xlnt/drawing.h | 30 + include/xlnt/exceptions.h | 0 include/xlnt/file_info.h | 148 -- include/xlnt/namedrange.h | 30 + include/xlnt/strings.h | 30 + include/xlnt/theme.h | 0 include/xlnt/variant.h | 356 ---- include/xlnt/workbook.h | 17 +- include/xlnt/worksheet.h | 18 +- source/excel/cell.cpp | 156 ++ source/{shared => excel}/workbook.cpp | 47 +- source/{shared => excel}/worksheet.cpp | 99 +- source/misc/variant.cpp | 85 - .../packaging}/compression_option.h | 0 {include/xlnt => source/packaging}/file.h | 0 .../xlnt => source/packaging}/file_access.h | 0 source/packaging/file_info.cpp | 35 - .../xlnt => source/packaging}/file_mode.h | 0 .../xlnt => source/packaging}/file_share.h | 0 .../packaging}/opc_callback_handler.h | 0 .../xlnt => source/packaging}/opc_streambuf.h | 0 source/packaging/package.cpp | 55 +- {include/xlnt => source/packaging}/package.h | 5 +- .../packaging}/package_properties.h | 0 source/packaging/part.cpp | 25 +- {include/xlnt => source/packaging}/part.h | 6 +- {include/xlnt => source/packaging}/reader.h | 0 .../xlnt => source/packaging}/relationship.h | 7 +- .../xlnt => source/packaging}/target_mode.h | 0 {include/xlnt => source/packaging}/uri.h | 0 .../{file_win.cpp => windows/file.cpp} | 2 +- {include/xlnt => source/packaging}/writer.h | 0 source/reader/reader.cpp | 10 - source/shared/cell.cpp | 21 - source/tests/CellTestSuite.h | 317 ++++ source/tests/ChartTestSuite.h | 163 ++ source/tests/DumpTestSuite.h | 159 ++ .../{integration => }/IntegrationTestSuite.h | 19 +- source/tests/IterTestSuite.h | 100 ++ source/tests/MetaTestSuite.h | 35 + source/tests/NamedRangeTestSuite.h | 216 +++ .../tests/{packaging => }/NullableTestSuite.h | 2 +- source/tests/NumberFormatTestSuite.h | 166 ++ .../tests/{packaging => }/PackageTestSuite.h | 20 +- source/tests/PasswordHashTestSuite.h | 28 + source/tests/PropsTestSuite.h | 117 ++ source/tests/ReadTestSuite.h | 197 +++ source/tests/StringsTestSuite.h | 61 + source/tests/StyleTestSuite.h | 204 +++ source/tests/ThemeTestSuite.h | 23 + source/tests/UnicodeTestSuite.h | 22 + source/tests/{packaging => }/UriTestSuite.h | 2 +- source/tests/WorkbookTestSuite.h | 384 +++++ source/tests/WorksheetTestSuite.h | 336 ++++ source/tests/WriteTestSuite.h | 240 +++ source/tests/packaging/a.zip | Bin 257 -> 0 bytes source/tests/runner-autogen.cpp | 1523 ++++++++++++++++- .../test_data/genuine/NameWithValueBug.xlsx | Bin 0 -> 8021 bytes .../test_data/genuine/empty-no-string.xlsx | Bin 0 -> 7842 bytes .../test_data/genuine/empty-with-styles.xlsx | Bin 0 -> 7511 bytes source/tests/test_data/genuine/empty.xlsx | Bin 0 -> 11005 bytes .../tests/test_data/genuine/empty_libre.xlsx | Bin 0 -> 8107 bytes .../genuine/empty_no_dimensions.xlsx | Bin 0 -> 10300 bytes .../genuine/empty_with_no_properties.xlsx | Bin 0 -> 9476 bytes .../tests/test_data/genuine/merge_range.xlsx | Bin 0 -> 8742 bytes source/tests/test_data/genuine/unicode.xlsx | Bin 0 -> 8189 bytes source/tests/{ => test_data}/packaging/a.txt | 0 source/tests/{ => test_data}/packaging/a.xml | 0 source/tests/test_data/packaging/a.zip | Bin 0 -> 458 bytes .../tests/{ => test_data}/packaging/test.zip | Bin source/tests/test_data/reader/date_1900.xlsx | Bin 0 -> 28027 bytes source/tests/test_data/reader/date_1904.xlsx | Bin 0 -> 28038 bytes .../reader/empty-workbook-styles.xml | 53 + .../tests/test_data/reader/merged-ranges.xml | 2 + .../tests/test_data/reader/null_archive.xlsx | Bin 0 -> 126 bytes source/tests/test_data/reader/null_file.xlsx | 0 .../test_data/reader/shared-strings-rich.xml | 33 + .../reader/sharedStrings-emptystring.xml | 3 + .../tests/test_data/reader/sharedStrings.xml | 2 + source/tests/test_data/reader/sheet2.xml | 2 + .../tests/test_data/reader/simple-styles.xml | 46 + source/tests/test_data/reader/workbook.xml | 2 + .../test_data/reader/workbook_namedrange.xml | 16 + source/tests/test_data/writer/expected/.rels | 2 + .../writer/expected/[Content_Types].xml | 31 + .../tests/test_data/writer/expected/app.xml | 2 + .../tests/test_data/writer/expected/core.xml | 2 + .../test_data/writer/expected/decimal.xml | 23 + .../tests/test_data/writer/expected/font.xml | 10 + .../test_data/writer/expected/long_number.xml | 23 + .../writer/expected/sharedStrings.xml | 2 + .../test_data/writer/expected/sheet1.xml | 23 + .../writer/expected/sheet1_auto_filter.xml | 1 + .../test_data/writer/expected/sheet1_bool.xml | 28 + .../writer/expected/sheet1_formula.xml | 33 + .../expected/sheet1_freeze_panes_both.xml | 26 + .../expected/sheet1_freeze_panes_horiz.xml | 24 + .../expected/sheet1_freeze_panes_vert.xml | 24 + .../writer/expected/sheet1_height.xml | 23 + .../writer/expected/sheet1_hyperlink.xml | 27 + .../writer/expected/sheet1_hyperlink.xml.rels | 6 + .../writer/expected/sheet1_style.xml | 1 + .../writer/expected/short_number.xml | 23 + .../writer/expected/simple-styles.xml | 46 + .../test_data/writer/expected/styles.xml | 2 + .../test_data/writer/expected/theme1.xml | 2 + .../test_data/writer/expected/workbook.xml | 2 + .../writer/expected/workbook.xml.rels | 2 + .../writer/expected/workbook_auto_filter.xml | 19 + source/writer/writer.cpp | 10 - third-party/pugixml | 1 + 116 files changed, 5343 insertions(+), 853 deletions(-) create mode 100644 .gitmodules create mode 100644 include/xlnt/chart.h create mode 100644 include/xlnt/date_time.h create mode 100644 include/xlnt/drawing.h create mode 100644 include/xlnt/exceptions.h delete mode 100644 include/xlnt/file_info.h create mode 100644 include/xlnt/namedrange.h create mode 100644 include/xlnt/strings.h create mode 100644 include/xlnt/theme.h delete mode 100644 include/xlnt/variant.h create mode 100644 source/excel/cell.cpp rename source/{shared => excel}/workbook.cpp (67%) rename source/{shared => excel}/worksheet.cpp (72%) delete mode 100644 source/misc/variant.cpp rename {include/xlnt => source/packaging}/compression_option.h (100%) rename {include/xlnt => source/packaging}/file.h (100%) rename {include/xlnt => source/packaging}/file_access.h (100%) delete mode 100644 source/packaging/file_info.cpp rename {include/xlnt => source/packaging}/file_mode.h (100%) rename {include/xlnt => source/packaging}/file_share.h (100%) rename {include/xlnt => source/packaging}/opc_callback_handler.h (100%) rename {include/xlnt => source/packaging}/opc_streambuf.h (100%) rename {include/xlnt => source/packaging}/package.h (98%) rename {include/xlnt => source/packaging}/package_properties.h (100%) rename {include/xlnt => source/packaging}/part.h (97%) rename {include/xlnt => source/packaging}/reader.h (100%) rename {include/xlnt => source/packaging}/relationship.h (90%) rename {include/xlnt => source/packaging}/target_mode.h (100%) rename {include/xlnt => source/packaging}/uri.h (100%) rename source/packaging/{file_win.cpp => windows/file.cpp} (98%) rename {include/xlnt => source/packaging}/writer.h (100%) delete mode 100644 source/reader/reader.cpp delete mode 100644 source/shared/cell.cpp create mode 100644 source/tests/CellTestSuite.h create mode 100644 source/tests/ChartTestSuite.h create mode 100644 source/tests/DumpTestSuite.h rename source/tests/{integration => }/IntegrationTestSuite.h (70%) create mode 100644 source/tests/IterTestSuite.h create mode 100644 source/tests/MetaTestSuite.h create mode 100644 source/tests/NamedRangeTestSuite.h rename source/tests/{packaging => }/NullableTestSuite.h (97%) create mode 100644 source/tests/NumberFormatTestSuite.h rename source/tests/{packaging => }/PackageTestSuite.h (72%) create mode 100644 source/tests/PasswordHashTestSuite.h create mode 100644 source/tests/PropsTestSuite.h create mode 100644 source/tests/ReadTestSuite.h create mode 100644 source/tests/StringsTestSuite.h create mode 100644 source/tests/StyleTestSuite.h create mode 100644 source/tests/ThemeTestSuite.h create mode 100644 source/tests/UnicodeTestSuite.h rename source/tests/{packaging => }/UriTestSuite.h (98%) create mode 100644 source/tests/WorkbookTestSuite.h create mode 100644 source/tests/WorksheetTestSuite.h create mode 100644 source/tests/WriteTestSuite.h delete mode 100644 source/tests/packaging/a.zip create mode 100644 source/tests/test_data/genuine/NameWithValueBug.xlsx create mode 100644 source/tests/test_data/genuine/empty-no-string.xlsx create mode 100644 source/tests/test_data/genuine/empty-with-styles.xlsx create mode 100644 source/tests/test_data/genuine/empty.xlsx create mode 100644 source/tests/test_data/genuine/empty_libre.xlsx create mode 100644 source/tests/test_data/genuine/empty_no_dimensions.xlsx create mode 100644 source/tests/test_data/genuine/empty_with_no_properties.xlsx create mode 100644 source/tests/test_data/genuine/merge_range.xlsx create mode 100644 source/tests/test_data/genuine/unicode.xlsx rename source/tests/{ => test_data}/packaging/a.txt (100%) rename source/tests/{ => test_data}/packaging/a.xml (100%) create mode 100644 source/tests/test_data/packaging/a.zip rename source/tests/{ => test_data}/packaging/test.zip (100%) create mode 100644 source/tests/test_data/reader/date_1900.xlsx create mode 100644 source/tests/test_data/reader/date_1904.xlsx create mode 100644 source/tests/test_data/reader/empty-workbook-styles.xml create mode 100644 source/tests/test_data/reader/merged-ranges.xml create mode 100644 source/tests/test_data/reader/null_archive.xlsx create mode 100644 source/tests/test_data/reader/null_file.xlsx create mode 100644 source/tests/test_data/reader/shared-strings-rich.xml create mode 100644 source/tests/test_data/reader/sharedStrings-emptystring.xml create mode 100644 source/tests/test_data/reader/sharedStrings.xml create mode 100644 source/tests/test_data/reader/sheet2.xml create mode 100644 source/tests/test_data/reader/simple-styles.xml create mode 100644 source/tests/test_data/reader/workbook.xml create mode 100644 source/tests/test_data/reader/workbook_namedrange.xml create mode 100644 source/tests/test_data/writer/expected/.rels create mode 100644 source/tests/test_data/writer/expected/[Content_Types].xml create mode 100644 source/tests/test_data/writer/expected/app.xml create mode 100644 source/tests/test_data/writer/expected/core.xml create mode 100644 source/tests/test_data/writer/expected/decimal.xml create mode 100644 source/tests/test_data/writer/expected/font.xml create mode 100644 source/tests/test_data/writer/expected/long_number.xml create mode 100644 source/tests/test_data/writer/expected/sharedStrings.xml create mode 100644 source/tests/test_data/writer/expected/sheet1.xml create mode 100644 source/tests/test_data/writer/expected/sheet1_auto_filter.xml create mode 100644 source/tests/test_data/writer/expected/sheet1_bool.xml create mode 100644 source/tests/test_data/writer/expected/sheet1_formula.xml create mode 100644 source/tests/test_data/writer/expected/sheet1_freeze_panes_both.xml create mode 100644 source/tests/test_data/writer/expected/sheet1_freeze_panes_horiz.xml create mode 100644 source/tests/test_data/writer/expected/sheet1_freeze_panes_vert.xml create mode 100644 source/tests/test_data/writer/expected/sheet1_height.xml create mode 100644 source/tests/test_data/writer/expected/sheet1_hyperlink.xml create mode 100644 source/tests/test_data/writer/expected/sheet1_hyperlink.xml.rels create mode 100644 source/tests/test_data/writer/expected/sheet1_style.xml create mode 100644 source/tests/test_data/writer/expected/short_number.xml create mode 100644 source/tests/test_data/writer/expected/simple-styles.xml create mode 100644 source/tests/test_data/writer/expected/styles.xml create mode 100644 source/tests/test_data/writer/expected/theme1.xml create mode 100644 source/tests/test_data/writer/expected/workbook.xml create mode 100644 source/tests/test_data/writer/expected/workbook.xml.rels create mode 100644 source/tests/test_data/writer/expected/workbook_auto_filter.xml delete mode 100644 source/writer/writer.cpp create mode 160000 third-party/pugixml diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..7d783820 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "third-party/pugixml"] + path = third-party/pugixml + url = https://github.com/zeux/pugixml.git diff --git a/build/premake5.lua b/build/premake5.lua index f54c750e..c5045f29 100644 --- a/build/premake5.lua +++ b/build/premake5.lua @@ -23,7 +23,8 @@ project "xlnt.test" "$(opc_prefix)/plib/config/msvc/plib/include", "$(opc_prefix)/third_party/libxml2-2.7.7/include", "$(cxxtest_prefix)", - "../include" + "../include", + "../third-party/pugixml/src" } defines { "WIN32" } files { @@ -39,7 +40,7 @@ project "xlnt.test" "xml", "zlib" } - prebuildcommands { "cxxtestgen --runner=ParenPrinter -o ../../source/tests/runner-autogen.cpp ../../source/tests/packaging/*.h" } + prebuildcommands { "cxxtestgen --runner=ParenPrinter -o ../../source/tests/runner-autogen.cpp ../../source/tests/*.h" } libdirs { "$(opc_prefix)/win32/x64/Debug" } flags { "Unicode", @@ -63,13 +64,16 @@ project "xlnt" "$(opc_prefix)/config", "$(opc_prefix)/plib/config/msvc/plib/include", "$(opc_prefix)/third_party/libxml2-2.7.7/include", - "../include/xlnt" + "../include/xlnt", + "../third-party/pugixml/src", + "../source/" } defines { "WIN32" } files { "../source/**.cpp", "../source/**.h", - "../include/**.h" + "../include/**.h", + "../third-party/pugixml/src/pugixml.cpp" } excludes { "../source/tests/**.cpp", diff --git a/include/xlnt/cell.h b/include/xlnt/cell.h index d51c870f..48eca539 100644 --- a/include/xlnt/cell.h +++ b/include/xlnt/cell.h @@ -21,23 +21,69 @@ THE SOFTWARE. */ #pragma once -#include +#include +#include -#include "variant.h" +struct tm; namespace xlnt { -class cell_impl; +class style; +class worksheet; +struct cell_struct; + +struct coordinate +{ + std::string column; + int row; +}; class cell { public: - cell(); + enum class type + { + null, + numeric, + string, + date, + formula, + boolean, + error + }; - variant &value(); + static coordinate coordinate_from_string(const std::string &address); + static int column_index_from_string(const std::string &column_string); + static std::string get_column_letter(int column_index); + static std::string absolute_coordinate(const std::string &absolute_address); + + cell(const cell ©); + cell(worksheet &ws, const std::string &column, int row); + cell(worksheet &ws, const std::string &column, int row, const std::string &value); + ~cell(); + + cell &operator=(int value); + cell &operator=(double value); + cell &operator=(const std::string &value); + cell &operator=(const char *value); + cell &operator=(const tm &value); + + friend bool operator==(const std::string &comparand, const cell &cell); + friend bool operator==(const char *comparand, const cell &cell); + friend bool operator==(const tm &comparand, const cell &cell); + + std::string to_string() const; + bool is_date() const; + style &get_style(); + type get_data_type(); private: - std::shared_ptr impl_; + cell_struct *root_; }; +inline std::ostream &operator<<(std::ostream &stream, const cell &cell) +{ + return stream << cell.to_string(); +} + } // namespace xlnt diff --git a/include/xlnt/chart.h b/include/xlnt/chart.h new file mode 100644 index 00000000..03371f69 --- /dev/null +++ b/include/xlnt/chart.h @@ -0,0 +1,30 @@ +/* +Copyright (c) 2012-2014 Thomas Fussell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +#pragma once + +namespace xlnt { + +class style +{ +}; + +} // namespace xlnt diff --git a/include/xlnt/date_time.h b/include/xlnt/date_time.h new file mode 100644 index 00000000..e69de29b diff --git a/include/xlnt/drawing.h b/include/xlnt/drawing.h new file mode 100644 index 00000000..03371f69 --- /dev/null +++ b/include/xlnt/drawing.h @@ -0,0 +1,30 @@ +/* +Copyright (c) 2012-2014 Thomas Fussell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +#pragma once + +namespace xlnt { + +class style +{ +}; + +} // namespace xlnt diff --git a/include/xlnt/exceptions.h b/include/xlnt/exceptions.h new file mode 100644 index 00000000..e69de29b diff --git a/include/xlnt/file_info.h b/include/xlnt/file_info.h deleted file mode 100644 index 87362c96..00000000 --- a/include/xlnt/file_info.h +++ /dev/null @@ -1,148 +0,0 @@ -#pragma once - -#include -#include -#include - -namespace xlnt { - -/// -/// Provides attributes for files and directories. -/// -enum class file_attributes -{ - /// - /// The file is a candidate for backup or removal. - /// - Archive, - /// - /// The file is compressed. - /// - Compressed, - /// - /// Reserved for future use. - /// - Device, - /// - /// The file is a directory. - /// - Directory, - /// - /// The file or directory is encrypted. For a file, this means that all data in the file is encrypted. For a directory, this means that encryption is the default for newly created files and directories. - /// - Encrypted, - /// - /// The file is hidden, and thus is not included in an ordinary directory listing. - /// - Hidden, - /// - /// The file or directory includes data integrity support. When this value is applied to a file, all data streams in the file have integrity support. When this value is applied to a directory, all new files and subdirectories within that directory, by default, include integrity support. - /// - IntegrityStream, - /// - /// The file is a standard file that has no special attributes. This attribute is valid only if it is used alone. - /// - Normal, - /// - /// The file or directory is excluded from the data integrity scan. When this value is applied to a directory, by default, all new files and subdirectories within that directory are excluded from data integrity. - /// - NoScrubData, - /// - /// The file will not be indexed by the operating system's content indexing service. - /// - NotContentIndexed, - /// - /// The file is offline. The data of the file is not immediately available. - /// - Offline, - /// - /// The file is read-only. - /// - ReadOnly, - /// - /// The file contains a reparse point, which is a block of user-defined data associated with a file or a directory. - /// - ReparsePoint, - /// - /// The file is a sparse file. Sparse files are typically large files whose data consists of mostly zeros. - /// - SparseFile, - /// - /// The file is a system file. That is, the file is part of the operating system or is used exclusively by the operating system. - /// - System, - /// - /// The file is temporary. A temporary file contains data that is needed while an application is executing but is not needed after the application is finished. File systems try to keep all the data in memory for quicker access rather than flushing the data back to mass storage. A temporary file should be deleted by the application as soon as it is no longer needed. - /// - Temporary -}; - -class file_info -{ -public: - file_info(const std::string &fileName); - - file_attributes get_attributes() const { return attributes_; } - void set_attributes(file_attributes attributes) { attributes_ = attributes; } - - tm get_creation_time() const { return creationTime_; } - void set_creation_time(const tm &creationTime) { creationTime_ = creationTime; } - - tm get_creation_time_utc() const { return time_to_utc(creationTime_); } - void set_creation_time_utc(const tm &creationTime) { creationTime_ = time_from_utc(creationTime); } - - std::string get_directory_name() const { return directoryName_; } - - bool exists() const; - - std::string get_extension() const { return split_extension(fullName_).second; } - - std::string get_full_name() const { return fullName_; } - - bool IsReadOnly() const { return readOnly_; } - void set_ReadOnly(bool readOnly) { readOnly_ = readOnly; } - - tm get_LastAccessTime() const { return creationTime_; } - void set_LastAccessTime(const tm &creationTime) { creationTime_ = creationTime; } - - tm get_LastAccessUtc() const { return time_to_utc(creationTime_); } - void set_LastAccessUtc(const tm &creationTime) { creationTime_ = time_from_utc(creationTime); } - - tm get_LastWriteTime() const { return creationTime_; } - void set_LastWriteTime(const tm &creationTime) { creationTime_ = creationTime; } - - tm get_LastWriteTimeUtc() const { return time_to_utc(creationTime_); } - void set_LastWriteTimeUtc(const tm &creationTime) { creationTime_ = time_from_utc(creationTime); } - - void delete_(); - void encrypt(); - void move_to(); - void open(); - void open_read(); - void open_text(); - void open_write(); - void refresh(); - void replace(const std::string &, const std::string &); - void replace(const std::string &, const std::string &, bool); - void set_access_control(); - std::string to_string(); - -private: - static tm time_to_utc(const tm &time); - static tm time_from_utc(const tm &time); - static std::pair split_extension(const std::string &name); - - file_attributes attributes_; - tm creationTime_; - std::string directoryName_; - bool exists_; - std::string fullName_; - bool readOnly_; - tm lastAccessTime_; - tm lastWriteTime_; - int length_; - - std::string path_; -}; - -} // namespace xlnt diff --git a/include/xlnt/namedrange.h b/include/xlnt/namedrange.h new file mode 100644 index 00000000..03371f69 --- /dev/null +++ b/include/xlnt/namedrange.h @@ -0,0 +1,30 @@ +/* +Copyright (c) 2012-2014 Thomas Fussell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +#pragma once + +namespace xlnt { + +class style +{ +}; + +} // namespace xlnt diff --git a/include/xlnt/strings.h b/include/xlnt/strings.h new file mode 100644 index 00000000..03371f69 --- /dev/null +++ b/include/xlnt/strings.h @@ -0,0 +1,30 @@ +/* +Copyright (c) 2012-2014 Thomas Fussell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +#pragma once + +namespace xlnt { + +class style +{ +}; + +} // namespace xlnt diff --git a/include/xlnt/theme.h b/include/xlnt/theme.h new file mode 100644 index 00000000..e69de29b diff --git a/include/xlnt/variant.h b/include/xlnt/variant.h deleted file mode 100644 index a550e909..00000000 --- a/include/xlnt/variant.h +++ /dev/null @@ -1,356 +0,0 @@ -/* - Copyright (c) 2012-2014 Thomas Fussell - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ - -/** @file variant.h - * @brief A dynamic container holding one of the seven JSON primitives. - * - * Declaration of variant class which represents a dynamic type. It can be assigned any - * one of the following value types as defined in RFC 4627: false, null, true, - * object, array, number, string. - * - * @author Thomas A. Fussell (tfussell) - */ -#pragma once - -#include -#include -#include -#include - -namespace xlnt { - -/** - * A dynamic type exception may be raised when an operation is attempted - * on a dynamic type which does not support it. For example, trying to - * index an integer type. - */ -class dynamic_type_exception : public std::runtime_error -{ -public: - dynamic_type_exception() : std::runtime_error("Error: wrong type") - { - } -}; - -/** - * Must be forward declared so that object and array can store pointers to this - * heretofore incomplete type. - */ -class variant; - -/** - * A variant class can be dynamically assigned to one of the following: null, true, - * false, number, string. - * - * Note: This class uses a long double to store its dynamic number values. This - * is consistent with JavaScript's number type, but it may limit the precision - * on very large or very small numbers and introduce rounding errors. - */ -class variant -{ -private: - /** - * An enumeration of possible dynamic types that the containing class may assume. - */ - enum Type - { - T_Null, /**< null */ - T_True, /**< true */ - T_False, /**< false */ - T_Number, /**< number */ - T_String, /**< string */ - }; - -public: - #pragma region Constructors - /** - * Constructs a new empty variant of null type. - */ - variant() : type_(T_Null) { } - - /** - * Constructs a new variant class of type T_True or T_False if the given paramter, b, is true or false respectively. - */ - variant(bool b) : type_(b ? T_True : T_False) { } - - /** - * Constructs a new variant class of type T_Number with a dynamic numeric value based on the given parameter, i. - */ - variant(int i) : type_(T_Number), number_(i) { } - - /** - * Constructs a new variant class of type T_Number with a dynamic numeric value based on the given parameter, i. - */ - variant(long long i) : type_(T_Number), number_(static_cast(i)) { } - - /** - * Constructs a new variant class of type T_Number with a dynamic numeric value based on the given parameter, d. - */ - variant(double d) : type_(T_Number), number_(d) { } - - /** - * Constructs a new variant class of type T_Number with a dynamic numeric value based on the given parameter, d. - */ - variant(long double d) : type_(T_Number), number_(d) { } - - /** - * Constructs a new variant class of type T_String with a dynamic string value based on the given parameter, s. - */ - variant(const char *s) : type_(T_String), string_(s) { } - - /** - * Constructs a new variant class of type T_String with a dynamic string value based on the given parameter, s. - */ - variant(const std::string &s) : type_(T_String), string_(s) { } - - /** - * Constructs a new variant as a deep-copy of an existing object. - */ - variant(const variant &v) { *this = v; } - - /** - * If this is a container type, destroys contents and clears the container. - */ - ~variant(); - #pragma endregion - - #pragma region Operators - /** - * Assigns the fields of this object to those of the given parameter, rhs, by creating a deep-copy of containers. - */ - variant &operator=(const variant &rhs); - - /** - * Returns true if the types of this object and the given parameter, rhs, are equal and checks the corresponding - * field for equality. For container types, this recursively checks for element-by-element equality in the same - * way. - */ - bool operator==(const variant &rhs) const; - - /** - * Returns the negation of the result of the equality operator. - */ - bool operator!=(const variant &rhs) const { return !(*this == rhs); } - #pragma endregion - - #pragma region Casts - template T cast() const; - - template <> - bool variant::cast() const - { - if(type_ == T_True) - { - return true; - } - else if(type_ == T_False) - { - return false; - } - - throw dynamic_type_exception(); - } - - template <> - int variant::cast() const - { - if(type_ == T_Number) - { - return static_cast(number_); - } - - throw dynamic_type_exception(); - } - - template <> - double variant::cast() const - { - if(type_ == T_Number) - { - return static_cast(number_); - } - - throw dynamic_type_exception(); - } - - template <> - long long variant::cast() const - { - if(type_ == T_Number) - { - return static_cast(number_); - } - - throw dynamic_type_exception(); - } - - template <> - long double variant::cast() const - { - if(type_ == T_Number) - { - return number_; - } - - throw dynamic_type_exception(); - } - - template <> - std::string variant::cast() const - { - if(type_ == T_String) - { - return string_; - } - - throw dynamic_type_exception(); - } - - /** - * See: bool ToBool() const - */ - operator bool() const { return cast(); } - - /** - * See: int ToInt() const - */ - operator int() const { return cast(); } - - /** - * See: double ToDouble() const - */ - operator double() const { return cast(); } - - /** - * See: long long ToLongLong() const - */ - operator long long() const { return cast(); } - - /** - * See: long double ToLongDouble() const - */ - operator long double() const { return cast(); } - - /** - * See: std::string ToString() const - */ - operator std::string() const { return cast(); } - #pragma endregion - - #pragma region Type checks - - /** - * Returns true if the type of this object is T_Null. - */ - bool isnull() const { return type_ == T_Null; } - - /** - * Returns true if the type of this object is T_True. - */ - bool istrue() const { return type_ == T_True; } - - /** - * Returns true if the type of this object is T_False. - */ - bool isfalse() const { return type_ == T_False; } - - /** - * Returns true if the type of this object is T_True or T_False. - */ - bool isboolean() const { return istrue() || isfalse(); } - - /** - * Returns true if the type of this object is T_Number. - */ - bool isnumber() const { return type_ == T_Number; } - - /** - * Returns true if the type of this object is T_Number and number has no decimal part. - */ - bool isint() const { return isnumber() && !isfloat(); } - - /** - * Returns true if the type of this object is T_Number and number has a decimal part. - */ - bool isfloat() const { return isnumber() && ceil(number_) != number_; } - - /** - * Returns true if the type of this object is T_String. - */ - bool isstring() const { return type_ == T_String; } - - #pragma endregion - -private: - /** - * Constructs a new variant of the given type with an optional parameter indicating whether this - * variant preserves order (only relevant if it is of type T_Object). - */ - variant(Type type) : type_(type) { } - - /** - * Attempts to convert the current value of this object to a bool. - * This will raise an error if the internal type is not T_True or T_False. - */ - bool asbool() const; - - /* - * Attempts to convert the current value of this object to an int. - * This will raise an error if the internal type is not T_Number. - * This conversion may overflow. - */ - int asint() const; - - /* - * Attempts to convert the current value of this object to a double. - * This will raise an error if the internal type is not T_Number. - * This conversion may overflow. - */ - double asdouble() const; - - /* - * Attempts to convert the current value of this object to a long long int. - * This will raise an error if the internal type is not T_Number. - */ - long long aslonglong() const; - - /* - * Attempts to convert the current value of this object to a long double. - * This will raise an error if the internal type is not T_Number. - */ - long double aslongdouble() const; - - /* - * Attempts to convert the current value of this object to a string. - * This will raise an error if the internal type is not T_String. - */ - std::string asstring() const; - - Type type_; /**< Dynamic type of the contained value. */ - - long double number_; /**< Holder for numeric value if this has type T_Number */ - std::string string_; /**< Holder for string value if this has type T_String */ -}; - -extern const variant $; /**< Special variant which represents null JSON literal */ - -} // namespace xlnt diff --git a/include/xlnt/workbook.h b/include/xlnt/workbook.h index ca10aebc..21d14cd8 100644 --- a/include/xlnt/workbook.h +++ b/include/xlnt/workbook.h @@ -23,29 +23,32 @@ THE SOFTWARE. #include #include +#include namespace xlnt { -class workbook_impl; +struct workbook_struct; class worksheet; class workbook { public: workbook(); + workbook(const workbook &) = delete; + const workbook &operator=(const workbook &) = delete; - worksheet &get_sheet_by_name(const std::string &sheet_name); - worksheet &get_active(); - worksheet &create_sheet(); - worksheet &create_sheet(std::size_t index); + worksheet get_sheet_by_name(const std::string &sheet_name); + worksheet get_active(); + worksheet create_sheet(); + worksheet create_sheet(std::size_t index); std::vector get_sheet_names() const; std::vector::iterator begin(); std::vector::iterator end(); - worksheet &operator[](const std::string &name); + worksheet operator[](const std::string &name); void save(const std::string &filename); private: - std::shared_ptr impl_; + workbook_struct *root_; }; } // namespace xlnt diff --git a/include/xlnt/worksheet.h b/include/xlnt/worksheet.h index b384cdc0..b21bc207 100644 --- a/include/xlnt/worksheet.h +++ b/include/xlnt/worksheet.h @@ -21,18 +21,18 @@ THE SOFTWARE. */ #pragma once -#include #include #include #include - -#include "cell.h" -#include "relationship.h" -#include "workbook.h" +#include namespace xlnt { -class worksheet_impl; +class cell; +class relationship; +class workbook; +struct worksheet_struct; + typedef std::vector> range; class worksheet @@ -77,7 +77,7 @@ public: void operator=(const worksheet &other); cell operator[](const std::string &address); std::string to_string() const; - workbook get_parent() const; + workbook &get_parent() const; void garbage_collect(); std::set get_cell_collection(); std::string get_title() const; @@ -92,7 +92,7 @@ public: int get_highest_column() const; std::string calculate_dimension() const; range range(const std::string &range_string, int row_offset, int column_offset); - relationship create_relationship(relationship::type relationship_type); + relationship create_relationship(const std::string &relationship_type); //void add_chart(chart chart); void merge_cells(const std::string &range_string); void merge_cells(int start_row, int start_column, int end_row, int end_column); @@ -106,7 +106,7 @@ public: bool operator==(const worksheet &other); private: - std::shared_ptr impl_; + worksheet_struct *root_; }; } // namespace xlnt diff --git a/source/excel/cell.cpp b/source/excel/cell.cpp new file mode 100644 index 00000000..4632218d --- /dev/null +++ b/source/excel/cell.cpp @@ -0,0 +1,156 @@ +#include + +#include "cell.h" +#include "worksheet.h" + +namespace xlnt { + +struct cell_struct +{ + cell_struct() : type(cell::type::null) + { + + } + + cell_struct(worksheet *ws, const std::string &column, int row) + : type(cell::type::null), parent_worksheet(ws), + column(xlnt::cell::column_index_from_string(column) - 1), row(row) + { + + } + + std::string to_string() const + { + switch(type) + { + case cell::type::numeric: return std::to_string(numeric_value); + case cell::type::boolean: return bool_value ? "true" : "false"; + case cell::type::string: return string_value; + default: throw std::runtime_error("bad enum"); + } + } + + cell::type type; + + union + { + long double numeric_value; + bool bool_value; + }; + + tm date_value; + std::string string_value; + worksheet *parent_worksheet; + int column; + int row; +}; + +cell::cell(const cell ©) +{ + root_ = copy.root_; +} + +coordinate cell::coordinate_from_string(const std::string &address) +{ + if(address == "A1") + { + return {"A", 1}; + } + + return {"A", 1}; +} + +int cell::column_index_from_string(const std::string &column_string) +{ + return column_string[0] - 'A'; +} + +std::string cell::get_column_letter(int column_index) +{ + return std::string(1, (char)('A' + column_index - 1)); +} + +bool cell::is_date() const +{ + return root_->type == type::date; +} + +bool operator==(const char *comparand, const cell &cell) +{ + return std::string(comparand) == cell; +} + +bool operator==(const std::string &comparand, const cell &cell) +{ + return cell.root_->type == cell::type::string && cell.root_->string_value == comparand; +} + +bool operator==(const tm &comparand, const cell &cell) +{ + return cell.root_->type == cell::type::date && cell.root_->date_value.tm_hour == comparand.tm_hour; +} + +std::string cell::absolute_coordinate(const std::string &absolute_address) +{ + return absolute_address; +} + +cell::cell(worksheet &ws, const std::string &column, int row) : root_(new cell_struct(&ws, column, row)) +{ + +} + +cell::cell(worksheet &ws, const std::string &column, int row, const std::string &value) : root_(new cell_struct(&ws, column, row)) +{ + *this = value; +} + +cell::type cell::get_data_type() +{ + return root_->type; +} + +cell &cell::operator=(int value) +{ + root_->type = type::numeric; + root_->numeric_value = value; + return *this; +} + +cell &cell::operator=(double value) +{ + root_->type = type::numeric; + root_->numeric_value = value; + return *this; +} + +cell &cell::operator=(const std::string &value) +{ + root_->type = type::string; + root_->string_value = value; + return *this; +} + +cell &cell::operator=(const char *value) +{ + return *this = std::string(value); +} + +cell &cell::operator=(const tm &value) +{ + root_->type = type::date; + root_->date_value = value; + return *this; +} + +cell::~cell() +{ + delete root_; +} + +std::string cell::to_string() const +{ + return root_->to_string(); +} + +} // namespace xlnt diff --git a/source/shared/workbook.cpp b/source/excel/workbook.cpp similarity index 67% rename from source/shared/workbook.cpp rename to source/excel/workbook.cpp index dea6dbf5..75cde6e9 100644 --- a/source/shared/workbook.cpp +++ b/source/excel/workbook.cpp @@ -3,27 +3,26 @@ #include #include "workbook.h" -#include "package.h" #include "worksheet.h" +#include "packaging/package.h" namespace xlnt { -class workbook_impl +struct workbook_struct { -public: - workbook_impl(workbook *parent) : parent_(parent) + workbook_struct(workbook *parent) : parent_(parent) { worksheets_.emplace_back(*parent, "Sheet1"); active_name_ = "Sheet1"; } - worksheet &get_sheet_by_name(const std::string &name) + worksheet get_sheet_by_name(const std::string &name) { auto match = std::find_if(worksheets_.begin(), worksheets_.end(), [=](const worksheet &w) { return w.get_title() == name; }); return *match; } - worksheet &get_active() + worksheet get_active() { return get_sheet_by_name(active_name_); } @@ -48,14 +47,14 @@ public: return names; } - worksheet &create_sheet() + worksheet create_sheet() { worksheets_.emplace_back(*parent_, "Sheet"); worksheets_.back().set_title("Sheet" + std::to_string(worksheets_.size())); return worksheets_.back(); } - worksheet &create_sheet(std::size_t index) + worksheet create_sheet(std::size_t index) { worksheets_.emplace(worksheets_.begin() + index, *parent_, "Sheet"); worksheets_[index].set_title("Sheet" + std::to_string(worksheets_.size())); @@ -73,60 +72,58 @@ public: workbook *parent_; }; -workbook::workbook() : impl_(nullptr) +workbook::workbook() : root_(new workbook_struct(this)) { - auto new_impl = std::make_shared(this); - impl_.swap(new_impl); } -worksheet &workbook::get_sheet_by_name(const std::string &name) +worksheet workbook::get_sheet_by_name(const std::string &name) { - if(impl_ == nullptr) + if(root_ == nullptr) { throw std::runtime_error("workbook not initialized"); } - return impl_->get_sheet_by_name(name); + return root_->get_sheet_by_name(name); } -worksheet &workbook::get_active() +worksheet workbook::get_active() { - return impl_->get_active(); + return root_->get_active(); } -worksheet &workbook::create_sheet() +worksheet workbook::create_sheet() { - return impl_->create_sheet(); + return root_->create_sheet(); } -worksheet &workbook::create_sheet(std::size_t index) +worksheet workbook::create_sheet(std::size_t index) { - return impl_->create_sheet(index); + return root_->create_sheet(index); } std::vector::iterator workbook::begin() { - return impl_->begin(); + return root_->begin(); } std::vector::iterator workbook::end() { - return impl_->end(); + return root_->end(); } std::vector workbook::get_sheet_names() const { - return impl_->get_sheet_names(); + return root_->get_sheet_names(); } -worksheet &workbook::operator[](const std::string &name) +worksheet workbook::operator[](const std::string &name) { return get_sheet_by_name(name); } void workbook::save(const std::string &filename) { - impl_->save(filename); + root_->save(filename); } } // namespace xlnt diff --git a/source/shared/worksheet.cpp b/source/excel/worksheet.cpp similarity index 72% rename from source/shared/worksheet.cpp rename to source/excel/worksheet.cpp index 771b06fd..d95f58d8 100644 --- a/source/shared/worksheet.cpp +++ b/source/excel/worksheet.cpp @@ -1,4 +1,9 @@ +#include + #include "worksheet.h" +#include "workbook.h" +#include "cell.h" +#include "packaging/relationship.h" namespace xlnt { @@ -50,11 +55,10 @@ std::string get_column_letter(int column_index) } -class worksheet_impl +struct worksheet_struct { -public: - worksheet_impl(workbook &parent_workbook, const std::string &title) - : parent_(parent_workbook), title_(title) + worksheet_struct(workbook &parent_workbook, worksheet &owner, const std::string &title) + : parent_(parent_workbook), title_(title), freeze_panes_(owner, "A", 1), owner_(owner) { } @@ -101,7 +105,14 @@ public: xlnt::cell cell(const std::string &coordinate) { - return cells_[coordinate]; + if(cell_map_.find(coordinate) == cell_map_.end()) + { + auto coord = xlnt::cell::coordinate_from_string(coordinate); + cells_.emplace_back(owner_, coord.column, coord.row); + cell_map_[coordinate] = &cells_.back(); + } + + return *cell_map_[coordinate]; } xlnt::cell cell(int row, int column) @@ -140,7 +151,7 @@ public: throw not_implemented(); } - relationship create_relationship(relationship::type relationship_type) + relationship create_relationship(const std::string &relationship_type) { relationships_.push_back(relationship(relationship_type)); return relationships_.back(); @@ -172,7 +183,7 @@ public: { for(auto cell : cells) { - cells_["a"] = cell; + *cell_map_["a"] = cell; } } @@ -180,7 +191,7 @@ public: { for(auto cell : cells) { - cells_[cell.first] = cell.second; + *cell_map_[cell.first] = cell.second; } } @@ -188,7 +199,7 @@ public: { for(auto cell : cells) { - cells_[get_column_letter(cell.first + 1)] = cell.second; + *cell_map_[get_column_letter(cell.first + 1)] = cell.second; } } @@ -202,161 +213,163 @@ public: throw not_implemented(); } - void operator=(const worksheet_impl &other) = delete; + void operator=(const worksheet_struct &other) = delete; workbook &parent_; std::string title_; xlnt::cell freeze_panes_; - std::unordered_map cells_; + std::vector cells_; + std::unordered_map cell_map_; std::vector relationships_; + worksheet &owner_; }; worksheet::worksheet(workbook &parent_workbook, const std::string &title) - : impl_(std::make_shared(parent_workbook, title)) + : root_(nullptr) { - + root_ = new worksheet_struct(parent_workbook, *this, title); } std::string worksheet::to_string() const { - return "title_ + "\">"; + return "title_ + "\">"; } -workbook worksheet::get_parent() const +workbook &worksheet::get_parent() const { - return impl_->parent_; + return root_->parent_; } void worksheet::garbage_collect() { - impl_->garbage_collect(); + root_->garbage_collect(); } std::set worksheet::get_cell_collection() { - return impl_->get_cell_collection(); + return root_->get_cell_collection(); } std::string worksheet::get_title() const { - return impl_->title_; + return root_->title_; } void worksheet::set_title(const std::string &title) { - impl_->title_ = title; + root_->title_ = title; } cell worksheet::get_freeze_panes() const { - return impl_->freeze_panes_; + return root_->freeze_panes_; } void worksheet::set_freeze_panes(xlnt::cell top_left_cell) { - impl_->set_freeze_panes(top_left_cell); + root_->set_freeze_panes(top_left_cell); } void worksheet::set_freeze_panes(const std::string &top_left_coordinate) { - impl_->set_freeze_panes(top_left_coordinate); + root_->set_freeze_panes(top_left_coordinate); } void worksheet::unfreeze_panes() { - impl_->unfreeze_panes(); + root_->unfreeze_panes(); } xlnt::cell worksheet::cell(const std::string &coordinate) { - return impl_->cell(coordinate); + return root_->cell(coordinate); } xlnt::cell worksheet::cell(int row, int column) { - return impl_->cell(row, column); + return root_->cell(row, column); } int worksheet::get_highest_row() const { - return impl_->get_highest_row(); + return root_->get_highest_row(); } int worksheet::get_highest_column() const { - return impl_->get_highest_column(); + return root_->get_highest_column(); } std::string worksheet::calculate_dimension() const { - return impl_->calculate_dimension(); + return root_->calculate_dimension(); } range worksheet::range(const std::string &range_string, int row_offset, int column_offset) { - return impl_->range(range_string, row_offset, column_offset); + return root_->range(range_string, row_offset, column_offset); } -relationship worksheet::create_relationship(relationship::type relationship_type) +relationship worksheet::create_relationship(const std::string &relationship_type) { - return impl_->create_relationship(relationship_type); + return root_->create_relationship(relationship_type); } //void worksheet::add_chart(chart chart); void worksheet::merge_cells(const std::string &range_string) { - impl_->merge_cells(range_string); + root_->merge_cells(range_string); } void worksheet::merge_cells(int start_row, int start_column, int end_row, int end_column) { - impl_->merge_cells(start_row, start_column, end_row, end_column); + root_->merge_cells(start_row, start_column, end_row, end_column); } void worksheet::unmerge_cells(const std::string &range_string) { - impl_->unmerge_cells(range_string); + root_->unmerge_cells(range_string); } void worksheet::unmerge_cells(int start_row, int start_column, int end_row, int end_column) { - impl_->unmerge_cells(start_row, start_column, end_row, end_column); + root_->unmerge_cells(start_row, start_column, end_row, end_column); } void worksheet::append(const std::vector &cells) { - impl_->append(cells); + root_->append(cells); } void worksheet::append(const std::unordered_map &cells) { - impl_->append(cells); + root_->append(cells); } void worksheet::append(const std::unordered_map &cells) { - impl_->append(cells); + root_->append(cells); } xlnt::range worksheet::rows() const { - return impl_->rows(); + return root_->rows(); } xlnt::range worksheet::columns() const { - return impl_->columns(); + return root_->columns(); } bool worksheet::operator==(const worksheet &other) { - return impl_ == other.impl_; + return root_ == other.root_; } void worksheet::operator=(const worksheet &other) { - impl_ = other.impl_; + root_ = other.root_; } cell worksheet::operator[](const std::string &address) diff --git a/source/misc/variant.cpp b/source/misc/variant.cpp deleted file mode 100644 index 12c57486..00000000 --- a/source/misc/variant.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - Copyright (c) 2012-2014 Thomas Fussell - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ -#include -#include -#include - -#include "variant.h" - -namespace xlnt { - -const variant $ = variant(); - -variant::~variant() -{ -} - -variant &variant::operator=(const variant &rhs) -{ - type_ = rhs.type_; - - switch(type_) - { - case T_Null: - case T_True: - case T_False: - { - break; - } - case T_Number: - { - number_ = rhs.number_; - break; - } - case T_String: - { - string_ = rhs.string_; - break; - } - } - - return *this; -} - -bool variant::operator==(const variant &rhs) const -{ - if(rhs.type_ != type_) - { - return false; - } - - switch(type_) - { - case T_Null: - case T_True: - case T_False: - return true; - case T_Number: - return std::abs(number_ - rhs.number_) < 0.001; - case T_String: - return string_.compare(rhs.string_) == 0; - } - - throw dynamic_type_exception(); -} - -} // namespace xlnt diff --git a/include/xlnt/compression_option.h b/source/packaging/compression_option.h similarity index 100% rename from include/xlnt/compression_option.h rename to source/packaging/compression_option.h diff --git a/include/xlnt/file.h b/source/packaging/file.h similarity index 100% rename from include/xlnt/file.h rename to source/packaging/file.h diff --git a/include/xlnt/file_access.h b/source/packaging/file_access.h similarity index 100% rename from include/xlnt/file_access.h rename to source/packaging/file_access.h diff --git a/source/packaging/file_info.cpp b/source/packaging/file_info.cpp deleted file mode 100644 index 2f28310c..00000000 --- a/source/packaging/file_info.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include - -#include "file_info.h" - -namespace xlnt { - -file_info::file_info(const std::string &path) -{ - fullName_ = path; -} - -void file_info::delete_() -{ - std::wstring wFileName(fullName_.begin(), fullName_.end()); - LPCWSTR lpFileName = wFileName.c_str(); - - BOOL result = DeleteFile(lpFileName); - - if(result == 0) - { - throw std::runtime_error("delete failed: " + fullName_); - } -} - -bool file_info::exists() const -{ - std::wstring wFileName(fullName_.begin(), fullName_.end()); - LPCWSTR lpFileName = wFileName.c_str(); - - DWORD dwAttrib = GetFileAttributes(lpFileName); - - return dwAttrib != INVALID_FILE_ATTRIBUTES; -} - -} // namespace xlnt diff --git a/include/xlnt/file_mode.h b/source/packaging/file_mode.h similarity index 100% rename from include/xlnt/file_mode.h rename to source/packaging/file_mode.h diff --git a/include/xlnt/file_share.h b/source/packaging/file_share.h similarity index 100% rename from include/xlnt/file_share.h rename to source/packaging/file_share.h diff --git a/include/xlnt/opc_callback_handler.h b/source/packaging/opc_callback_handler.h similarity index 100% rename from include/xlnt/opc_callback_handler.h rename to source/packaging/opc_callback_handler.h diff --git a/include/xlnt/opc_streambuf.h b/source/packaging/opc_streambuf.h similarity index 100% rename from include/xlnt/opc_streambuf.h rename to source/packaging/opc_streambuf.h diff --git a/source/packaging/package.cpp b/source/packaging/package.cpp index cb459c7b..5eeff136 100644 --- a/source/packaging/package.cpp +++ b/source/packaging/package.cpp @@ -8,9 +8,8 @@ namespace xlnt { -class package_impl +struct package_struct { -public: package *parent_; opcContainer *opc_container_; std::iostream &stream_; @@ -42,13 +41,13 @@ public: return package_properties_; } - package_impl(package *parent, std::iostream &stream, file_mode package_mode, file_access package_access) + package_struct(package *parent, std::iostream &stream, file_mode package_mode, file_access package_access) : parent_(parent), stream_(stream), container_buffer_(4096), package_mode_(package_mode), package_access_(package_access) { open_container(); } - package_impl(package *parent, const std::string &path, file_mode package_mode, file_access package_access) + package_struct(package *parent, const std::string &path, file_mode package_mode, file_access package_access) : parent_(parent), stream_(file_stream_), container_buffer_(4096), package_mode_(package_mode), package_access_(package_access) { switch(package_mode) @@ -175,7 +174,7 @@ public: open_ = true; } - ~package_impl() + ~package_struct() { close(); } @@ -257,38 +256,38 @@ public: static int read_callback(void *context, char *buffer, int length) { - auto object = static_cast(context); + auto object = static_cast(context); return object->write(buffer, length); } static int write_callback(void *context, const char *buffer, int length) { - auto object = static_cast(context); + auto object = static_cast(context); return object->read(buffer, length); } static int close_callback(void *context) { - auto object = static_cast(context); + auto object = static_cast(context); object->close(); return 0; } static opc_ofs_t seek_callback(void *context, opc_ofs_t ofs) { - auto object = static_cast(context); + auto object = static_cast(context); return static_cast(object->seek(ofs)); } static int trim_callback(void *context, opc_ofs_t new_size) { - auto object = static_cast(context); + auto object = static_cast(context); return object->trim(new_size); } static int flush_callback(void *context) { - auto object = static_cast(context); + auto object = static_cast(context); object->flush(); return 0; } @@ -296,12 +295,12 @@ public: file_access package::get_file_open_access() const { - return impl_->get_file_open_access(); + return root_->get_file_open_access(); } package_properties package::get_package_properties() const { - return impl_->get_package_properties(); + return root_->get_package_properties(); } package package::open(std::iostream &stream, file_mode package_mode, file_access package_access) @@ -315,80 +314,80 @@ package package::open(const std::string &path, file_mode package_mode, file_acce } package::package(std::iostream &stream, file_mode package_mode, file_access package_access) - : impl_(new package_impl(this, stream, package_mode, package_access)) +: root_(new package_struct(this, stream, package_mode, package_access)) { open_container(); } package::package(const std::string &path, file_mode package_mode, file_access package_access) - : impl_(new package_impl(this, path, package_mode, package_access)) +: root_(new package_struct(this, path, package_mode, package_access)) { } void package::open_container() { - impl_->open_container(); + root_->open_container(); } void package::close() { - impl_->close(); + root_->close(); } part package::create_part(const uri &part_uri, const std::string &content_type, compression_option compression) { - return impl_->create_part(part_uri, content_type, compression); + return root_->create_part(part_uri, content_type, compression); } void package::delete_part(const uri &part_uri) { - impl_->delete_part(part_uri); + root_->delete_part(part_uri); } void package::flush() { - impl_->flush(); + root_->flush(); } part package::get_part(const uri &part_uri) { - return impl_->get_part(part_uri); + return root_->get_part(part_uri); } part_collection package::get_parts() { - return impl_->get_parts(); + return root_->get_parts(); } int package::write(char *buffer, int length) { - return impl_->write(buffer, length); + return root_->write(buffer, length); } int package::read(const char *buffer, int length) { - return impl_->read(buffer, length); + return root_->read(buffer, length); } std::ios::pos_type package::seek(std::ios::pos_type offset) { - return impl_->seek(offset); + return root_->seek(offset); } int package::trim(std::ios::pos_type new_size) { - return impl_->trim(new_size); + return root_->trim(new_size); } bool package::operator==(const package &comparand) const { - return impl_.get() == comparand.impl_.get(); + return root_ == comparand.root_; } bool package::operator==(const nullptr_t &) const { - return impl_.get() == nullptr; + return root_ == nullptr; } } // namespace xlnt diff --git a/include/xlnt/package.h b/source/packaging/package.h similarity index 98% rename from include/xlnt/package.h rename to source/packaging/package.h index fc965836..b3310f6b 100644 --- a/include/xlnt/package.h +++ b/source/packaging/package.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -17,7 +18,7 @@ namespace xlnt { -class package_impl; +struct package_struct; /// /// Implements a derived subclass of the abstract Package base classthe ZipPackage class uses a @@ -131,7 +132,7 @@ private: int trim(std::ios::pos_type new_size); - std::shared_ptr impl_; + std::shared_ptr root_; }; } // namespace xlnt diff --git a/include/xlnt/package_properties.h b/source/packaging/package_properties.h similarity index 100% rename from include/xlnt/package_properties.h rename to source/packaging/package_properties.h diff --git a/source/packaging/part.cpp b/source/packaging/part.cpp index 9e175023..046f9b25 100644 --- a/source/packaging/part.cpp +++ b/source/packaging/part.cpp @@ -2,20 +2,19 @@ namespace xlnt { -class part_impl +struct part_struct { -public: /// /// Initializes a new instance of the part class with a specified parent Package, part URI, MIME content type, and compression_option. /// - part_impl(package &package, const uri &uri_part, const std::string &mime_type = "", compression_option compression = compression_option::NotCompressed) + part_struct(package &package, const uri &uri_part, const std::string &mime_type = "", compression_option compression = compression_option::NotCompressed) : package_(package), uri_(uri_part), content_type_(mime_type), compression_option_(compression) {} - part_impl(package &package, const uri &uri, opcContainer *container) + part_struct(package &package, const uri &uri, opcContainer *container) : package_(package), uri_(uri), container_(container) @@ -117,7 +116,7 @@ public: /// bool is_valid_xml_id(const std::string &id); - void operator=(const part_impl &other); + void operator=(const part_struct &other); compression_option compression_option_; std::string content_type_; @@ -126,12 +125,12 @@ public: opcContainer *container_; }; -part::part() : impl_(nullptr) +part::part() : root_(nullptr) { } -part::part(package &package, const uri &uri, opcContainer *container) : impl_(std::make_shared(package, uri, container)) +part::part(package &package, const uri &uri, opcContainer *container) : root_(new part_struct(package, uri, container)) { } @@ -143,32 +142,32 @@ std::string part::get_content_type() const std::string part::read() { - if(impl_.get() == nullptr) + if(root_ == nullptr) { return ""; } - return impl_->read(); + return root_->read(); } void part::write(const std::string &data) { - if(impl_.get() == nullptr) + if(root_ == nullptr) { return; } - return impl_->write(data); + return root_->write(data); } bool part::operator==(const part &comparand) const { - return impl_.get() == comparand.impl_.get(); + return root_ == comparand.root_; } bool part::operator==(const nullptr_t &) const { - return impl_.get() == nullptr; + return root_ == nullptr; } } // namespace xlnt diff --git a/include/xlnt/part.h b/source/packaging/part.h similarity index 97% rename from include/xlnt/part.h rename to source/packaging/part.h index 40bdebe0..01a0a8bf 100644 --- a/include/xlnt/part.h +++ b/source/packaging/part.h @@ -13,7 +13,7 @@ namespace xlnt { -class part_impl; +struct part_struct; /// /// Represents a part that is stored in a ZipPackage. @@ -92,12 +92,12 @@ public: bool operator==(const nullptr_t &) const; private: - friend class package_impl; + friend struct package_struct; part(); part(package &package, const uri &uri, opcContainer *container); - std::shared_ptr impl_; + part_struct *root_; }; typedef std::vector part_collection; diff --git a/include/xlnt/reader.h b/source/packaging/reader.h similarity index 100% rename from include/xlnt/reader.h rename to source/packaging/reader.h diff --git a/include/xlnt/relationship.h b/source/packaging/relationship.h similarity index 90% rename from include/xlnt/relationship.h rename to source/packaging/relationship.h index 599cd6c5..36712396 100644 --- a/include/xlnt/relationship.h +++ b/source/packaging/relationship.h @@ -27,9 +27,12 @@ public: theme }; - relationship(type type) : source_uri_(""), target_uri_(""), type_(type) + relationship(const std::string &type) : source_uri_(""), target_uri_("") { - + if(type == "hyperlink") + { + type_ = type::hyperlink; + } } /// diff --git a/include/xlnt/target_mode.h b/source/packaging/target_mode.h similarity index 100% rename from include/xlnt/target_mode.h rename to source/packaging/target_mode.h diff --git a/include/xlnt/uri.h b/source/packaging/uri.h similarity index 100% rename from include/xlnt/uri.h rename to source/packaging/uri.h diff --git a/source/packaging/file_win.cpp b/source/packaging/windows/file.cpp similarity index 98% rename from source/packaging/file_win.cpp rename to source/packaging/windows/file.cpp index 9a03ab52..4f0a6446 100644 --- a/source/packaging/file_win.cpp +++ b/source/packaging/windows/file.cpp @@ -2,7 +2,7 @@ #include #include -#include "File.h" +#include "../file.h" namespace xlnt { diff --git a/include/xlnt/writer.h b/source/packaging/writer.h similarity index 100% rename from include/xlnt/writer.h rename to source/packaging/writer.h diff --git a/source/reader/reader.cpp b/source/reader/reader.cpp deleted file mode 100644 index a906e928..00000000 --- a/source/reader/reader.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "reader.h" - -namespace xlnt { - -workbook reader::load_workbook(const std::string &/*filename*/) -{ - return workbook(); -} - -} // namespace xlnt diff --git a/source/shared/cell.cpp b/source/shared/cell.cpp deleted file mode 100644 index 1bf0ebba..00000000 --- a/source/shared/cell.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "cell.h" - -namespace xlnt { - -class cell_impl -{ -public: - variant value; -}; - -cell::cell() : impl_(std::make_shared()) -{ - -} - -variant &cell::value() -{ - return impl_->value; -} - -} // namespace xlnt diff --git a/source/tests/CellTestSuite.h b/source/tests/CellTestSuite.h new file mode 100644 index 00000000..53f40144 --- /dev/null +++ b/source/tests/CellTestSuite.h @@ -0,0 +1,317 @@ +#pragma once + +#include +#include +#include + +#include +#include +#include +#include + +class CellTestSuite : public CxxTest::TestSuite +{ +public: + CellTestSuite() + { + + } + + void test_coordinates() + { + auto coord = xlnt::cell::coordinate_from_string("ZF46"); + TS_ASSERT_EQUALS("ZF", coord.column); + TS_ASSERT_EQUALS(46, coord.row); + } + + void test_invalid_coordinate() + { + TS_ASSERT_THROWS_ANYTHING(xlnt::cell::coordinate_from_string("AAA")); + } + + void test_zero_row() + { + TS_ASSERT_THROWS_ANYTHING(xlnt::cell::coordinate_from_string("AQ0")); + } + + void test_absolute() + { + TS_ASSERT_EQUALS("$ZF$51", xlnt::cell::absolute_coordinate("ZF51")); + } + + void test_absolute_multiple() + { + TS_ASSERT_EQUALS("$ZF$51:$ZF$53", xlnt::cell::absolute_coordinate("ZF51:ZF$53")); + } + + void test_column_index() + { + TS_ASSERT_EQUALS(10, xlnt::cell::column_index_from_string("J")); + TS_ASSERT_EQUALS(270, xlnt::cell::column_index_from_string("jJ")); + TS_ASSERT_EQUALS(7030, xlnt::cell::column_index_from_string("jjj")); + } + + + void test_bad_column_index() + { + auto _check = [](const std::string &bad_string) + { + xlnt::cell::column_index_from_string(bad_string); + }; + + auto bad_strings = {"JJJJ", "", "$", "1"}; + for(auto bad_string : bad_strings) + { + TS_ASSERT_THROWS_ANYTHING(_check(bad_string)); + } + } + + void test_column_letter_boundries() + { + TS_ASSERT_THROWS_ANYTHING(xlnt::cell::get_column_letter(0)); + TS_ASSERT_THROWS_ANYTHING(xlnt::cell::get_column_letter(18279)); + } + + + void test_column_letter() + { + TS_ASSERT_EQUALS("ZZZ", xlnt::cell::get_column_letter(18278)); + TS_ASSERT_EQUALS("JJJ", xlnt::cell::get_column_letter(7030)); + TS_ASSERT_EQUALS("AB", xlnt::cell::get_column_letter(28)); + TS_ASSERT_EQUALS("AA", xlnt::cell::get_column_letter(27)); + TS_ASSERT_EQUALS("Z", xlnt::cell::get_column_letter(26)); + } + + + void test_initial_value() + { + xlnt::workbook wb; + xlnt::worksheet ws(wb); + xlnt::cell cell(ws, "A", 1, "17.5"); + + TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + } + + void test_null() + { + xlnt::workbook wb; + xlnt::worksheet ws(wb); + xlnt::cell cell(ws, "A", 1); + + TS_ASSERT_EQUALS(xlnt::cell::type::null, cell.get_data_type()); + } + + void test_numeric() + { + xlnt::workbook wb; + xlnt::worksheet ws(wb); + xlnt::cell cell(ws, "A", 1, "17.5"); + + cell = 42; + TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + cell = "4.2"; + TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + cell = "-42.000"; + TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + cell = "0"; + TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + cell = 0; + TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + cell = 0.0001; + TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + cell = "0.9999"; + TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + cell = "99E-02"; + TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + cell = 1e1; + TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + cell = "4"; + TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + cell = "-1E3"; + TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + cell = 4; + TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + } + + void test_string() + { + xlnt::workbook wb; + xlnt::worksheet ws(wb); + xlnt::cell cell(ws, "A", 1); + cell = "hello"; + TS_ASSERT_EQUALS(xlnt::cell::type::string, cell.get_data_type()); + } + + void test_single_dot() + { + xlnt::workbook wb; + xlnt::worksheet ws(wb); + xlnt::cell cell(ws, "A", 1); + cell = "."; + TS_ASSERT_EQUALS(xlnt::cell::type::string, cell.get_data_type()); + } + + void test_formula() + { + xlnt::workbook wb; + xlnt::worksheet ws(wb); + xlnt::cell cell(ws, "A", 1); + cell = "=42"; + TS_ASSERT_EQUALS(xlnt::cell::type::formula, cell.get_data_type()); + } + + void test_boolean() + { + xlnt::workbook wb; + xlnt::worksheet ws(wb); + xlnt::cell cell(ws, "A", 1); + cell = true; + TS_ASSERT_EQUALS(xlnt::cell::type::boolean, cell.get_data_type()); + cell = false; + TS_ASSERT_EQUALS(xlnt::cell::type::boolean, cell.get_data_type()); + } + + void test_leading_zero() + { + xlnt::workbook wb; + xlnt::worksheet ws(wb); + xlnt::cell cell(ws, "A", 1); + cell = "0800"; + TS_ASSERT_EQUALS(xlnt::cell::type::string, cell.get_data_type()); + } + + void check_error() + { + //TS_ASSERT_EQUALS(xlnt::cell::type::error, cell.get_data_type()); + + //for(error_string in cell.ERROR_CODES.keys()) + //{ + // cell.value = error_string; + // yield check_error; + //} + } + + + void test_data_type_check() + { + //xlnt::workbook wb; + //xlnt::worksheet ws(wb); + //xlnt::cell cell(ws, "A", 1); + + //cell.bind_value(xlnt::cell::$); + //TS_ASSERT_EQUALS(xlnt::cell::type::null, cell.get_data_type()); + + //cell.bind_value(".0e000"); + //TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + + //cell.bind_value("-0.e-0"); + //TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + + //cell.bind_value("1E"); + //TS_ASSERT_EQUALS(xlnt::cell::type::string, cell.get_data_type()); + } + + void test_set_bad_type() + { + //xlnt::workbook wb; + //xlnt::worksheet ws(wb); + //xlnt::cell cell(ws, "A", 1); + + //cell.set_value_explicit(1, "q"); + } + + + void test_time() + { + //auto check_time = [](raw_value, coerced_value) + //{ + // cell.value = raw_value + // TS_ASSERT_EQUALS(cell.value, coerced_value) + // TS_ASSERT_EQUALS(cell.TYPE_NUMERIC, cell.data_type) + //}; + + //xlnt::workbook wb; + //xlnt::worksheet ws(wb); + //xlnt::cell cell(ws, "A", 1); + + //cell = "03:40:16"; + //TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + //tm expected; + //expected.tm_hour = 3; + //expected.tm_min = 40; + //expected.tm_sec = 16; + //TS_ASSERT_EQUALS(cell, expected); + + //cell = "03:40"; + //TS_ASSERT_EQUALS(xlnt::cell::type::numeric, cell.get_data_type()); + //tm expected; + //expected.tm_hour = 3; + //expected.tm_min = 40; + //TS_ASSERT_EQUALS(cell, expected); + } + + void test_date_format_on_non_date() + { + xlnt::workbook wb; + xlnt::worksheet ws(wb); + xlnt::cell cell(ws, "A", 1); + time_t t = time(0); + tm now = *localtime(&t); + cell = now; + cell = "testme"; + TS_ASSERT("testme" == cell); + } + + void test_set_get_date() + { + tm today = {0}; + today.tm_year = 2010; + today.tm_mon = 1; + today.tm_yday = 18; + today.tm_hour = 14; + today.tm_min = 15; + today.tm_sec = 20; + xlnt::workbook wb; + xlnt::worksheet ws(wb); + xlnt::cell cell(ws, "A", 1); + cell = today; + TS_ASSERT(today == cell); + } + + void test_repr() + { + xlnt::workbook wb; + xlnt::worksheet ws(wb); + xlnt::cell cell(ws, "A", 1); + TS_ASSERT_EQUALS(cell.to_string(), ""); + } + + void test_is_date() + { + xlnt::workbook wb; + xlnt::worksheet ws(wb); + xlnt::cell cell(ws, "A", 1); + + time_t t = time(0); + tm now = *localtime(&t); + cell = now; + TS_ASSERT_EQUALS(cell.is_date(), true); + + cell = "testme"; + TS_ASSERT("testme", cell); + TS_ASSERT_EQUALS(cell.is_date(), false); + } + + + void test_is_not_date_color_format() + { + //xlnt::workbook wb; + //xlnt::worksheet ws(wb); + //xlnt::cell cell(ws, "A", 1); + + //cell = -13.5; + //cell.get_style().get_number_format().set_format_code("0.00_);[Red]\(0.00\)"); + + //TS_ASSERT_EQUALS(cell.is_date(), false); + } +}; diff --git a/source/tests/ChartTestSuite.h b/source/tests/ChartTestSuite.h new file mode 100644 index 00000000..f7a134dd --- /dev/null +++ b/source/tests/ChartTestSuite.h @@ -0,0 +1,163 @@ +#pragma once + +#include +#include + +#include +#include + +class ChartTestSuite : public CxxTest::TestSuite +{ +public: + ChartTestSuite() + { + + } + + void setUp() + { + /* + xlnt::workbook wb; + auto ws = wb.get_active(); + ws.set_title("data"); + + for(int i = 0; i < 10; i++) + { + ws.cell(i, 0) = i; + auto chart = BarChart(); + chart.title = "TITLE"; + chart.add_serie(Serie(Reference(ws, (0, 0), (10, 0)))); + chart._series[-1].color = Color.GREEN; + cw = ChartWriter(chart); + root = Element("test"); + } + */ + } + + void test_write_title() + { + /* + cw._write_title(root); + TS_ASSERT_EQUALS(get_xml(root), "TITLE"); + */ + } + + void test_write_xaxis() + { + /* + cw._write_axis(root, chart.x_axis, "c:catAx"); + TS_ASSERT_EQUALS(get_xml(root), ""); + */ + } + + void test_write_yaxis() + { + /* + cw._write_axis(root, chart.y_axis, "c:valAx"); + TS_ASSERT_EQUALS(get_xml(root), ""); + */ + } + + void test_write_series() + { + //cw._write_series(root); + //TS_ASSERT_EQUALS(get_xml(root), "\"data\"!$A$1:$A$11General0123456789None"); + } + + void test_write_legend() + { + /*cw._write_legend(root); + TS_ASSERT_EQUALS(get_xml(root), "");*/ + } + + void test_no_write_legend() + { + /*xlnt::workbook wb; + auto ws = wb.get_active(); + ws.set_title("data"); + for(int i = 0; i < 10; i++) + { + ws.cell(i, 0) = i; + ws.cell(i, 1) = i; + scatterchart = ScatterChart(); + scatterchart.add_serie(Serie(Reference(ws, (0, 0), (10, 0)), ; + xvalues = Reference(ws, (0, 1), (10, 1)))); + cw = ChartWriter(scatterchart); + root = Element("test"); + scatterchart.show_legend = False; + cw._write_legend(root); + TS_ASSERT_EQUALS(get_xml(root), ""); + }*/ + } + + void test_write_print_settings() + { + /*cw._write_print_settings(root); + TS_ASSERT_EQUALS(get_xml(root), "");*/ + } + + void test_write_chart() + { + //cw._write_chart(root); + //// Truncate floats because results differ with Python >= 3.2 and <= 3.1 + //test_xml = sub("([0-9][.][0-9]{4})[0-9]*", "\\1", get_xml(root)); + //TS_ASSERT_EQUALS(test_xml, "TITLE\"data\"!$A$1:$A$11General0123456789None"); + } + + void setUp_scatter() + { + /*wb = Workbook(); + ws = wb.get_active_sheet(); + ws.title = "data"; + for i in range(10) + { + ws.cell(row = i, column = 0).value = i; + ws.cell(row = i, column = 1).value = i; + scatterchart = ScatterChart(); + scatterchart.add_serie(Serie(Reference(ws, (0, 0), (10, 0)), ; + xvalues = Reference(ws, (0, 1), (10, 1)))); + cw = ChartWriter(scatterchart); + root = Element("test"); + }*/ + } + + void test_write_xaxis_scatter() + { + /*scatterchart.x_axis.title = "test x axis title"; + cw._write_axis(root, scatterchart.x_axis, "c:valAx"); + TS_ASSERT_EQUALS(get_xml(root), "test x axis title");*/ + } + + void test_write_yaxis_scatter() + { + /*scatterchart.y_axis.title = "test y axis title"; + cw._write_axis(root, scatterchart.y_axis, "c:valAx"); + TS_ASSERT_EQUALS(get_xml(root), "test y axis title");*/ + } + + void test_write_series_scatter() + { + /*cw._write_series(root); + TS_ASSERT_EQUALS(get_xml(root), "\"data\"!$B$1:$B$11General0123456789None\"data\"!$A$1:$A$11General0123456789None");*/ + } + + void test_write_legend_scatter() + { + /*cw._write_legend(root); + TS_ASSERT_EQUALS(get_xml(root), "");*/ + } + + void test_write_print_settings_scatter() + { + /*cw._write_print_settings(root); + TS_ASSERT_EQUALS(get_xml(root), "");*/ + } + + void test_write_chart_scatter() + { + //cw._write_chart(root); + //// Truncate floats because results differ with Python >= 3.2 and <= 3.1 + //test_xml = sub("([0-9][.][0-9]{4})[0-9]*", "\\1", get_xml(root)); + //TS_ASSERT_EQUALS(test_xml, "; + } +}; diff --git a/source/tests/DumpTestSuite.h b/source/tests/DumpTestSuite.h new file mode 100644 index 00000000..540c6bb7 --- /dev/null +++ b/source/tests/DumpTestSuite.h @@ -0,0 +1,159 @@ +#pragma once + +#include +#include + +#include +#include + +class DumpTestSuite : public CxxTest::TestSuite +{ +public: + DumpTestSuite() + { + + } + + void _get_test_filename() + { + /*test_file = NamedTemporaryFile(mode = "w", prefix = "openpyxl.", suffix = ".xlsx", delete = False); + test_file.close(); + return test_file.name;*/ + } + + //_COL_CONVERSION_CACHE = dict((get_column_letter(i), i) for i in range(1, 18279)); + + void test_dump_sheet_title() + { + /*test_filename = _get_test_filename(); + wb = Workbook(optimized_write = True); + ws = wb.create_sheet(title = "Test1"); + wb.save(test_filename); + wb2 = load_workbook(test_filename, True); + ws = wb2.get_sheet_by_name("Test1"); + TS_ASSERT_EQUALS("Test1", ws.title);*/ + } + + void test_dump_sheet() + { + /*test_filename = _get_test_filename(); + wb = Workbook(optimized_write = True); + ws = wb.create_sheet(); + letters = [get_column_letter(x + 1) for x in range(20)]; + expected_rows = []; + for(auto row : range(20)) + { + expected_rows.append(["%s%d" % (letter, row + 1) for letter in letters]); + for row in range(20) + { + expected_rows.append([(row + 1) for letter in letters]); + for row in range(10) + { + expected_rows.append([datetime(2010, ((x % 12) + 1), row + 1) for x in range(len(letters))]); + for row in range(20) + { + expected_rows.append(["=%s%d" % (letter, row + 1) for letter in letters]); + for row in expected_rows + { + ws.append(row); + } + + wb.save(test_filename); + wb2 = load_workbook(test_filename, True) + } + + ws = wb2.worksheets[0] + } + } + } + + + for ex_row, ws_row in zip(expected_rows[:-20], ws.iter_rows()) + { + for ex_cell, ws_cell in zip(ex_row, ws_row) + { + TS_ASSERT_EQUALS(ex_cell, ws_cell.internal_value) + + os.remove(test_filename) + } + }*/ + } + + void test_table_builder() + { + //sb = StringTableBuilder() + + // result = {"a":0, "b" : 1, "c" : 2, "d" : 3} + + // for letter in sorted(result.keys()) + // { + // for x in range(5) + // { + // sb.add(letter) + + // table = dict(sb.get_table()) + + // try + // { + // result_items = result.items() + // } + + // for key, idx in result_items + // { + // TS_ASSERT_EQUALS(idx, table[key]) + // } + // } + // } + } + + void test_open_too_many_files() + { + //test_filename = _get_test_filename(); + //wb = Workbook(optimized_write = True); + + //for i in range(200) // over 200 worksheets should raise an OSError("too many open files") + //{ + // wb.create_sheet(); + // wb.save(test_filename); + // os.remove(test_filename); + //} + } + + void test_create_temp_file() + { + //f = dump_worksheet.create_temporary_file(); + + //if(!osp.isfile(f)) + //{ + // raise Exception("The file %s does not exist" % f) + //} + } + + void test_dump_twice() + { + //test_filename = _get_test_filename(); + + //wb = Workbook(optimized_write = True); + //ws = wb.create_sheet(); + //ws.append(["hello"]); + + //wb.save(test_filename); + //os.remove(test_filename); + + //wb.save(test_filename); + } + + void test_append_after_save() + { + //test_filename = _get_test_filename(); + + //wb = Workbook(optimized_write = True); + //ws = wb.create_sheet(); + //ws.append(["hello"]); + + //wb.save(test_filename); + //os.remove(test_filename); + + //ws.append(["hello"]); + } +}; diff --git a/source/tests/integration/IntegrationTestSuite.h b/source/tests/IntegrationTestSuite.h similarity index 70% rename from source/tests/integration/IntegrationTestSuite.h rename to source/tests/IntegrationTestSuite.h index 9c52b6f9..51aea1eb 100644 --- a/source/tests/integration/IntegrationTestSuite.h +++ b/source/tests/IntegrationTestSuite.h @@ -3,6 +3,7 @@ #include #include +#include #include #include @@ -16,7 +17,7 @@ public: void test_1() { - auto wb = xlnt::workbook(); + xlnt::workbook wb; auto ws = wb.get_active(); auto ws1 = wb.create_sheet(); auto ws2 = wb.create_sheet(0); @@ -32,16 +33,16 @@ public: std::cout << sheet.get_title() << std::endl; } - auto cell_range = ws["A1:C2"]; + //auto cell_range = ws["A1:C2"]; - auto c = ws["A4"]; - ws["A4"].value() = 4; + /* auto c = ws["A4"]; + ws["A4"] = 4; auto d = ws.cell(4, 2); - c.value() = "hello, world"; - std::cout << (std::string)c.value() << std::endl; - d.value() = 3.14; - std::cout << (double)d.value() << std::endl; + c = "hello, world"; + std::cout << c << std::endl; + d = 3.14; + std::cout << d << std::endl; - wb.save("balances.xlsx"); + wb.save("balances.xlsx");*/ } }; diff --git a/source/tests/IterTestSuite.h b/source/tests/IterTestSuite.h new file mode 100644 index 00000000..15e10d01 --- /dev/null +++ b/source/tests/IterTestSuite.h @@ -0,0 +1,100 @@ +#pragma once + +#include +#include + +#include +#include + +class IterTestSuite : public CxxTest::TestSuite +{ +public: + IterTestSuite() + { + + } + + void test_1() + { + + } + + void test_get_dimensions() + { + //expected = ["A1:G5", "D1:K30", "D2:D2", "A1:C1"]; + + //wb = _open_wb(); + //for i, sheetn in enumerate(wb.get_sheet_names()) + //{ + // ws = wb.get_sheet_by_name(name = sheetn); + // TS_ASSERT_EQUALS(ws._dimensions, expected[i]); + //} + } + + void test_read_fast_integrated() + { + //sheet_name = "Sheet1 - Text" + + // expected = [["This is cell A1 in Sheet 1", None, None, None, None, None, None], + // [None, None, None, None, None, None, None], + // [None, None, None, None, None, None, None], + // [None, None, None, None, None, None, None], + // [None, None, None, None, None, None, "This is cell G5"], ] + + // wb = load_workbook(filename = workbook_name, use_iterators = True) + // ws = wb.get_sheet_by_name(name = sheet_name) + + // for row, expected_row in zip(ws.iter_rows(), expected) : + + // row_values = [x.internal_value for x in row] + + // TS_ASSERT_EQUALS(row_values, expected_row) + } + + void test_get_boundaries_range() + { + //TS_ASSERT_EQUALS(get_range_boundaries("C1:C4"), (3, 1, 3, 4)) + } + + void test_get_boundaries_one() + { + //TS_ASSERT_EQUALS(get_range_boundaries("C1"), (3, 1, 4, 1)) + } + + void test_read_single_cell_range() + { + //wb = load_workbook(filename = workbook_name, use_iterators = True) + // ws = wb.get_sheet_by_name(name = sheet_name) + + // TS_ASSERT_EQUALS("This is cell A1 in Sheet 1", list(ws.iter_rows("A1"))[0][0].internal_value) + } + + void test_read_fast_integrated2() + { + //sheet_name = "Sheet2 - Numbers" + + // expected = [[x + 1] for x in range(30)] + + // query_range = "D1:E30" + + // wb = load_workbook(filename = workbook_name, use_iterators = True) + // ws = wb.get_sheet_by_name(name = sheet_name) + + // for row, expected_row in zip(ws.iter_rows(query_range), expected) : + + // row_values = [x.internal_value for x in row] + + // TS_ASSERT_EQUALS(row_values, expected_row) + } + + void test_read_single_cell_date() + { + //sheet_name = "Sheet4 - Dates" + + // wb = load_workbook(filename = workbook_name, use_iterators = True) + // ws = wb.get_sheet_by_name(name = sheet_name) + + // TS_ASSERT_EQUALS(datetime.datetime(1973, 5, 20), list(ws.iter_rows("A1"))[0][0].internal_value) + // TS_ASSERT_EQUALS(datetime.datetime(1973, 5, 20, 9, 15, 2), list(ws.iter_rows("C1"))[0][0].internal_value) + } +}; diff --git a/source/tests/MetaTestSuite.h b/source/tests/MetaTestSuite.h new file mode 100644 index 00000000..1c232450 --- /dev/null +++ b/source/tests/MetaTestSuite.h @@ -0,0 +1,35 @@ +#pragma once + +#include +#include + +#include +#include + +class MetaTestSuite : public CxxTest::TestSuite +{ +public: + MetaTestSuite() + { + + } + + void test_write_content_types() + { + //wb = Workbook(); + //wb.create_sheet(); + //wb.create_sheet(); + //content = write_content_types(wb); + //reference_file = os.path.join(DATADIR, "writer", "expected", + // "[Content_Types].xml"); + //assert_equals_file_content(reference_file, content); + } + + void test_write_root_rels() + { + //wb = Workbook(); + //content = write_root_rels(wb); + //reference_file = os.path.join(DATADIR, "writer", "expected", ".rels"); + //assert_equals_file_content(reference_file, content); + } +}; diff --git a/source/tests/NamedRangeTestSuite.h b/source/tests/NamedRangeTestSuite.h new file mode 100644 index 00000000..c3c5f444 --- /dev/null +++ b/source/tests/NamedRangeTestSuite.h @@ -0,0 +1,216 @@ +#pragma once + +#include +#include + +#include +#include + +class NamedRangeTestSuite : public CxxTest::TestSuite +{ +public: + NamedRangeTestSuite() + { + + } + + void test_split() + { + /*TS_ASSERT_EQUALS([("My Sheet", "$D$8"), ], split_named_range(""My Sheet"!$D$8"))*/ + } + + void test_split_no_quotes() + { + /*TS_ASSERT_EQUALS([("HYPOTHESES", "$B$3:$L$3"), ], split_named_range("HYPOTHESES!$B$3:$L$3"))*/ + } + + void test_bad_range_name() + { + /*assert_raises(NamedRangeException, split_named_range, "HYPOTHESES$B$3")*/ + } + + void test_range_name_worksheet_special_chars() + { + /*class DummyWs + { + title = "My Sheeet with a , and \"" + + void __str__() + { + return title + } + + ws = DummyWs() + }; + + class DummyWB + { + void get_sheet_by_name(self, name) + { + if name == ws.title : + return ws + } + }; + + handle = open(os.path.join(DATADIR, "reader", "workbook_namedrange.xml")) + try + { + content = handle.read() + named_ranges = read_named_ranges(content, DummyWB()) + TS_ASSERT_EQUALS(1, len(named_ranges)) + ok_(isinstance(named_ranges[0], NamedRange)) + TS_ASSERT_EQUALS([(ws, "$U$16:$U$24"), (ws, "$V$28:$V$36")], named_ranges[0].destinations) + } + finally + { + handle.close() + }*/ + } + + + void test_read_named_ranges() + { + /*class DummyWs + { + title = "My Sheeet" + + void __str__() + { + return title; + } + }; + + class DummyWB + { + void get_sheet_by_name(self, name) + { + return DummyWs() + } + }; + + handle = open(os.path.join(DATADIR, "reader", "workbook.xml")) + try : + content = handle.read() + named_ranges = read_named_ranges(content, DummyWB()) + TS_ASSERT_EQUALS(["My Sheeet!$D$8"], [str(range) for range in named_ranges]) + finally : + handle.close()*/ + } + + void test_oddly_shaped_named_ranges() + { + /* ranges_counts = ((4, "TEST_RANGE"), + (3, "TRAP_1"), + (13, "TRAP_2"))*/ + } + + //void check_ranges(ws, count, range_name) + //{ + // /*TS_ASSERT_EQUALS(count, len(ws.range(range_name))) + + // wb = load_workbook(os.path.join(DATADIR, "genuine", "merge_range.xlsx"), + // use_iterators = False) + + // ws = wb.worksheets[0] + + // for count, range_name in ranges_counts + // { + // yield check_ranges, ws, count, range_name + // }*/ + //} + + + void test_merged_cells_named_range() + { + /*wb = load_workbook(os.path.join(DATADIR, "genuine", "merge_range.xlsx"), + use_iterators = False) + + ws = wb.worksheets[0] + + cell = ws.range("TRAP_3") + + TS_ASSERT_EQUALS("B15", cell.get_coordinate()) + + TS_ASSERT_EQUALS(10, cell.value)*/ + } + + void setUp() + { + /*wb = load_workbook(os.path.join(DATADIR, "genuine", "NameWithValueBug.xlsx")) + ws = wb.get_sheet_by_name("Sheet1") + make_tmpdir()*/ + } + + void tearDown() + { + /* clean_tmpdir()*/ + } + + void test_has_ranges() + { + /*ranges = wb.get_named_ranges() + TS_ASSERT_EQUALS(["MyRef", "MySheetRef", "MySheetRef", "MySheetValue", "MySheetValue", "MyValue"], [range.name for range in ranges])*/ + } + + void test_workbook_has_normal_range() + { + /*normal_range = wb.get_named_range("MyRef") + TS_ASSERT_EQUALS("MyRef", normal_range.name)*/ + } + + void test_workbook_has_value_range() + { + /*value_range = wb.get_named_range("MyValue") + TS_ASSERT_EQUALS("MyValue", value_range.name) + TS_ASSERT_EQUALS("9.99", value_range.value)*/ + } + + void test_worksheet_range() + { + /*range = ws.range("MyRef")*/ + } + + void test_worksheet_range_error_on_value_range() + { + /*assert_raises(NamedRangeException, ws.range, "MyValue")*/ + } + + //void range_as_string(self, range, include_value = False) + //{ + // /*void scope_as_string(range) + // { + // if range.scope + // { + // return range.scope.title + // } + // else + // { + // return "Workbook" + // } + // } + // retval = "%s: %s" % (range.name, scope_as_string(range)) + // if include_value : + // if isinstance(range, NamedRange) : + // retval += "=[range]" + // else : + // retval += "=" + range.value + // return retval*/ + //} + + void test_handles_scope() + { + /*ranges = wb.get_named_ranges() + TS_ASSERT_EQUALS(["MyRef: Workbook", "MySheetRef: Sheet1", "MySheetRef: Sheet2", "MySheetValue: Sheet1", "MySheetValue: Sheet2", "MyValue: Workbook"], + [range_as_string(range) for range in ranges])*/ + } + + void test_can_be_saved() + { + /*FNAME = os.path.join(TMPDIR, "foo.xlsx") + wb.save(FNAME) + + wbcopy = load_workbook(FNAME) + TS_ASSERT_EQUALS(["MyRef: Workbook=[range]", "MySheetRef: Sheet1=[range]", "MySheetRef: Sheet2=[range]", "MySheetValue: Sheet1=3.33", "MySheetValue: Sheet2=14.4", "MyValue: Workbook=9.99"], + [range_as_string(range, include_value = True) for range in wbcopy.get_named_ranges()])*/ + } +}; diff --git a/source/tests/packaging/NullableTestSuite.h b/source/tests/NullableTestSuite.h similarity index 97% rename from source/tests/packaging/NullableTestSuite.h rename to source/tests/NullableTestSuite.h index 6c458b93..c3e9b17e 100644 --- a/source/tests/packaging/NullableTestSuite.h +++ b/source/tests/NullableTestSuite.h @@ -3,7 +3,7 @@ #include #include -#include "../../misc/nullable.h" +#include "../misc/nullable.h" class NullableTestSuite : public CxxTest::TestSuite { diff --git a/source/tests/NumberFormatTestSuite.h b/source/tests/NumberFormatTestSuite.h new file mode 100644 index 00000000..14540d53 --- /dev/null +++ b/source/tests/NumberFormatTestSuite.h @@ -0,0 +1,166 @@ +#pragma once + +#include +#include + +#include +#include + +class NumberFormatTestSuite : public CxxTest::TestSuite +{ +public: + NumberFormatTestSuite() + { + + } + + //void setup_class(cls) + //{ + // //cls.workbook = Workbook() + // // cls.worksheet = Worksheet(cls.workbook, "Test") + // // cls.sd = SharedDate() + //} + + void test_convert_date_to_julian() + { + //TS_ASSERT_EQUALS(40167, sd.to_julian(2009, 12, 20)) + } + + void test_convert_date_from_julian() + { + } + + //void test_date_equal(julian, datetime) + //{ + // //TS_ASSERT_EQUALS(sd.from_julian(julian), datetime); + + // //date_pairs = ( + // // (40167, datetime(2009, 12, 20)), + // // (21980, datetime(1960, 3, 5)), + // // ); + + // //for count, dt in date_pairs + // //{ + // // yield test_date_equal, count, dt; + // //} + //} + + void test_convert_datetime_to_julian() + { + //TS_ASSERT_EQUALS(40167, sd.datetime_to_julian(datetime(2009, 12, 20))) + // TS_ASSERT_EQUALS(40196.5939815, sd.datetime_to_julian(datetime(2010, 1, 18, 14, 15, 20, 1600))) + } + + void test_insert_float() + { + //worksheet.cell("A1").value = 3.14 + // TS_ASSERT_EQUALS(Cell.TYPE_NUMERIC, worksheet.cell("A1")._data_type) + } + + void test_insert_percentage() + { + //worksheet.cell("A1").value = "3.14%" + // TS_ASSERT_EQUALS(Cell.TYPE_NUMERIC, worksheet.cell("A1")._data_type) + // assert_almost_equal(0.0314, worksheet.cell("A1").value) + } + + void test_insert_datetime() + { + //worksheet.cell("A1").value = date.today() + // TS_ASSERT_EQUALS(Cell.TYPE_NUMERIC, worksheet.cell("A1")._data_type) + } + + void test_insert_date() + { + //worksheet.cell("A1").value = datetime.now() + // TS_ASSERT_EQUALS(Cell.TYPE_NUMERIC, worksheet.cell("A1")._data_type) + } + + void test_internal_date() + { + //dt = datetime(2010, 7, 13, 6, 37, 41) + // worksheet.cell("A3").value = dt + // TS_ASSERT_EQUALS(40372.27616898148, worksheet.cell("A3")._value) + } + + void test_datetime_interpretation() + { + //dt = datetime(2010, 7, 13, 6, 37, 41) + // worksheet.cell("A3").value = dt + // TS_ASSERT_EQUALS(dt, worksheet.cell("A3").value) + } + + void test_date_interpretation() + { + //dt = date(2010, 7, 13) + // worksheet.cell("A3").value = dt + // TS_ASSERT_EQUALS(datetime(2010, 7, 13, 0, 0), worksheet.cell("A3").value) + } + + void test_number_format_style() + { + //worksheet.cell("A1").value = "12.6%" + // TS_ASSERT_EQUALS(NumberFormat.FORMAT_PERCENTAGE, \ + // worksheet.cell("A1").style.number_format.format_code) + } + + void test_date_format_on_non_date() + { + //cell = worksheet.cell("A1"); + } + + //void check_date_pair(count, date_string) + //{ + // //cell.value = strptime(date_string, "%Y-%m-%d"); + // //TS_ASSERT_EQUALS(count, cell._value); + + // //date_pairs = ( + // // (15, "1900-01-15"), + // // (59, "1900-02-28"), + // // (61, "1900-03-01"), + // // (367, "1901-01-01"), + // // (2958465, "9999-12-31"), ); + // //for count, date_string in date_pairs + // //{ + // // yield check_date_pair, count, date_string; + // //} + //} + + void test_1900_leap_year() + { + //assert_raises(ValueError, sd.from_julian, 60) + // assert_raises(ValueError, sd.to_julian, 1900, 2, 29) + } + + void test_bad_date() + { + //void check_bad_date(year, month, day) + //{ + // assert_raises(ValueError, sd.to_julian, year, month, day) + //} + + //bad_dates = ((1776, 7, 4), (1899, 12, 31), ) + // for year, month, day in bad_dates + // { + // yield check_bad_date, year, month, day + // } + } + + void test_bad_julian_date() + { + //assert_raises(ValueError, sd.from_julian, -1) + } + + void test_mac_date() + { + //sd.excel_base_date = CALENDAR_MAC_1904 + + // datetuple = (2011, 10, 31) + + // dt = date(datetuple[0], datetuple[1], datetuple[2]) + // julian = sd.to_julian(datetuple[0], datetuple[1], datetuple[2]) + // reverse = sd.from_julian(julian).date() + // TS_ASSERT_EQUALS(dt, reverse) + // sd.excel_base_date = CALENDAR_WINDOWS_1900 + } +}; diff --git a/source/tests/packaging/PackageTestSuite.h b/source/tests/PackageTestSuite.h similarity index 72% rename from source/tests/packaging/PackageTestSuite.h rename to source/tests/PackageTestSuite.h index fc7ec07c..f0b7c5a0 100644 --- a/source/tests/packaging/PackageTestSuite.h +++ b/source/tests/PackageTestSuite.h @@ -2,21 +2,21 @@ #include -#include -#include -#include "../../misc/pugixml.hpp" +#include "../packaging/file.h" +#include "../packaging/package.h" +#include "pugixml.hpp" -class ZipPackageTestSuite : public CxxTest::TestSuite +class PackageTestSuite : public CxxTest::TestSuite { public: - ZipPackageTestSuite() + PackageTestSuite() { - xlnt::file::copy("../../source/tests/packaging/test.zip", "../../source/tests/packaging/a.zip", true); + xlnt::file::copy("../../source/tests/test_data/packaging/test.zip", "../../source/tests/test_data/packaging/a.zip", true); } void test_read_text() { - auto package = xlnt::package::open("../../source/tests/packaging/a.zip", xlnt::file_mode::Open, xlnt::file_access::ReadWrite); + auto package = xlnt::package::open("../../source/tests/test_data/packaging/a.zip", xlnt::file_mode::Open, xlnt::file_access::ReadWrite); TS_ASSERT_DIFFERS(package, nullptr); auto part_1 = package.get_part(xlnt::uri("a.txt", xlnt::uri_kind::Relative)); @@ -29,7 +29,7 @@ public: void test_write_text() { { - auto package = xlnt::package::open("../../source/tests/packaging/a.zip", xlnt::file_mode::Open, xlnt::file_access::ReadWrite); + auto package = xlnt::package::open("../../source/test_data/tests/packaging/a.zip", xlnt::file_mode::Open, xlnt::file_access::ReadWrite); TS_ASSERT_DIFFERS(package, nullptr); auto part_1 = package.get_part(xlnt::uri("a.txt", xlnt::uri_kind::Relative)); @@ -39,7 +39,7 @@ public: } { - auto package = xlnt::package::open("../../source/tests/packaging/a.zip", xlnt::file_mode::Open, xlnt::file_access::ReadWrite); + auto package = xlnt::package::open("../../source/tests/test_data/packaging/a.zip", xlnt::file_mode::Open, xlnt::file_access::ReadWrite); TS_ASSERT_DIFFERS(package, nullptr); auto part_1 = package.get_part(xlnt::uri("a.txt", xlnt::uri_kind::Relative)); @@ -53,7 +53,7 @@ public: void test_read_xml() { - auto package = xlnt::package::open("../../source/tests/packaging/a.zip", xlnt::file_mode::Open, xlnt::file_access::ReadWrite); + auto package = xlnt::package::open("../../source/tests/test_data/packaging/a.zip", xlnt::file_mode::Open, xlnt::file_access::ReadWrite); TS_ASSERT_DIFFERS(package, nullptr); auto part_2 = package.get_part(xlnt::uri("a.xml", xlnt::uri_kind::Relative)); diff --git a/source/tests/PasswordHashTestSuite.h b/source/tests/PasswordHashTestSuite.h new file mode 100644 index 00000000..9f74b271 --- /dev/null +++ b/source/tests/PasswordHashTestSuite.h @@ -0,0 +1,28 @@ +#pragma once + +#include +#include + +#include +#include + +class PasswordHashTestSuite : public CxxTest::TestSuite +{ +public: + PasswordHashTestSuite() + { + + } + + void test_hasher() + { + //TS_ASSERT_EQUALS("CBEB", hash_password("test")); + } + + void test_sheet_protection() + { + //protection = SheetProtection(); + //protection.password = "test"; + //TS_ASSERT_EQUALS("CBEB", protection.password); + } +}; diff --git a/source/tests/PropsTestSuite.h b/source/tests/PropsTestSuite.h new file mode 100644 index 00000000..9d5c55aa --- /dev/null +++ b/source/tests/PropsTestSuite.h @@ -0,0 +1,117 @@ +#pragma once + +#include +#include + +#include +#include + +class PropsTestSuite : public CxxTest::TestSuite +{ +public: + PropsTestSuite() + { + + } + + void test_1() + { + + } + + //class TestReaderProps + //{ + // void setup_class(cls) + // { + // cls.genuine_filename = os.path.join(DATADIR, "genuine", "empty.xlsx"); + // cls.archive = ZipFile(cls.genuine_filename, "r", ZIP_DEFLATED); + // } + + // void teardown_class(cls) + // { + // cls.archive.close(); + // } + //}; + + void test_read_properties_core() + { + //content = archive.read(ARC_CORE) + // prop = read_properties_core(content) + // TS_ASSERT_EQUALS(prop.creator, "*.*") + // eacute = chr(233) + // TS_ASSERT_EQUALS(prop.last_modified_by, "Aur" + eacute + "lien Camp" + eacute + "as") + // TS_ASSERT_EQUALS(prop.created, datetime(2010, 4, 9, 20, 43, 12)) + // TS_ASSERT_EQUALS(prop.modified, datetime(2011, 2, 9, 13, 49, 32)) + } + + void test_read_sheets_titles() + { + //content = archive.read(ARC_WORKBOOK); + //sheet_titles = read_sheets_titles(content); + //TS_ASSERT_EQUALS(sheet_titles, \ + // ["Sheet1 - Text", "Sheet2 - Numbers", "Sheet3 - Formulas", "Sheet4 - Dates"]); + } + + // Just tests that the correct date / time format is returned from LibreOffice saved version + + //void setup_class(cls) + //{ + // cls.genuine_filename = os.path.join(DATADIR, "genuine", "empty_libre.xlsx") + // cls.archive = ZipFile(cls.genuine_filename, "r", ZIP_DEFLATED) + //} + + //void teardown_class(cls) + //{ + // cls.archive.close() + //} + + void test_read_properties_core2() + { + //content = archive.read(ARC_CORE) + // prop = read_properties_core(content) + // TS_ASSERT_EQUALS(prop.excel_base_date, CALENDAR_WINDOWS_1900) + } + + void test_read_sheets_titles2() + { + //content = archive.read(ARC_WORKBOOK) + // sheet_titles = read_sheets_titles(content) + // TS_ASSERT_EQUALS(sheet_titles, \ + // ["Sheet1 - Text", "Sheet2 - Numbers", "Sheet3 - Formulas", "Sheet4 - Dates"]) + } + + //void setup_class(cls) + //{ + // make_tmpdir() + // cls.tmp_filename = os.path.join(TMPDIR, "test.xlsx") + // cls.prop = DocumentProperties() + //} + + //void teardown_class(cls) + //{ + // clean_tmpdir() + //} + + void test_write_properties_core() + { + //prop.creator = "TEST_USER" + // prop.last_modified_by = "SOMEBODY" + // prop.created = datetime(2010, 4, 1, 20, 30, 00) + // prop.modified = datetime(2010, 4, 5, 14, 5, 30) + // content = write_properties_core(prop) + // assert_equals_file_content( + // os.path.join(DATADIR, "writer", "expected", "core.xml"), + // content) + } + + void test_write_properties_app() + { + //wb = Workbook() + // wb.create_sheet() + // wb.create_sheet() + // content = write_properties_app(wb) + // assert_equals_file_content( + // os.path.join(DATADIR, "writer", "expected", "app.xml"), + // content) + } +}; diff --git a/source/tests/ReadTestSuite.h b/source/tests/ReadTestSuite.h new file mode 100644 index 00000000..21b06cd0 --- /dev/null +++ b/source/tests/ReadTestSuite.h @@ -0,0 +1,197 @@ +#pragma once + +#include +#include + +#include +#include + +class ReadTestSuite : public CxxTest::TestSuite +{ +public: + ReadTestSuite() + { + + } + + void test_read_standalone_worksheet() + { + //path = os.path.join(DATADIR, "reader", "sheet2.xml") + // ws = None + // handle = open(path) + // try : + // ws = read_worksheet(handle.read(), DummyWb(), + // "Sheet 2", {1: "hello"}, {1: Style()}) + // finally : + // handle.close() + // assert isinstance(ws, Worksheet) + // TS_ASSERT_EQUALS(ws.cell("G5").value, "hello") + // TS_ASSERT_EQUALS(ws.cell("D30").value, 30) + // TS_ASSERT_EQUALS(ws.cell("K9").value, 0.09) + } + + void test_read_standard_workbook() + { + //path = os.path.join(DATADIR, "genuine", "empty.xlsx") + // wb = load_workbook(path) + // assert isinstance(wb, Workbook) + } + + void test_read_standard_workbook_from_fileobj() + { + //path = os.path.join(DATADIR, "genuine", "empty.xlsx") + // fo = open(path, mode = "rb") + // wb = load_workbook(fo) + // assert isinstance(wb, Workbook) + } + + void test_read_worksheet() + { + //path = os.path.join(DATADIR, "genuine", "empty.xlsx") + // wb = load_workbook(path) + // sheet2 = wb.get_sheet_by_name("Sheet2 - Numbers") + // assert isinstance(sheet2, Worksheet) + // TS_ASSERT_EQUALS("This is cell G5", sheet2.cell("G5").value) + // TS_ASSERT_EQUALS(18, sheet2.cell("D18").value) + } + + void test_read_nostring_workbook() + { + //genuine_wb = os.path.join(DATADIR, "genuine", "empty-no-string.xlsx") + // wb = load_workbook(genuine_wb) + // assert isinstance(wb, Workbook) + } + + // @raises(InvalidFileException) + void test_read_empty_file() + { + //null_file = os.path.join(DATADIR, "reader", "null_file.xlsx") + // wb = load_workbook(null_file) + } + + //@raises(InvalidFileException) + void test_read_empty_archive() + { + //null_file = os.path.join(DATADIR, "reader", "null_archive.xlsx") + // wb = load_workbook(null_file) + } + + void test_read_dimension() + { + //path = os.path.join(DATADIR, "reader", "sheet2.xml") + + // dimension = None + // handle = open(path) + // try : + // dimension = read_dimension(xml_source = handle.read()) + // finally : + // handle.close() + + // TS_ASSERT_EQUALS(("D", 1, "K", 30), dimension) + } + + void test_calculate_dimension_iter() + { + //path = os.path.join(DATADIR, "genuine", "empty.xlsx") + // wb = load_workbook(filename = path, use_iterators = True) + // sheet2 = wb.get_sheet_by_name("Sheet2 - Numbers") + // dimensions = sheet2.calculate_dimension() + // TS_ASSERT_EQUALS("%s%s:%s%s" % ("D", 1, "K", 30), dimensions) + } + + void test_get_highest_row_iter() + { + //path = os.path.join(DATADIR, "genuine", "empty.xlsx") + // wb = load_workbook(filename = path, use_iterators = True) + // sheet2 = wb.get_sheet_by_name("Sheet2 - Numbers") + // max_row = sheet2.get_highest_row() + // TS_ASSERT_EQUALS(30, max_row) + } + + void test_read_workbook_with_no_properties() + { + //genuine_wb = os.path.join(DATADIR, "genuine", \ + // "empty_with_no_properties.xlsx") + // wb = load_workbook(filename = genuine_wb) + } + + //void setup_class_with_styles(cls) + //{ + // //cls.genuine_wb = os.path.join(DATADIR, "genuine", \ + // // "empty-with-styles.xlsx") + // // wb = load_workbook(cls.genuine_wb) + // // cls.ws = wb.get_sheet_by_name("Sheet1") + //} + + void test_read_general_style() + { + //TS_ASSERT_EQUALS(ws.cell("A1").style.number_format.format_code, + // NumberFormat.FORMAT_GENERAL) + } + + void test_read_date_style() + { + //TS_ASSERT_EQUALS(ws.cell("A2").style.number_format.format_code, + // NumberFormat.FORMAT_DATE_XLSX14) + } + + void test_read_number_style() + { + //TS_ASSERT_EQUALS(ws.cell("A3").style.number_format.format_code, + // NumberFormat.FORMAT_NUMBER_00) + } + + void test_read_time_style() + { + //TS_ASSERT_EQUALS(ws.cell("A4").style.number_format.format_code, + // NumberFormat.FORMAT_DATE_TIME3) + } + + void test_read_percentage_style() + { + //TS_ASSERT_EQUALS(ws.cell("A5").style.number_format.format_code, + // NumberFormat.FORMAT_PERCENTAGE_00) + } + + //void setup_class_base_date_format(cls) + //{ + // //mac_wb_path = os.path.join(DATADIR, "reader", "date_1904.xlsx") + // // cls.mac_wb = load_workbook(mac_wb_path) + // // cls.mac_ws = cls.mac_wb.get_sheet_by_name("Sheet1") + + // // win_wb_path = os.path.join(DATADIR, "reader", "date_1900.xlsx") + // // cls.win_wb = load_workbook(win_wb_path) + // // cls.win_ws = cls.win_wb.get_sheet_by_name("Sheet1") + //} + + void test_read_win_base_date() + { + //TS_ASSERT_EQUALS(win_wb.properties.excel_base_date, CALENDAR_WINDOWS_1900) + } + + void test_read_mac_base_date() + { + //TS_ASSERT_EQUALS(mac_wb.properties.excel_base_date, CALENDAR_MAC_1904) + } + + void test_read_date_style_mac() + { + //TS_ASSERT_EQUALS(mac_ws.cell("A1").style.number_format.format_code, + // NumberFormat.FORMAT_DATE_XLSX14) + } + + void test_read_date_style_win() + { + //TS_ASSERT_EQUALS(win_ws.cell("A1").style.number_format.format_code, + // NumberFormat.FORMAT_DATE_XLSX14) + } + + void test_read_date_value() + { + //datetuple = (2011, 10, 31) + // dt = datetime(datetuple[0], datetuple[1], datetuple[2]) + // TS_ASSERT_EQUALS(mac_ws.cell("A1").value, dt) + // TS_ASSERT_EQUALS(win_ws.cell("A1").value, dt) + // TS_ASSERT_EQUALS(mac_ws.cell("A1").value, win_ws.cell("A1").value) + } +}; diff --git a/source/tests/StringsTestSuite.h b/source/tests/StringsTestSuite.h new file mode 100644 index 00000000..4dff0b50 --- /dev/null +++ b/source/tests/StringsTestSuite.h @@ -0,0 +1,61 @@ +#pragma once + +#include +#include + +#include +#include + +class StringsTestSuite : public CxxTest::TestSuite +{ +public: + StringsTestSuite() + { + + } + + void test_create_string_table() + { + //wb = Workbook() + // ws = wb.create_sheet() + // ws.cell("B12").value = "hello" + // ws.cell("B13").value = "world" + // ws.cell("D28").value = "hello" + // table = create_string_table(wb) + // TS_ASSERT_EQUALS({"hello": 1, "world" : 0}, table) + } + + void test_read_string_table() + { + //handle = open(os.path.join(DATADIR, "reader", "sharedStrings.xml")) + // try : + // content = handle.read() + // string_table = read_string_table(content) + // TS_ASSERT_EQUALS({0: "This is cell A1 in Sheet 1", 1 : "This is cell G5"}, string_table) + // finally : + // handle.close() + } + + void test_empty_string() + { + //handle = open(os.path.join(DATADIR, "reader", "sharedStrings-emptystring.xml")) + // try : + // content = handle.read() + // string_table = read_string_table(content) + // TS_ASSERT_EQUALS({0: "Testing empty cell", 1 : ""}, string_table) + // finally : + // handle.close() + } + + void test_formatted_string_table() + { + //handle = open(os.path.join(DATADIR, "reader", "shared-strings-rich.xml")) + // try : + // content = handle.read() + // string_table = read_string_table(content) + // TS_ASSERT_EQUALS({0: "Welcome", 1 : "to the best shop in town", + // 2 : " let"s play "}, string_table) + // finally : + // handle.close() + } +}; diff --git a/source/tests/StyleTestSuite.h b/source/tests/StyleTestSuite.h new file mode 100644 index 00000000..2ee33035 --- /dev/null +++ b/source/tests/StyleTestSuite.h @@ -0,0 +1,204 @@ +#pragma once + +#include +#include + +#include +#include + +class StyleTestSuite : public CxxTest::TestSuite +{ +public: + StyleTestSuite() + { + } + /* + now = datetime.datetime.now(); + cls.workbook = Workbook(); + cls.worksheet = cls.workbook.create_sheet(); + cls.worksheet.cell(coordinate = "A1").value = "12.34%"; + cls.worksheet.cell(coordinate = "B4").value = now; + cls.worksheet.cell(coordinate = "B5").value = now; + cls.worksheet.cell(coordinate = "C14").value = "This is a test"; + cls.worksheet.cell(coordinate = "D9").value = "31.31415"; + cls.worksheet.cell(coordinate = "D9").style.number_format.format_code = \ + NumberFormat.FORMAT_NUMBER_00; + cls.writer = StyleWriter(cls.workbook); + } + */ + + void test_create_style_table() + { + //TS_ASSERT_EQUALS(3, len(writer.style_table)); + } + + void test_write_style_table() + { + //reference_file = os.path.join(DATADIR, "writer", "expected", "simple-styles.xml"); + //assert_equals_file_content(reference_file, writer.write_table()); + } + + void setUp_writer() + { + //workbook = Workbook() + // worksheet = workbook.create_sheet() + } + + void test_no_style() + { + + //w = StyleWriter(workbook) + // TS_ASSERT_EQUALS(0, len(w.style_table)) + } + + void test_nb_style() + { + //for i in range(1, 6) + //{ + // worksheet.cell(row = 1, column = i).style.font.size += i + // w = StyleWriter(workbook) + // TS_ASSERT_EQUALS(5, len(w.style_table)) + + // worksheet.cell("A10").style.borders.top = Border.BORDER_THIN + // w = StyleWriter(workbook) + // TS_ASSERT_EQUALS(6, len(w.style_table)) + //} + } + + void test_style_unicity() + { + //for i in range(1, 6) + //{ + // worksheet.cell(row = 1, column = i).style.font.bold = True + // w = StyleWriter(workbook) + // TS_ASSERT_EQUALS(1, len(w.style_table)) + //} + } + + void test_fonts() + { + //worksheet.cell("A1").style.font.size = 12 + // worksheet.cell("A1").style.font.bold = True + // w = StyleWriter(workbook) + // w._write_fonts() + // TS_ASSERT_EQUALS(get_xml(w._root), "") + + // worksheet.cell("A1").style.font.underline = Font.UNDERLINE_SINGLE + // w = StyleWriter(workbook) + // w._write_fonts() + // TS_ASSERT_EQUALS(get_xml(w._root), "") + } + + void test_fills() + { + //worksheet.cell("A1").style.fill.fill_type = "solid" + // worksheet.cell("A1").style.fill.start_color.index = Color.DARKYELLOW + // w = StyleWriter(workbook) + // w._write_fills() + // TS_ASSERT_EQUALS(get_xml(w._root), "") + } + + void test_borders() + { + //worksheet.cell("A1").style.borders.top.border_style = Border.BORDER_THIN + // worksheet.cell("A1").style.borders.top.color.index = Color.DARKYELLOW + // w = StyleWriter(workbook) + // w._write_borders() + // TS_ASSERT_EQUALS(get_xml(w._root), "") + } + + void test_write_cell_xfs_1() + { + //worksheet.cell("A1").style.font.size = 12 + // w = StyleWriter(workbook) + // ft = w._write_fonts() + // nft = w._write_number_formats() + // w._write_cell_xfs(nft, ft, {}, {}) + // xml = get_xml(w._root) + // ok_("applyFont="1"" in xml) + // ok_("applyFillId="1"" not in xml) + // ok_("applyBorder="1"" not in xml) + // ok_("applyAlignment="1"" not in xml) + } + + void test_alignment() + { + //worksheet.cell("A1").style.alignment.horizontal = "center" + // worksheet.cell("A1").style.alignment.vertical = "center" + // w = StyleWriter(workbook) + // nft = w._write_number_formats() + // w._write_cell_xfs(nft, {}, {}, {}) + // xml = get_xml(w._root) + // ok_("applyAlignment="1"" in xml) + // ok_("horizontal="center"" in xml) + // ok_("vertical="center"" in xml) + } + + void test_alignment_rotation() + { + //worksheet.cell("A1").style.alignment.vertical = "center" + // worksheet.cell("A1").style.alignment.text_rotation = 90 + // worksheet.cell("A2").style.alignment.vertical = "center" + // worksheet.cell("A2").style.alignment.text_rotation = 135 + // w = StyleWriter(workbook) + // nft = w._write_number_formats() + // w._write_cell_xfs(nft, {}, {}, {}) + // xml = get_xml(w._root) + // ok_("textRotation="90"" in xml) + // ok_("textRotation="135"" in xml) + } + + + void test_format_comparisions() + { + //format1 = NumberFormat() + // format2 = NumberFormat() + // format3 = NumberFormat() + // format1.format_code = "m/d/yyyy" + // format2.format_code = "m/d/yyyy" + // format3.format_code = "mm/dd/yyyy" + // assert not format1 < format2 + // assert format1 < format3 + // assert format1 == format2 + // assert format1 != format3 + } + + + void test_builtin_format() + { + //format = NumberFormat() + // format.format_code = "0.00" + // TS_ASSERT_EQUALS(format.builtin_format_code(2), format._format_code) + } + + + void test_read_style() + { + //reference_file = os.path.join(DATADIR, "reader", "simple-styles.xml") + + // handle = open(reference_file, "r") + // try : + // content = handle.read() + // finally : + // handle.close() + // style_table = read_style_table(content) + // TS_ASSERT_EQUALS(4, len(style_table)) + // TS_ASSERT_EQUALS(NumberFormat._BUILTIN_FORMATS[9], + // style_table[1].number_format.format_code) + // TS_ASSERT_EQUALS("yyyy-mm-dd", style_table[2].number_format.format_code) + } + + + void test_read_cell_style() + { + //reference_file = os.path.join( + // DATADIR, "reader", "empty-workbook-styles.xml") + // handle = open(reference_file, "r") + // try : + // content = handle.read() + // finally : + // handle.close() + // style_table = read_style_table(content) + // TS_ASSERT_EQUALS(2, len(style_table)) + } +}; diff --git a/source/tests/ThemeTestSuite.h b/source/tests/ThemeTestSuite.h new file mode 100644 index 00000000..585f8546 --- /dev/null +++ b/source/tests/ThemeTestSuite.h @@ -0,0 +1,23 @@ +#pragma once + +#include +#include + +#include +#include + +class ThemeTestSuite : public CxxTest::TestSuite +{ +public: + ThemeTestSuite() + { + + } + + void test_write_theme() + { + //content = write_theme(); + //assert_equals_file_content( + // os.path.join(DATADIR, "writer", "expected", "theme1.xml"), content); + } +}; diff --git a/source/tests/UnicodeTestSuite.h b/source/tests/UnicodeTestSuite.h new file mode 100644 index 00000000..44166b9b --- /dev/null +++ b/source/tests/UnicodeTestSuite.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +#include +#include + +class UnicodeTestSuite : public CxxTest::TestSuite +{ +public: + UnicodeTestSuite() + { + + } + + void test_read_workbook_with_unicode_character() + { + //unicode_wb = os.path.join(DATADIR, "genuine", "unicode.xlsx"); + //wb = load_workbook(filename = unicode_wb); + } +}; diff --git a/source/tests/packaging/UriTestSuite.h b/source/tests/UriTestSuite.h similarity index 98% rename from source/tests/packaging/UriTestSuite.h rename to source/tests/UriTestSuite.h index ad865ef4..ad824d62 100644 --- a/source/tests/packaging/UriTestSuite.h +++ b/source/tests/UriTestSuite.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include "../packaging/uri.h" class uriTestSuite : public CxxTest::TestSuite { diff --git a/source/tests/WorkbookTestSuite.h b/source/tests/WorkbookTestSuite.h new file mode 100644 index 00000000..4f6b26a8 --- /dev/null +++ b/source/tests/WorkbookTestSuite.h @@ -0,0 +1,384 @@ +#pragma once + +#include +#include + +#include +#include + +class WorkbookTestSuite : public CxxTest::TestSuite +{ +public: + WorkbookTestSuite() + { + + } + + void test_get_active_sheet() + { + //wb = Workbook(); + //active_sheet = wb.get_active_sheet(); + //TS_ASSERT_EQUALS(active_sheet, wb.worksheets[0]); + } + + void test_create_sheet() + { + //wb = Workbook(); + //new_sheet = wb.create_sheet(0); + //TS_ASSERT_EQUALS(new_sheet, wb.worksheets[0]); + } + + void test_create_sheet_with_name() + { + //wb = Workbook(); + //new_sheet = wb.create_sheet(0, title = "LikeThisName"); + //TS_ASSERT_EQUALS(new_sheet, wb.worksheets[0]); + } + + void test_add_correct_sheet() + { + //wb = Workbook(); + //new_sheet = wb.create_sheet(0); + //wb.add_sheet(new_sheet); + //TS_ASSERT_EQUALS(new_sheet, wb.worksheets[2]); + } + + void test_add_incorrect_sheet() + { + //wb = Workbook(); + //wb.add_sheet("Test"); + } + + void test_create_sheet_readonly() + { + //wb = Workbook(); + //wb._set_optimized_read(); + //wb.create_sheet(); + } + + void test_remove_sheet() + { + //wb = Workbook(); + //new_sheet = wb.create_sheet(0); + //wb.remove_sheet(new_sheet); + //assert new_sheet not in wb.worksheets; + } + + void test_get_sheet_by_name() + { + //wb = Workbook(); + //new_sheet = wb.create_sheet(); + //title = "my sheet"; + //new_sheet.title = title; + //found_sheet = wb.get_sheet_by_name(title); + //TS_ASSERT_EQUALS(new_sheet, found_sheet); + } + + void test_get_index2() + { + //wb = Workbook(); + //new_sheet = wb.create_sheet(0); + //sheet_index = wb.get_index(new_sheet); + //TS_ASSERT_EQUALS(sheet_index, 0); + } + + void test_get_sheet_names() + { + //wb = Workbook(); + //names = ["Sheet", "Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5"]; + //for(auto count : range(5)) + //{ + // wb.create_sheet(0) + // actual_names = wb.get_sheet_names() + // TS_ASSERT_EQUALS(sorted(actual_names), sorted(names)) + //} + } + + void test_get_named_ranges2() + { + /*wb = Workbook(); + TS_ASSERT_EQUALS(wb.get_named_ranges(), wb._named_ranges);*/ + } + void test_get_active_sheet2() + { + //wb = Workbook(); + //active_sheet = wb.get_active_sheet(); + //TS_ASSERT_EQUALS(active_sheet, wb.worksheets[0]); + } + + void test_create_sheet2() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(0); + TS_ASSERT_EQUALS(new_sheet, wb.worksheets[0]);*/ + } + + void test_create_sheet_with_name2() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(0, title = "LikeThisName"); + TS_ASSERT_EQUALS(new_sheet, wb.worksheets[0]);*/ + } + + void test_add_correct_sheet2() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(0); + wb.add_sheet(new_sheet); + TS_ASSERT_EQUALS(new_sheet, wb.worksheets[2]);*/ + } + + //@raises(AssertionError) + void test_add_incorrect_sheet2() + { + /*wb = Workbook(); + wb.add_sheet("Test");*/ + } + + //@raises(ReadOnlyWorkbookException) + void test_create_sheet_readonly2() + { + /*wb = Workbook(); + wb._set_optimized_read(); + wb.create_sheet();*/ + } + + void test_remove_sheet2() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(0); + wb.remove_sheet(new_sheet); + assert new_sheet not in wb.worksheets;*/ + } + + void test_get_sheet_by_name2() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(); + title = "my sheet"; + new_sheet.title = title; + found_sheet = wb.get_sheet_by_name(title); + TS_ASSERT_EQUALS(new_sheet, found_sheet);*/ + } + + void test_get_index() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(0); + sheet_index = wb.get_index(new_sheet); + TS_ASSERT_EQUALS(sheet_index, 0);*/ + } + + void test_get_sheet_names2() + { + /*wb = Workbook(); + names = ["Sheet", "Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5"]; + for(auto count in range(5)) + { + wb.create_sheet(0) + actual_names = wb.get_sheet_names() + TS_ASSERT_EQUALS(sorted(actual_names), sorted(names)) + }*/ + } + + void test_get_named_ranges() + { + /* wb = Workbook(); + TS_ASSERT_EQUALS(wb.get_named_ranges(), wb._named_ranges);*/ + } + + void test_add_named_range() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(); + named_range = NamedRange("test_nr", [(new_sheet, "A1")]); + wb.add_named_range(named_range); + named_ranges_list = wb.get_named_ranges(); + assert named_range in named_ranges_list;*/ + } + + void test_get_named_range2() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(); + named_range = NamedRange("test_nr", [(new_sheet, "A1")]); + wb.add_named_range(named_range); + found_named_range = wb.get_named_range("test_nr"); + TS_ASSERT_EQUALS(named_range, found_named_range);*/ + } + + void test_remove_named_range2() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(); + named_range = NamedRange("test_nr", [(new_sheet, "A1")]); + wb.add_named_range(named_range); + wb.remove_named_range(named_range); + named_ranges_list = wb.get_named_ranges(); + assert named_range not in named_ranges_list;*/ + } + + //@with_setup(setup = make_tmpdir, teardown = clean_tmpdir) + void test_add_local_named_range2() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(); + named_range = NamedRange("test_nr", [(new_sheet, "A1")]); + named_range.scope = new_sheet; + wb.add_named_range(named_range); + dest_filename = osp.join(TMPDIR, "local_named_range_book.xlsx"); + wb.save(dest_filename);*/ + } + + //@with_setup(setup = make_tmpdir, teardown = clean_tmpdir) + void test_write_regular_date() + { + /*today = datetime.datetime(2010, 1, 18, 14, 15, 20, 1600); + + book = Workbook(); + sheet = book.get_active_sheet(); + sheet.cell("A1").value = today; + dest_filename = osp.join(TMPDIR, "date_read_write_issue.xlsx"); + book.save(dest_filename); + + test_book = load_workbook(dest_filename); + test_sheet = test_book.get_active_sheet(); + + TS_ASSERT_EQUALS(test_sheet.cell("A1").value, today);*/ + } + + // @with_setup(setup = make_tmpdir, teardown = clean_tmpdir) + void test_write_regular_float() + { + /*float_value = 1.0 / 3.0; + book = Workbook(); + sheet = book.get_active_sheet(); + sheet.cell("A1").value = float_value; + dest_filename = osp.join(TMPDIR, "float_read_write_issue.xlsx"); + book.save(dest_filename); + + test_book = load_workbook(dest_filename); + test_sheet = test_book.get_active_sheet(); + + TS_ASSERT_EQUALS(test_sheet.cell("A1").value, float_value);*/ + } + + //@raises(UnicodeDecodeError) + void test_bad_encoding2() + { + /*pound = chr(163); + test_string = ("Compound Value (" + pound + ")").encode("latin1"); + + utf_book = Workbook(); + utf_sheet = utf_book.get_active_sheet(); + utf_sheet.cell("A1").value = test_string;*/ + } + + void test_good_encoding2() + { + /*pound = chr(163); + test_string = ("Compound Value (" + pound + ")").encode("latin1"); + + lat_book = Workbook(encoding = "latin1"); + lat_sheet = lat_book.get_active_sheet(); + lat_sheet.cell("A1").value = test_string;*/ + } + + void test_add_named_range2() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(); + named_range = NamedRange("test_nr", [(new_sheet, "A1")]); + wb.add_named_range(named_range); + named_ranges_list = wb.get_named_ranges(); + assert named_range in named_ranges_list;*/ + } + + void test_get_named_range() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(); + named_range = NamedRange("test_nr", [(new_sheet, "A1")]); + wb.add_named_range(named_range); + found_named_range = wb.get_named_range("test_nr"); + TS_ASSERT_EQUALS(named_range, found_named_range);*/ + } + + void test_remove_named_range() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(); + named_range = NamedRange("test_nr", [(new_sheet, "A1")]); + wb.add_named_range(named_range); + wb.remove_named_range(named_range); + named_ranges_list = wb.get_named_ranges(); + assert named_range not in named_ranges_list;*/ + } + + //@with_setup(setup = make_tmpdir, teardown = clean_tmpdir) + void test_add_local_named_range() + { + /*wb = Workbook(); + new_sheet = wb.create_sheet(); + named_range = NamedRange("test_nr", [(new_sheet, "A1")]); + named_range.scope = new_sheet; + wb.add_named_range(named_range); + dest_filename = osp.join(TMPDIR, "local_named_range_book.xlsx"); + wb.save(dest_filename);*/ + } + + + // @with_setup(setup = make_tmpdir, teardown = clean_tmpdir) + void test_write_regular_date2() + { + /*today = datetime.datetime(2010, 1, 18, 14, 15, 20, 1600); + + book = Workbook(); + sheet = book.get_active_sheet(); + sheet.cell("A1").value = today; + dest_filename = osp.join(TMPDIR, "date_read_write_issue.xlsx"); + book.save(dest_filename); + + test_book = load_workbook(dest_filename); + test_sheet = test_book.get_active_sheet(); + + TS_ASSERT_EQUALS(test_sheet.cell("A1").value, today);*/ + } + + // @with_setup(setup = make_tmpdir, teardown = clean_tmpdir) + void test_write_regular_float2() + { + /*float_value = 1.0 / 3.0; + book = Workbook(); + sheet = book.get_active_sheet(); + sheet.cell("A1").value = float_value; + dest_filename = osp.join(TMPDIR, "float_read_write_issue.xlsx"); + book.save(dest_filename); + + test_book = load_workbook(dest_filename); + test_sheet = test_book.get_active_sheet(); + + TS_ASSERT_EQUALS(test_sheet.cell("A1").value, float_value);*/ + } + + // @raises(UnicodeDecodeError) + void test_bad_encoding() + { + /*pound = chr(163); + test_string = ("Compound Value (" + pound + ")").encode("latin1"); + + utf_book = Workbook(); + utf_sheet = utf_book.get_active_sheet(); + utf_sheet.cell("A1").value = test_string;*/ + } + + void test_good_encoding() + { + /*pound = chr(163); + test_string = ("Compound Value (" + pound + ")").encode("latin1"); + + lat_book = Workbook(encoding = "latin1"); + lat_sheet = lat_book.get_active_sheet(); + lat_sheet.cell("A1").value = test_string;*/ + } +}; diff --git a/source/tests/WorksheetTestSuite.h b/source/tests/WorksheetTestSuite.h new file mode 100644 index 00000000..18931486 --- /dev/null +++ b/source/tests/WorksheetTestSuite.h @@ -0,0 +1,336 @@ +#pragma once + +#include +#include + +#include +#include + +class WorksheetTestSuite : public CxxTest::TestSuite +{ +public: + WorksheetTestSuite() + { + }/* + cls.wb = Workbook() + } + */ + + void test_new_worksheet() + { + //ws = Worksheet(wb); + //TS_ASSERT_EQUALS(wb, ws._parent); + } + + void test_new_sheet_name() + { + //wb.worksheets = []; + //ws = Worksheet(wb, title = ""); + //TS_ASSERT_EQUALS(repr(ws), ""); + } + + void test_get_cell() + { + //ws = Worksheet(wb); + //cell = ws.cell("A1"); + //TS_ASSERT_EQUALS(cell.get_coordinate(), "A1"); + } + + void test_set_bad_title() + { + //Worksheet(wb, "X" * 50); + } + + void test_set_bad_title_character() + { + //assert_raises(SheetTitleException, Worksheet, wb, "["); + //assert_raises(SheetTitleException, Worksheet, wb, "]"); + //assert_raises(SheetTitleException, Worksheet, wb, "*"); + //assert_raises(SheetTitleException, Worksheet, wb, ":"); + //assert_raises(SheetTitleException, Worksheet, wb, "?"); + //assert_raises(SheetTitleException, Worksheet, wb, "/"); + //assert_raises(SheetTitleException, Worksheet, wb, "\\"); + } + + void test_worksheet_dimension() + { + //ws = Worksheet(wb); + //TS_ASSERT_EQUALS("A1:A1", ws.calculate_dimension()); + //ws.cell("B12").value = "AAA"; + //TS_ASSERT_EQUALS("A1:B12", ws.calculate_dimension()); + } + + void test_worksheet_range() + { + //ws = Worksheet(wb); + //xlrange = ws.range("A1:C4"); + //assert isinstance(xlrange, tuple); + //TS_ASSERT_EQUALS(4, len(xlrange)); + //TS_ASSERT_EQUALS(3, len(xlrange[0])); + } + + void test_worksheet_named_range() + { + //ws = Worksheet(wb); + //wb.create_named_range("test_range", ws, "C5"); + //xlrange = ws.range("test_range"); + //assert isinstance(xlrange, Cell); + //TS_ASSERT_EQUALS(5, xlrange.row); + } + + void test_bad_named_range() + { + //ws = Worksheet(wb); + //ws.range("bad_range"); + } + + void test_named_range_wrong_sheet() + { + //ws1 = Worksheet(wb); + //ws2 = Worksheet(wb); + //wb.create_named_range("wrong_sheet_range", ws1, "C5"); + //ws2.range("wrong_sheet_range"); + } + + void test_cell_offset() + { + //ws = Worksheet(wb); + //TS_ASSERT_EQUALS("C17", ws.cell("B15").offset(2, 1).get_coordinate()); + } + + void test_range_offset() + { + //ws = Worksheet(wb); + //xlrange = ws.range("A1:C4", 1, 3); + //assert isinstance(xlrange, tuple); + //TS_ASSERT_EQUALS(4, len(xlrange)); + //TS_ASSERT_EQUALS(3, len(xlrange[0])); + //TS_ASSERT_EQUALS("D2", xlrange[0][0].get_coordinate()); + } + + void test_cell_alternate_coordinates() + { + //ws = Worksheet(wb); + //cell = ws.cell(row = 8, column = 4); + //TS_ASSERT_EQUALS("E9", cell.get_coordinate()); + } + + void test_cell_insufficient_coordinates() + { + //ws = Worksheet(wb); + //cell = ws.cell(row = 8); + } + + void test_cell_range_name() + { + //ws = Worksheet(wb); + //wb.create_named_range("test_range_single", ws, "B12"); + //assert_raises(CellCoordinatesException, ws.cell, "test_range_single"); + //c_range_name = ws.range("test_range_single"); + //c_range_coord = ws.range("B12"); + //c_cell = ws.cell("B12"); + //TS_ASSERT_EQUALS(c_range_coord, c_range_name); + //TS_ASSERT_EQUALS(c_range_coord, c_cell); + } + + void test_garbage_collect() + { + //ws = Worksheet(wb); + //ws.cell("A1").value = ""; + //ws.cell("B2").value = "0"; + //ws.cell("C4").value = 0; + //ws.garbage_collect(); + //for i, cell in enumerate(ws.get_cell_collection()) + //{ + // TS_ASSERT_EQUALS(cell, [ws.cell("B2"), ws.cell("C4")][i]); + //} + } + + void test_hyperlink_relationships() + { + //ws = Worksheet(wb); + //TS_ASSERT_EQUALS(len(ws.relationships), 0); + + //ws.cell("A1").hyperlink = "http://test.com"; + //TS_ASSERT_EQUALS(len(ws.relationships), 1); + //TS_ASSERT_EQUALS("rId1", ws.cell("A1").hyperlink_rel_id); + //TS_ASSERT_EQUALS("rId1", ws.relationships[0].id); + //TS_ASSERT_EQUALS("http://test.com", ws.relationships[0].target); + //TS_ASSERT_EQUALS("External", ws.relationships[0].target_mode); + + //ws.cell("A2").hyperlink = "http://test2.com"; + //TS_ASSERT_EQUALS(len(ws.relationships), 2); + //TS_ASSERT_EQUALS("rId2", ws.cell("A2").hyperlink_rel_id); + //TS_ASSERT_EQUALS("rId2", ws.relationships[1].id); + //TS_ASSERT_EQUALS("http://test2.com", ws.relationships[1].target); + //TS_ASSERT_EQUALS("External", ws.relationships[1].target_mode); + } + + void test_bad_relationship_type() + { + //rel = Relationship("bad_type"); + } + + void test_append_list() + { + //ws = Worksheet(wb); + + //ws.append(["This is A1", "This is B1"]); + + //TS_ASSERT_EQUALS("This is A1", ws.cell("A1").value); + //TS_ASSERT_EQUALS("This is B1", ws.cell("B1").value); + } + + void test_append_dict_letter() + { + //ws = Worksheet(wb); + + //ws.append({"A" : "This is A1", "C" : "This is C1"}); + + //TS_ASSERT_EQUALS("This is A1", ws.cell("A1").value); + //TS_ASSERT_EQUALS("This is C1", ws.cell("C1").value); + } + + void test_append_dict_index() + { + //ws = Worksheet(wb); + + //ws.append({0 : "This is A1", 2 : "This is C1"}); + + //TS_ASSERT_EQUALS("This is A1", ws.cell("A1").value); + //TS_ASSERT_EQUALS("This is C1", ws.cell("C1").value); + } + + void test_bad_append() + { + //ws = Worksheet(wb); + //ws.append("test"); + } + + void test_append_2d_list() + { + //ws = Worksheet(wb); + + //ws.append(["This is A1", "This is B1"]); + //ws.append(["This is A2", "This is B2"]); + + //vals = ws.range("A1:B2"); + + //TS_ASSERT_EQUALS((("This is A1", "This is B1"), + // ("This is A2", "This is B2"), ), flatten(vals)); + } + + void test_rows() + { + //ws = Worksheet(wb); + + //ws.cell("A1").value = "first"; + //ws.cell("C9").value = "last"; + + //rows = ws.rows; + + //TS_ASSERT_EQUALS(len(rows), 9); + + //TS_ASSERT_EQUALS(rows[0][0].value, "first"); + //TS_ASSERT_EQUALS(rows[-1][-1].value, "last"); + } + + void test_cols() + { + //ws = Worksheet(wb); + + //ws.cell("A1").value = "first"; + //ws.cell("C9").value = "last"; + + //cols = ws.columns; + + //TS_ASSERT_EQUALS(len(cols), 3); + + //TS_ASSERT_EQUALS(cols[0][0].value, "first"); + //TS_ASSERT_EQUALS(cols[-1][-1].value, "last"); + } + + void test_auto_filter() + { + //ws = Worksheet(wb); + //ws.auto_filter = ws.range("a1:f1"); + //assert ws.auto_filter == "A1:F1"; + + //ws.auto_filter = ""; + //assert ws.auto_filter is None; + + //ws.auto_filter = "c1:g9"; + //assert ws.auto_filter == "C1:G9"; + } + + void test_page_margins() + { + //ws = Worksheet(wb); + //ws.page_margins.left = 2.0; + //ws.page_margins.right = 2.0; + //ws.page_margins.top = 2.0; + //ws.page_margins.bottom = 2.0; + //ws.page_margins.header = 1.5; + //ws.page_margins.footer = 1.5; + //xml_string = write_worksheet(ws, None, None); + //assert "" in xml_string; + + //ws = Worksheet(wb); + //xml_string = write_worksheet(ws, None, None); + //assert "Cell B1" in xml_string; + + //ws.merge_cells("A1:B1"); + //xml_string = write_worksheet(ws, string_table, None); + //assert "Cell B1" not in xml_string; + //assert "" in xml_string; + + //ws.unmerge_cells("A1:B1"); + //xml_string = write_worksheet(ws, string_table, None); + //assert "" not in xml_string; + } + + void test_freeze() + { + //ws = Worksheet(wb); + //ws.freeze_panes = ws.cell("b2"); + //assert ws.freeze_panes == "B2"; + + //ws.freeze_panes = ""; + //assert ws.freeze_panes is None; + + //ws.freeze_panes = "c5"; + //assert ws.freeze_panes == "C5"; + + //ws.freeze_panes = ws.cell("A1"); + //assert ws.freeze_panes is None; + } + + void test_printer_settings() + { + //ws = Worksheet(wb); + //ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE; + //ws.page_setup.paperSize = ws.PAPERSIZE_TABLOID; + //ws.page_setup.fitToPage = True; + //ws.page_setup.fitToHeight = 0; + //ws.page_setup.fitToWidth = 1; + //xml_string = write_worksheet(ws, None, None); + //assert "" in xml_string; + //assert "" in xml_string; + + //ws = Worksheet(wb); + //xml_string = write_worksheet(ws, None, None); + //assert " +#include + +#include +#include + +class WriteTestSuite : public CxxTest::TestSuite +{ +public: + WriteTestSuite() + { + + } + + void test_write_empty_workbook() + { + //make_tmpdir(); + //wb = Workbook(); + //dest_filename = os.path.join(TMPDIR, "empty_book.xlsx"); + //save_workbook(wb, dest_filename); + //assert os.path.isfile(dest_filename); + //clean_tmpdir(); + } + + void test_write_virtual_workbook() + { + //old_wb = Workbook(); + //saved_wb = save_virtual_workbook(old_wb); + //new_wb = load_workbook(BytesIO(saved_wb)); + //assert new_wb; + } + + void test_write_workbook_rels() + { + //wb = Workbook(); + //content = write_workbook_rels(wb); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "workbook.xml.rels"), content); + } + + void test_write_workbook() + { + //wb = Workbook(); + //content = write_workbook(wb); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "workbook.xml"), content); + } + + + void test_write_string_table() + { + //table = {"hello": 1, "world" : 2, "nice" : 3}; + //content = write_string_table(table); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "sharedStrings.xml"), content); + } + + void test_write_worksheet() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.cell("F42").value = "hello"; + //content = write_worksheet(ws, {"hello": 0}, {}); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "sheet1.xml"), content); + } + + void test_write_hidden_worksheet() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.sheet_state = ws.SHEETSTATE_HIDDEN; + //ws.cell("F42").value = "hello"; + //content = write_worksheet(ws, {"hello": 0}, {}); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "sheet1.xml"), content); + } + + void test_write_bool() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.cell("F42").value = False; + //ws.cell("F43").value = True; + //content = write_worksheet(ws, {}, {}); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "sheet1_bool.xml"), content); + } + + void test_write_formula() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.cell("F1").value = 10; + //ws.cell("F2").value = 32; + //ws.cell("F3").value = "=F1+F2"; + //content = write_worksheet(ws, {}, {}); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "sheet1_formula.xml"), content); + } + + void test_write_style() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.cell("F1").value = "13%"; + //style_id_by_hash = StyleWriter(wb).get_style_by_hash(); + //content = write_worksheet(ws, {}, style_id_by_hash); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "sheet1_style.xml"), content); + } + + void test_write_height() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.cell("F1").value = 10; + //ws.row_dimensions[ws.cell("F1").row].height = 30; + //content = write_worksheet(ws, {}, {}); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "sheet1_height.xml"), content); + } + + void test_write_hyperlink() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.cell("A1").value = "test"; + //ws.cell("A1").hyperlink = "http://test.com"; + //content = write_worksheet(ws, {"test": 0}, {}); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "sheet1_hyperlink.xml"), content); + } + + void test_write_hyperlink_rels() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //TS_ASSERT_EQUALS(0, len(ws.relationships)); + //ws.cell("A1").value = "test"; + //ws.cell("A1").hyperlink = "http://test.com/"; + //TS_ASSERT_EQUALS(1, len(ws.relationships)); + //ws.cell("A2").value = "test"; + //ws.cell("A2").hyperlink = "http://test2.com/"; + //TS_ASSERT_EQUALS(2, len(ws.relationships)); + //content = write_worksheet_rels(ws, 1); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "sheet1_hyperlink.xml.rels"), content); + } + + void test_hyperlink_value() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.cell("A1").hyperlink = "http://test.com"; + //TS_ASSERT_EQUALS("http://test.com", ws.cell("A1").value); + //ws.cell("A1").value = "test"; + //TS_ASSERT_EQUALS("test", ws.cell("A1").value); + } + + void test_write_auto_filter() + { + //wb = Workbook(); + //ws = wb.worksheets[0]; + //ws.cell("F42").value = "hello"; + //ws.auto_filter = "A1:F1"; + //content = write_worksheet(ws, {"hello": 0}, {}); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "sheet1_auto_filter.xml"), content); + + //content = write_workbook(wb); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "workbook_auto_filter.xml"), content); + } + + void test_freeze_panes_horiz() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.cell("F42").value = "hello"; + //ws.freeze_panes = "A4"; + //content = write_worksheet(ws, {"hello": 0}, {}); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "sheet1_freeze_panes_horiz.xml"), content); + } + + void test_freeze_panes_vert() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.cell("F42").value = "hello"; + //ws.freeze_panes = "D1"; + //content = write_worksheet(ws, {"hello": 0}, {}); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "sheet1_freeze_panes_vert.xml"), content); + } + + void test_freeze_panes_both() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.cell("F42").value = "hello"; + //ws.freeze_panes = "D4"; + //content = write_worksheet(ws, {"hello": 0}, {}); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "sheet1_freeze_panes_both.xml"), content); + } + + void test_long_number() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.cell("A1").value = 9781231231230; + //content = write_worksheet(ws, {}, {}); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "long_number.xml"), content); + } + + void test_decimal() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.cell("A1").value = decimal.Decimal("3.14"); + //content = write_worksheet(ws, {}, {}); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "decimal.xml"), content); + } + + void test_short_number() + { + //wb = Workbook(); + //ws = wb.create_sheet(); + //ws.cell("A1").value = 1234567890; + //content = write_worksheet(ws, {}, {}); + //assert_equals_file_content(os.path.join(DATADIR, "writer", "expected", \ + // "short_number.xml"), content); + } +}; diff --git a/source/tests/packaging/a.zip b/source/tests/packaging/a.zip deleted file mode 100644 index 42d3bd332a55c7e47ffec1ee699e2eef555acbae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257 zcmWIWW@Zs#U|`^2Xbj48k(g_G#0tps2VzzrPSmT&&DpGZ>b(BO$4`R-Hh7*pamF*y zLq}8dl#iCK=ho0B( tmp, argc, argv ); return status; } -bool suite_IntegrationTestSuite_init = false; -#include "C:\Users\taf656\Development\xlnt\source\tests\integration\IntegrationTestSuite.h" +bool suite_CellTestSuite_init = false; +#include "C:\Users\taf656\Development\xlnt\source\tests\CellTestSuite.h" + +static CellTestSuite suite_CellTestSuite; + +static CxxTest::List Tests_CellTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_CellTestSuite( "../../source/tests/CellTestSuite.h", 12, "CellTestSuite", suite_CellTestSuite, Tests_CellTestSuite ); + +static class TestDescription_suite_CellTestSuite_test_coordinates : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_coordinates() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 20, "test_coordinates" ) {} + void runTest() { suite_CellTestSuite.test_coordinates(); } +} testDescription_suite_CellTestSuite_test_coordinates; + +static class TestDescription_suite_CellTestSuite_test_invalid_coordinate : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_invalid_coordinate() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 27, "test_invalid_coordinate" ) {} + void runTest() { suite_CellTestSuite.test_invalid_coordinate(); } +} testDescription_suite_CellTestSuite_test_invalid_coordinate; + +static class TestDescription_suite_CellTestSuite_test_zero_row : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_zero_row() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 32, "test_zero_row" ) {} + void runTest() { suite_CellTestSuite.test_zero_row(); } +} testDescription_suite_CellTestSuite_test_zero_row; + +static class TestDescription_suite_CellTestSuite_test_absolute : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_absolute() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 37, "test_absolute" ) {} + void runTest() { suite_CellTestSuite.test_absolute(); } +} testDescription_suite_CellTestSuite_test_absolute; + +static class TestDescription_suite_CellTestSuite_test_absolute_multiple : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_absolute_multiple() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 42, "test_absolute_multiple" ) {} + void runTest() { suite_CellTestSuite.test_absolute_multiple(); } +} testDescription_suite_CellTestSuite_test_absolute_multiple; + +static class TestDescription_suite_CellTestSuite_test_column_index : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_column_index() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 47, "test_column_index" ) {} + void runTest() { suite_CellTestSuite.test_column_index(); } +} testDescription_suite_CellTestSuite_test_column_index; + +static class TestDescription_suite_CellTestSuite_test_bad_column_index : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_bad_column_index() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 55, "test_bad_column_index" ) {} + void runTest() { suite_CellTestSuite.test_bad_column_index(); } +} testDescription_suite_CellTestSuite_test_bad_column_index; + +static class TestDescription_suite_CellTestSuite_test_column_letter_boundries : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_column_letter_boundries() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 69, "test_column_letter_boundries" ) {} + void runTest() { suite_CellTestSuite.test_column_letter_boundries(); } +} testDescription_suite_CellTestSuite_test_column_letter_boundries; + +static class TestDescription_suite_CellTestSuite_test_column_letter : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_column_letter() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 76, "test_column_letter" ) {} + void runTest() { suite_CellTestSuite.test_column_letter(); } +} testDescription_suite_CellTestSuite_test_column_letter; + +static class TestDescription_suite_CellTestSuite_test_initial_value : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_initial_value() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 86, "test_initial_value" ) {} + void runTest() { suite_CellTestSuite.test_initial_value(); } +} testDescription_suite_CellTestSuite_test_initial_value; + +static class TestDescription_suite_CellTestSuite_test_null : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_null() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 95, "test_null" ) {} + void runTest() { suite_CellTestSuite.test_null(); } +} testDescription_suite_CellTestSuite_test_null; + +static class TestDescription_suite_CellTestSuite_test_numeric : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_numeric() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 104, "test_numeric" ) {} + void runTest() { suite_CellTestSuite.test_numeric(); } +} testDescription_suite_CellTestSuite_test_numeric; + +static class TestDescription_suite_CellTestSuite_test_string : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_string() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 136, "test_string" ) {} + void runTest() { suite_CellTestSuite.test_string(); } +} testDescription_suite_CellTestSuite_test_string; + +static class TestDescription_suite_CellTestSuite_test_single_dot : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_single_dot() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 145, "test_single_dot" ) {} + void runTest() { suite_CellTestSuite.test_single_dot(); } +} testDescription_suite_CellTestSuite_test_single_dot; + +static class TestDescription_suite_CellTestSuite_test_formula : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_formula() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 154, "test_formula" ) {} + void runTest() { suite_CellTestSuite.test_formula(); } +} testDescription_suite_CellTestSuite_test_formula; + +static class TestDescription_suite_CellTestSuite_test_boolean : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_boolean() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 163, "test_boolean" ) {} + void runTest() { suite_CellTestSuite.test_boolean(); } +} testDescription_suite_CellTestSuite_test_boolean; + +static class TestDescription_suite_CellTestSuite_test_leading_zero : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_leading_zero() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 174, "test_leading_zero" ) {} + void runTest() { suite_CellTestSuite.test_leading_zero(); } +} testDescription_suite_CellTestSuite_test_leading_zero; + +static class TestDescription_suite_CellTestSuite_test_data_type_check : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_data_type_check() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 195, "test_data_type_check" ) {} + void runTest() { suite_CellTestSuite.test_data_type_check(); } +} testDescription_suite_CellTestSuite_test_data_type_check; + +static class TestDescription_suite_CellTestSuite_test_set_bad_type : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_set_bad_type() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 214, "test_set_bad_type" ) {} + void runTest() { suite_CellTestSuite.test_set_bad_type(); } +} testDescription_suite_CellTestSuite_test_set_bad_type; + +static class TestDescription_suite_CellTestSuite_test_time : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_time() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 224, "test_time" ) {} + void runTest() { suite_CellTestSuite.test_time(); } +} testDescription_suite_CellTestSuite_test_time; + +static class TestDescription_suite_CellTestSuite_test_date_format_on_non_date : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_date_format_on_non_date() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 253, "test_date_format_on_non_date" ) {} + void runTest() { suite_CellTestSuite.test_date_format_on_non_date(); } +} testDescription_suite_CellTestSuite_test_date_format_on_non_date; + +static class TestDescription_suite_CellTestSuite_test_set_get_date : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_set_get_date() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 265, "test_set_get_date" ) {} + void runTest() { suite_CellTestSuite.test_set_get_date(); } +} testDescription_suite_CellTestSuite_test_set_get_date; + +static class TestDescription_suite_CellTestSuite_test_repr : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_repr() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 281, "test_repr" ) {} + void runTest() { suite_CellTestSuite.test_repr(); } +} testDescription_suite_CellTestSuite_test_repr; + +static class TestDescription_suite_CellTestSuite_test_is_date : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_is_date() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 289, "test_is_date" ) {} + void runTest() { suite_CellTestSuite.test_is_date(); } +} testDescription_suite_CellTestSuite_test_is_date; + +static class TestDescription_suite_CellTestSuite_test_is_not_date_color_format : public CxxTest::RealTestDescription { +public: + TestDescription_suite_CellTestSuite_test_is_not_date_color_format() : CxxTest::RealTestDescription( Tests_CellTestSuite, suiteDescription_CellTestSuite, 306, "test_is_not_date_color_format" ) {} + void runTest() { suite_CellTestSuite.test_is_not_date_color_format(); } +} testDescription_suite_CellTestSuite_test_is_not_date_color_format; + +#include "C:\Users\taf656\Development\xlnt\source\tests\ChartTestSuite.h" + +static ChartTestSuite suite_ChartTestSuite; + +static CxxTest::List Tests_ChartTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_ChartTestSuite( "../../source/tests/ChartTestSuite.h", 9, "ChartTestSuite", suite_ChartTestSuite, Tests_ChartTestSuite ); + +static class TestDescription_suite_ChartTestSuite_test_write_title : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_write_title() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 37, "test_write_title" ) {} + void runTest() { suite_ChartTestSuite.test_write_title(); } +} testDescription_suite_ChartTestSuite_test_write_title; + +static class TestDescription_suite_ChartTestSuite_test_write_xaxis : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_write_xaxis() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 45, "test_write_xaxis" ) {} + void runTest() { suite_ChartTestSuite.test_write_xaxis(); } +} testDescription_suite_ChartTestSuite_test_write_xaxis; + +static class TestDescription_suite_ChartTestSuite_test_write_yaxis : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_write_yaxis() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 53, "test_write_yaxis" ) {} + void runTest() { suite_ChartTestSuite.test_write_yaxis(); } +} testDescription_suite_ChartTestSuite_test_write_yaxis; + +static class TestDescription_suite_ChartTestSuite_test_write_series : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_write_series() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 61, "test_write_series" ) {} + void runTest() { suite_ChartTestSuite.test_write_series(); } +} testDescription_suite_ChartTestSuite_test_write_series; + +static class TestDescription_suite_ChartTestSuite_test_write_legend : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_write_legend() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 67, "test_write_legend" ) {} + void runTest() { suite_ChartTestSuite.test_write_legend(); } +} testDescription_suite_ChartTestSuite_test_write_legend; + +static class TestDescription_suite_ChartTestSuite_test_no_write_legend : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_no_write_legend() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 73, "test_no_write_legend" ) {} + void runTest() { suite_ChartTestSuite.test_no_write_legend(); } +} testDescription_suite_ChartTestSuite_test_no_write_legend; + +static class TestDescription_suite_ChartTestSuite_test_write_print_settings : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_write_print_settings() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 93, "test_write_print_settings" ) {} + void runTest() { suite_ChartTestSuite.test_write_print_settings(); } +} testDescription_suite_ChartTestSuite_test_write_print_settings; + +static class TestDescription_suite_ChartTestSuite_test_write_chart : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_write_chart() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 99, "test_write_chart" ) {} + void runTest() { suite_ChartTestSuite.test_write_chart(); } +} testDescription_suite_ChartTestSuite_test_write_chart; + +static class TestDescription_suite_ChartTestSuite_test_write_xaxis_scatter : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_write_xaxis_scatter() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 124, "test_write_xaxis_scatter" ) {} + void runTest() { suite_ChartTestSuite.test_write_xaxis_scatter(); } +} testDescription_suite_ChartTestSuite_test_write_xaxis_scatter; + +static class TestDescription_suite_ChartTestSuite_test_write_yaxis_scatter : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_write_yaxis_scatter() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 131, "test_write_yaxis_scatter" ) {} + void runTest() { suite_ChartTestSuite.test_write_yaxis_scatter(); } +} testDescription_suite_ChartTestSuite_test_write_yaxis_scatter; + +static class TestDescription_suite_ChartTestSuite_test_write_series_scatter : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_write_series_scatter() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 138, "test_write_series_scatter" ) {} + void runTest() { suite_ChartTestSuite.test_write_series_scatter(); } +} testDescription_suite_ChartTestSuite_test_write_series_scatter; + +static class TestDescription_suite_ChartTestSuite_test_write_legend_scatter : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_write_legend_scatter() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 144, "test_write_legend_scatter" ) {} + void runTest() { suite_ChartTestSuite.test_write_legend_scatter(); } +} testDescription_suite_ChartTestSuite_test_write_legend_scatter; + +static class TestDescription_suite_ChartTestSuite_test_write_print_settings_scatter : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_write_print_settings_scatter() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 150, "test_write_print_settings_scatter" ) {} + void runTest() { suite_ChartTestSuite.test_write_print_settings_scatter(); } +} testDescription_suite_ChartTestSuite_test_write_print_settings_scatter; + +static class TestDescription_suite_ChartTestSuite_test_write_chart_scatter : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ChartTestSuite_test_write_chart_scatter() : CxxTest::RealTestDescription( Tests_ChartTestSuite, suiteDescription_ChartTestSuite, 156, "test_write_chart_scatter" ) {} + void runTest() { suite_ChartTestSuite.test_write_chart_scatter(); } +} testDescription_suite_ChartTestSuite_test_write_chart_scatter; + +#include "C:\Users\taf656\Development\xlnt\source\tests\DumpTestSuite.h" + +static DumpTestSuite suite_DumpTestSuite; + +static CxxTest::List Tests_DumpTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_DumpTestSuite( "../../source/tests/DumpTestSuite.h", 9, "DumpTestSuite", suite_DumpTestSuite, Tests_DumpTestSuite ); + +static class TestDescription_suite_DumpTestSuite_test_dump_sheet_title : public CxxTest::RealTestDescription { +public: + TestDescription_suite_DumpTestSuite_test_dump_sheet_title() : CxxTest::RealTestDescription( Tests_DumpTestSuite, suiteDescription_DumpTestSuite, 26, "test_dump_sheet_title" ) {} + void runTest() { suite_DumpTestSuite.test_dump_sheet_title(); } +} testDescription_suite_DumpTestSuite_test_dump_sheet_title; + +static class TestDescription_suite_DumpTestSuite_test_dump_sheet : public CxxTest::RealTestDescription { +public: + TestDescription_suite_DumpTestSuite_test_dump_sheet() : CxxTest::RealTestDescription( Tests_DumpTestSuite, suiteDescription_DumpTestSuite, 37, "test_dump_sheet" ) {} + void runTest() { suite_DumpTestSuite.test_dump_sheet(); } +} testDescription_suite_DumpTestSuite_test_dump_sheet; + +static class TestDescription_suite_DumpTestSuite_test_table_builder : public CxxTest::RealTestDescription { +public: + TestDescription_suite_DumpTestSuite_test_table_builder() : CxxTest::RealTestDescription( Tests_DumpTestSuite, suiteDescription_DumpTestSuite, 82, "test_table_builder" ) {} + void runTest() { suite_DumpTestSuite.test_table_builder(); } +} testDescription_suite_DumpTestSuite_test_table_builder; + +static class TestDescription_suite_DumpTestSuite_test_open_too_many_files : public CxxTest::RealTestDescription { +public: + TestDescription_suite_DumpTestSuite_test_open_too_many_files() : CxxTest::RealTestDescription( Tests_DumpTestSuite, suiteDescription_DumpTestSuite, 109, "test_open_too_many_files" ) {} + void runTest() { suite_DumpTestSuite.test_open_too_many_files(); } +} testDescription_suite_DumpTestSuite_test_open_too_many_files; + +static class TestDescription_suite_DumpTestSuite_test_create_temp_file : public CxxTest::RealTestDescription { +public: + TestDescription_suite_DumpTestSuite_test_create_temp_file() : CxxTest::RealTestDescription( Tests_DumpTestSuite, suiteDescription_DumpTestSuite, 122, "test_create_temp_file" ) {} + void runTest() { suite_DumpTestSuite.test_create_temp_file(); } +} testDescription_suite_DumpTestSuite_test_create_temp_file; + +static class TestDescription_suite_DumpTestSuite_test_dump_twice : public CxxTest::RealTestDescription { +public: + TestDescription_suite_DumpTestSuite_test_dump_twice() : CxxTest::RealTestDescription( Tests_DumpTestSuite, suiteDescription_DumpTestSuite, 132, "test_dump_twice" ) {} + void runTest() { suite_DumpTestSuite.test_dump_twice(); } +} testDescription_suite_DumpTestSuite_test_dump_twice; + +static class TestDescription_suite_DumpTestSuite_test_append_after_save : public CxxTest::RealTestDescription { +public: + TestDescription_suite_DumpTestSuite_test_append_after_save() : CxxTest::RealTestDescription( Tests_DumpTestSuite, suiteDescription_DumpTestSuite, 146, "test_append_after_save" ) {} + void runTest() { suite_DumpTestSuite.test_append_after_save(); } +} testDescription_suite_DumpTestSuite_test_append_after_save; + +#include "C:\Users\taf656\Development\xlnt\source\tests\IntegrationTestSuite.h" static IntegrationTestSuite suite_IntegrationTestSuite; static CxxTest::List Tests_IntegrationTestSuite = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_IntegrationTestSuite( "../../source/tests/integration/IntegrationTestSuite.h", 9, "IntegrationTestSuite", suite_IntegrationTestSuite, Tests_IntegrationTestSuite ); +CxxTest::StaticSuiteDescription suiteDescription_IntegrationTestSuite( "../../source/tests/IntegrationTestSuite.h", 10, "IntegrationTestSuite", suite_IntegrationTestSuite, Tests_IntegrationTestSuite ); static class TestDescription_suite_IntegrationTestSuite_test_1 : public CxxTest::RealTestDescription { public: - TestDescription_suite_IntegrationTestSuite_test_1() : CxxTest::RealTestDescription( Tests_IntegrationTestSuite, suiteDescription_IntegrationTestSuite, 17, "test_1" ) {} + TestDescription_suite_IntegrationTestSuite_test_1() : CxxTest::RealTestDescription( Tests_IntegrationTestSuite, suiteDescription_IntegrationTestSuite, 18, "test_1" ) {} void runTest() { suite_IntegrationTestSuite.test_1(); } } testDescription_suite_IntegrationTestSuite_test_1; -#include "C:\Users\taf656\Development\xlnt\source\tests\packaging\NullableTestSuite.h" +#include "C:\Users\taf656\Development\xlnt\source\tests\IterTestSuite.h" + +static IterTestSuite suite_IterTestSuite; + +static CxxTest::List Tests_IterTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_IterTestSuite( "../../source/tests/IterTestSuite.h", 9, "IterTestSuite", suite_IterTestSuite, Tests_IterTestSuite ); + +static class TestDescription_suite_IterTestSuite_test_1 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_IterTestSuite_test_1() : CxxTest::RealTestDescription( Tests_IterTestSuite, suiteDescription_IterTestSuite, 17, "test_1" ) {} + void runTest() { suite_IterTestSuite.test_1(); } +} testDescription_suite_IterTestSuite_test_1; + +static class TestDescription_suite_IterTestSuite_test_get_dimensions : public CxxTest::RealTestDescription { +public: + TestDescription_suite_IterTestSuite_test_get_dimensions() : CxxTest::RealTestDescription( Tests_IterTestSuite, suiteDescription_IterTestSuite, 22, "test_get_dimensions" ) {} + void runTest() { suite_IterTestSuite.test_get_dimensions(); } +} testDescription_suite_IterTestSuite_test_get_dimensions; + +static class TestDescription_suite_IterTestSuite_test_read_fast_integrated : public CxxTest::RealTestDescription { +public: + TestDescription_suite_IterTestSuite_test_read_fast_integrated() : CxxTest::RealTestDescription( Tests_IterTestSuite, suiteDescription_IterTestSuite, 34, "test_read_fast_integrated" ) {} + void runTest() { suite_IterTestSuite.test_read_fast_integrated(); } +} testDescription_suite_IterTestSuite_test_read_fast_integrated; + +static class TestDescription_suite_IterTestSuite_test_get_boundaries_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_IterTestSuite_test_get_boundaries_range() : CxxTest::RealTestDescription( Tests_IterTestSuite, suiteDescription_IterTestSuite, 54, "test_get_boundaries_range" ) {} + void runTest() { suite_IterTestSuite.test_get_boundaries_range(); } +} testDescription_suite_IterTestSuite_test_get_boundaries_range; + +static class TestDescription_suite_IterTestSuite_test_get_boundaries_one : public CxxTest::RealTestDescription { +public: + TestDescription_suite_IterTestSuite_test_get_boundaries_one() : CxxTest::RealTestDescription( Tests_IterTestSuite, suiteDescription_IterTestSuite, 59, "test_get_boundaries_one" ) {} + void runTest() { suite_IterTestSuite.test_get_boundaries_one(); } +} testDescription_suite_IterTestSuite_test_get_boundaries_one; + +static class TestDescription_suite_IterTestSuite_test_read_single_cell_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_IterTestSuite_test_read_single_cell_range() : CxxTest::RealTestDescription( Tests_IterTestSuite, suiteDescription_IterTestSuite, 64, "test_read_single_cell_range" ) {} + void runTest() { suite_IterTestSuite.test_read_single_cell_range(); } +} testDescription_suite_IterTestSuite_test_read_single_cell_range; + +static class TestDescription_suite_IterTestSuite_test_read_fast_integrated2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_IterTestSuite_test_read_fast_integrated2() : CxxTest::RealTestDescription( Tests_IterTestSuite, suiteDescription_IterTestSuite, 72, "test_read_fast_integrated2" ) {} + void runTest() { suite_IterTestSuite.test_read_fast_integrated2(); } +} testDescription_suite_IterTestSuite_test_read_fast_integrated2; + +static class TestDescription_suite_IterTestSuite_test_read_single_cell_date : public CxxTest::RealTestDescription { +public: + TestDescription_suite_IterTestSuite_test_read_single_cell_date() : CxxTest::RealTestDescription( Tests_IterTestSuite, suiteDescription_IterTestSuite, 90, "test_read_single_cell_date" ) {} + void runTest() { suite_IterTestSuite.test_read_single_cell_date(); } +} testDescription_suite_IterTestSuite_test_read_single_cell_date; + +#include "C:\Users\taf656\Development\xlnt\source\tests\MetaTestSuite.h" + +static MetaTestSuite suite_MetaTestSuite; + +static CxxTest::List Tests_MetaTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_MetaTestSuite( "../../source/tests/MetaTestSuite.h", 9, "MetaTestSuite", suite_MetaTestSuite, Tests_MetaTestSuite ); + +static class TestDescription_suite_MetaTestSuite_test_write_content_types : public CxxTest::RealTestDescription { +public: + TestDescription_suite_MetaTestSuite_test_write_content_types() : CxxTest::RealTestDescription( Tests_MetaTestSuite, suiteDescription_MetaTestSuite, 17, "test_write_content_types" ) {} + void runTest() { suite_MetaTestSuite.test_write_content_types(); } +} testDescription_suite_MetaTestSuite_test_write_content_types; + +static class TestDescription_suite_MetaTestSuite_test_write_root_rels : public CxxTest::RealTestDescription { +public: + TestDescription_suite_MetaTestSuite_test_write_root_rels() : CxxTest::RealTestDescription( Tests_MetaTestSuite, suiteDescription_MetaTestSuite, 28, "test_write_root_rels" ) {} + void runTest() { suite_MetaTestSuite.test_write_root_rels(); } +} testDescription_suite_MetaTestSuite_test_write_root_rels; + +#include "C:\Users\taf656\Development\xlnt\source\tests\NamedRangeTestSuite.h" + +static NamedRangeTestSuite suite_NamedRangeTestSuite; + +static CxxTest::List Tests_NamedRangeTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_NamedRangeTestSuite( "../../source/tests/NamedRangeTestSuite.h", 9, "NamedRangeTestSuite", suite_NamedRangeTestSuite, Tests_NamedRangeTestSuite ); + +static class TestDescription_suite_NamedRangeTestSuite_test_split : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_split() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 17, "test_split" ) {} + void runTest() { suite_NamedRangeTestSuite.test_split(); } +} testDescription_suite_NamedRangeTestSuite_test_split; + +static class TestDescription_suite_NamedRangeTestSuite_test_split_no_quotes : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_split_no_quotes() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 22, "test_split_no_quotes" ) {} + void runTest() { suite_NamedRangeTestSuite.test_split_no_quotes(); } +} testDescription_suite_NamedRangeTestSuite_test_split_no_quotes; + +static class TestDescription_suite_NamedRangeTestSuite_test_bad_range_name : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_bad_range_name() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 27, "test_bad_range_name" ) {} + void runTest() { suite_NamedRangeTestSuite.test_bad_range_name(); } +} testDescription_suite_NamedRangeTestSuite_test_bad_range_name; + +static class TestDescription_suite_NamedRangeTestSuite_test_range_name_worksheet_special_chars : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_range_name_worksheet_special_chars() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 32, "test_range_name_worksheet_special_chars" ) {} + void runTest() { suite_NamedRangeTestSuite.test_range_name_worksheet_special_chars(); } +} testDescription_suite_NamedRangeTestSuite_test_range_name_worksheet_special_chars; + +static class TestDescription_suite_NamedRangeTestSuite_test_read_named_ranges : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_read_named_ranges() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 71, "test_read_named_ranges" ) {} + void runTest() { suite_NamedRangeTestSuite.test_read_named_ranges(); } +} testDescription_suite_NamedRangeTestSuite_test_read_named_ranges; + +static class TestDescription_suite_NamedRangeTestSuite_test_oddly_shaped_named_ranges : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_oddly_shaped_named_ranges() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 100, "test_oddly_shaped_named_ranges" ) {} + void runTest() { suite_NamedRangeTestSuite.test_oddly_shaped_named_ranges(); } +} testDescription_suite_NamedRangeTestSuite_test_oddly_shaped_named_ranges; + +static class TestDescription_suite_NamedRangeTestSuite_test_merged_cells_named_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_merged_cells_named_range() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 123, "test_merged_cells_named_range" ) {} + void runTest() { suite_NamedRangeTestSuite.test_merged_cells_named_range(); } +} testDescription_suite_NamedRangeTestSuite_test_merged_cells_named_range; + +static class TestDescription_suite_NamedRangeTestSuite_test_has_ranges : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_has_ranges() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 149, "test_has_ranges" ) {} + void runTest() { suite_NamedRangeTestSuite.test_has_ranges(); } +} testDescription_suite_NamedRangeTestSuite_test_has_ranges; + +static class TestDescription_suite_NamedRangeTestSuite_test_workbook_has_normal_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_workbook_has_normal_range() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 155, "test_workbook_has_normal_range" ) {} + void runTest() { suite_NamedRangeTestSuite.test_workbook_has_normal_range(); } +} testDescription_suite_NamedRangeTestSuite_test_workbook_has_normal_range; + +static class TestDescription_suite_NamedRangeTestSuite_test_workbook_has_value_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_workbook_has_value_range() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 161, "test_workbook_has_value_range" ) {} + void runTest() { suite_NamedRangeTestSuite.test_workbook_has_value_range(); } +} testDescription_suite_NamedRangeTestSuite_test_workbook_has_value_range; + +static class TestDescription_suite_NamedRangeTestSuite_test_worksheet_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_worksheet_range() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 168, "test_worksheet_range" ) {} + void runTest() { suite_NamedRangeTestSuite.test_worksheet_range(); } +} testDescription_suite_NamedRangeTestSuite_test_worksheet_range; + +static class TestDescription_suite_NamedRangeTestSuite_test_worksheet_range_error_on_value_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_worksheet_range_error_on_value_range() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 173, "test_worksheet_range_error_on_value_range" ) {} + void runTest() { suite_NamedRangeTestSuite.test_worksheet_range_error_on_value_range(); } +} testDescription_suite_NamedRangeTestSuite_test_worksheet_range_error_on_value_range; + +static class TestDescription_suite_NamedRangeTestSuite_test_handles_scope : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_handles_scope() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 200, "test_handles_scope" ) {} + void runTest() { suite_NamedRangeTestSuite.test_handles_scope(); } +} testDescription_suite_NamedRangeTestSuite_test_handles_scope; + +static class TestDescription_suite_NamedRangeTestSuite_test_can_be_saved : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NamedRangeTestSuite_test_can_be_saved() : CxxTest::RealTestDescription( Tests_NamedRangeTestSuite, suiteDescription_NamedRangeTestSuite, 207, "test_can_be_saved" ) {} + void runTest() { suite_NamedRangeTestSuite.test_can_be_saved(); } +} testDescription_suite_NamedRangeTestSuite_test_can_be_saved; + +#include "C:\Users\taf656\Development\xlnt\source\tests\NullableTestSuite.h" static NullableTestSuite suite_NullableTestSuite; static CxxTest::List Tests_NullableTestSuite = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_NullableTestSuite( "../../source/tests/packaging/NullableTestSuite.h", 8, "NullableTestSuite", suite_NullableTestSuite, Tests_NullableTestSuite ); +CxxTest::StaticSuiteDescription suiteDescription_NullableTestSuite( "../../source/tests/NullableTestSuite.h", 8, "NullableTestSuite", suite_NullableTestSuite, Tests_NullableTestSuite ); static class TestDescription_suite_NullableTestSuite_test_has_value : public CxxTest::RealTestDescription { public: @@ -71,37 +533,495 @@ public: void runTest() { suite_NullableTestSuite.test_copy_constructor(); } } testDescription_suite_NullableTestSuite_test_copy_constructor; -#include "C:\Users\taf656\Development\xlnt\source\tests\packaging\PackageTestSuite.h" +#include "C:\Users\taf656\Development\xlnt\source\tests\NumberFormatTestSuite.h" -static ZipPackageTestSuite suite_ZipPackageTestSuite; +static NumberFormatTestSuite suite_NumberFormatTestSuite; -static CxxTest::List Tests_ZipPackageTestSuite = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_ZipPackageTestSuite( "../../source/tests/packaging/PackageTestSuite.h", 9, "ZipPackageTestSuite", suite_ZipPackageTestSuite, Tests_ZipPackageTestSuite ); +static CxxTest::List Tests_NumberFormatTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_NumberFormatTestSuite( "../../source/tests/NumberFormatTestSuite.h", 9, "NumberFormatTestSuite", suite_NumberFormatTestSuite, Tests_NumberFormatTestSuite ); -static class TestDescription_suite_ZipPackageTestSuite_test_read_text : public CxxTest::RealTestDescription { +static class TestDescription_suite_NumberFormatTestSuite_test_convert_date_to_julian : public CxxTest::RealTestDescription { public: - TestDescription_suite_ZipPackageTestSuite_test_read_text() : CxxTest::RealTestDescription( Tests_ZipPackageTestSuite, suiteDescription_ZipPackageTestSuite, 17, "test_read_text" ) {} - void runTest() { suite_ZipPackageTestSuite.test_read_text(); } -} testDescription_suite_ZipPackageTestSuite_test_read_text; + TestDescription_suite_NumberFormatTestSuite_test_convert_date_to_julian() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 24, "test_convert_date_to_julian" ) {} + void runTest() { suite_NumberFormatTestSuite.test_convert_date_to_julian(); } +} testDescription_suite_NumberFormatTestSuite_test_convert_date_to_julian; -static class TestDescription_suite_ZipPackageTestSuite_test_write_text : public CxxTest::RealTestDescription { +static class TestDescription_suite_NumberFormatTestSuite_test_convert_date_from_julian : public CxxTest::RealTestDescription { public: - TestDescription_suite_ZipPackageTestSuite_test_write_text() : CxxTest::RealTestDescription( Tests_ZipPackageTestSuite, suiteDescription_ZipPackageTestSuite, 29, "test_write_text" ) {} - void runTest() { suite_ZipPackageTestSuite.test_write_text(); } -} testDescription_suite_ZipPackageTestSuite_test_write_text; + TestDescription_suite_NumberFormatTestSuite_test_convert_date_from_julian() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 29, "test_convert_date_from_julian" ) {} + void runTest() { suite_NumberFormatTestSuite.test_convert_date_from_julian(); } +} testDescription_suite_NumberFormatTestSuite_test_convert_date_from_julian; -static class TestDescription_suite_ZipPackageTestSuite_test_read_xml : public CxxTest::RealTestDescription { +static class TestDescription_suite_NumberFormatTestSuite_test_convert_datetime_to_julian : public CxxTest::RealTestDescription { public: - TestDescription_suite_ZipPackageTestSuite_test_read_xml() : CxxTest::RealTestDescription( Tests_ZipPackageTestSuite, suiteDescription_ZipPackageTestSuite, 54, "test_read_xml" ) {} - void runTest() { suite_ZipPackageTestSuite.test_read_xml(); } -} testDescription_suite_ZipPackageTestSuite_test_read_xml; + TestDescription_suite_NumberFormatTestSuite_test_convert_datetime_to_julian() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 48, "test_convert_datetime_to_julian" ) {} + void runTest() { suite_NumberFormatTestSuite.test_convert_datetime_to_julian(); } +} testDescription_suite_NumberFormatTestSuite_test_convert_datetime_to_julian; -#include "C:\Users\taf656\Development\xlnt\source\tests\packaging\UriTestSuite.h" +static class TestDescription_suite_NumberFormatTestSuite_test_insert_float : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NumberFormatTestSuite_test_insert_float() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 54, "test_insert_float" ) {} + void runTest() { suite_NumberFormatTestSuite.test_insert_float(); } +} testDescription_suite_NumberFormatTestSuite_test_insert_float; + +static class TestDescription_suite_NumberFormatTestSuite_test_insert_percentage : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NumberFormatTestSuite_test_insert_percentage() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 60, "test_insert_percentage" ) {} + void runTest() { suite_NumberFormatTestSuite.test_insert_percentage(); } +} testDescription_suite_NumberFormatTestSuite_test_insert_percentage; + +static class TestDescription_suite_NumberFormatTestSuite_test_insert_datetime : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NumberFormatTestSuite_test_insert_datetime() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 67, "test_insert_datetime" ) {} + void runTest() { suite_NumberFormatTestSuite.test_insert_datetime(); } +} testDescription_suite_NumberFormatTestSuite_test_insert_datetime; + +static class TestDescription_suite_NumberFormatTestSuite_test_insert_date : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NumberFormatTestSuite_test_insert_date() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 73, "test_insert_date" ) {} + void runTest() { suite_NumberFormatTestSuite.test_insert_date(); } +} testDescription_suite_NumberFormatTestSuite_test_insert_date; + +static class TestDescription_suite_NumberFormatTestSuite_test_internal_date : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NumberFormatTestSuite_test_internal_date() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 79, "test_internal_date" ) {} + void runTest() { suite_NumberFormatTestSuite.test_internal_date(); } +} testDescription_suite_NumberFormatTestSuite_test_internal_date; + +static class TestDescription_suite_NumberFormatTestSuite_test_datetime_interpretation : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NumberFormatTestSuite_test_datetime_interpretation() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 86, "test_datetime_interpretation" ) {} + void runTest() { suite_NumberFormatTestSuite.test_datetime_interpretation(); } +} testDescription_suite_NumberFormatTestSuite_test_datetime_interpretation; + +static class TestDescription_suite_NumberFormatTestSuite_test_date_interpretation : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NumberFormatTestSuite_test_date_interpretation() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 93, "test_date_interpretation" ) {} + void runTest() { suite_NumberFormatTestSuite.test_date_interpretation(); } +} testDescription_suite_NumberFormatTestSuite_test_date_interpretation; + +static class TestDescription_suite_NumberFormatTestSuite_test_number_format_style : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NumberFormatTestSuite_test_number_format_style() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 100, "test_number_format_style" ) {} + void runTest() { suite_NumberFormatTestSuite.test_number_format_style(); } +} testDescription_suite_NumberFormatTestSuite_test_number_format_style; + +static class TestDescription_suite_NumberFormatTestSuite_test_date_format_on_non_date : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NumberFormatTestSuite_test_date_format_on_non_date() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 107, "test_date_format_on_non_date" ) {} + void runTest() { suite_NumberFormatTestSuite.test_date_format_on_non_date(); } +} testDescription_suite_NumberFormatTestSuite_test_date_format_on_non_date; + +static class TestDescription_suite_NumberFormatTestSuite_test_1900_leap_year : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NumberFormatTestSuite_test_1900_leap_year() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 129, "test_1900_leap_year" ) {} + void runTest() { suite_NumberFormatTestSuite.test_1900_leap_year(); } +} testDescription_suite_NumberFormatTestSuite_test_1900_leap_year; + +static class TestDescription_suite_NumberFormatTestSuite_test_bad_date : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NumberFormatTestSuite_test_bad_date() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 135, "test_bad_date" ) {} + void runTest() { suite_NumberFormatTestSuite.test_bad_date(); } +} testDescription_suite_NumberFormatTestSuite_test_bad_date; + +static class TestDescription_suite_NumberFormatTestSuite_test_bad_julian_date : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NumberFormatTestSuite_test_bad_julian_date() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 149, "test_bad_julian_date" ) {} + void runTest() { suite_NumberFormatTestSuite.test_bad_julian_date(); } +} testDescription_suite_NumberFormatTestSuite_test_bad_julian_date; + +static class TestDescription_suite_NumberFormatTestSuite_test_mac_date : public CxxTest::RealTestDescription { +public: + TestDescription_suite_NumberFormatTestSuite_test_mac_date() : CxxTest::RealTestDescription( Tests_NumberFormatTestSuite, suiteDescription_NumberFormatTestSuite, 154, "test_mac_date" ) {} + void runTest() { suite_NumberFormatTestSuite.test_mac_date(); } +} testDescription_suite_NumberFormatTestSuite_test_mac_date; + +#include "C:\Users\taf656\Development\xlnt\source\tests\PackageTestSuite.h" + +static PackageTestSuite suite_PackageTestSuite; + +static CxxTest::List Tests_PackageTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_PackageTestSuite( "../../source/tests/PackageTestSuite.h", 9, "PackageTestSuite", suite_PackageTestSuite, Tests_PackageTestSuite ); + +static class TestDescription_suite_PackageTestSuite_test_read_text : public CxxTest::RealTestDescription { +public: + TestDescription_suite_PackageTestSuite_test_read_text() : CxxTest::RealTestDescription( Tests_PackageTestSuite, suiteDescription_PackageTestSuite, 17, "test_read_text" ) {} + void runTest() { suite_PackageTestSuite.test_read_text(); } +} testDescription_suite_PackageTestSuite_test_read_text; + +static class TestDescription_suite_PackageTestSuite_test_write_text : public CxxTest::RealTestDescription { +public: + TestDescription_suite_PackageTestSuite_test_write_text() : CxxTest::RealTestDescription( Tests_PackageTestSuite, suiteDescription_PackageTestSuite, 29, "test_write_text" ) {} + void runTest() { suite_PackageTestSuite.test_write_text(); } +} testDescription_suite_PackageTestSuite_test_write_text; + +static class TestDescription_suite_PackageTestSuite_test_read_xml : public CxxTest::RealTestDescription { +public: + TestDescription_suite_PackageTestSuite_test_read_xml() : CxxTest::RealTestDescription( Tests_PackageTestSuite, suiteDescription_PackageTestSuite, 54, "test_read_xml" ) {} + void runTest() { suite_PackageTestSuite.test_read_xml(); } +} testDescription_suite_PackageTestSuite_test_read_xml; + +#include "C:\Users\taf656\Development\xlnt\source\tests\PasswordHashTestSuite.h" + +static PasswordHashTestSuite suite_PasswordHashTestSuite; + +static CxxTest::List Tests_PasswordHashTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_PasswordHashTestSuite( "../../source/tests/PasswordHashTestSuite.h", 9, "PasswordHashTestSuite", suite_PasswordHashTestSuite, Tests_PasswordHashTestSuite ); + +static class TestDescription_suite_PasswordHashTestSuite_test_hasher : public CxxTest::RealTestDescription { +public: + TestDescription_suite_PasswordHashTestSuite_test_hasher() : CxxTest::RealTestDescription( Tests_PasswordHashTestSuite, suiteDescription_PasswordHashTestSuite, 17, "test_hasher" ) {} + void runTest() { suite_PasswordHashTestSuite.test_hasher(); } +} testDescription_suite_PasswordHashTestSuite_test_hasher; + +static class TestDescription_suite_PasswordHashTestSuite_test_sheet_protection : public CxxTest::RealTestDescription { +public: + TestDescription_suite_PasswordHashTestSuite_test_sheet_protection() : CxxTest::RealTestDescription( Tests_PasswordHashTestSuite, suiteDescription_PasswordHashTestSuite, 22, "test_sheet_protection" ) {} + void runTest() { suite_PasswordHashTestSuite.test_sheet_protection(); } +} testDescription_suite_PasswordHashTestSuite_test_sheet_protection; + +#include "C:\Users\taf656\Development\xlnt\source\tests\PropsTestSuite.h" + +static PropsTestSuite suite_PropsTestSuite; + +static CxxTest::List Tests_PropsTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_PropsTestSuite( "../../source/tests/PropsTestSuite.h", 9, "PropsTestSuite", suite_PropsTestSuite, Tests_PropsTestSuite ); + +static class TestDescription_suite_PropsTestSuite_test_1 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_PropsTestSuite_test_1() : CxxTest::RealTestDescription( Tests_PropsTestSuite, suiteDescription_PropsTestSuite, 17, "test_1" ) {} + void runTest() { suite_PropsTestSuite.test_1(); } +} testDescription_suite_PropsTestSuite_test_1; + +static class TestDescription_suite_PropsTestSuite_test_read_properties_core : public CxxTest::RealTestDescription { +public: + TestDescription_suite_PropsTestSuite_test_read_properties_core() : CxxTest::RealTestDescription( Tests_PropsTestSuite, suiteDescription_PropsTestSuite, 36, "test_read_properties_core" ) {} + void runTest() { suite_PropsTestSuite.test_read_properties_core(); } +} testDescription_suite_PropsTestSuite_test_read_properties_core; + +static class TestDescription_suite_PropsTestSuite_test_read_sheets_titles : public CxxTest::RealTestDescription { +public: + TestDescription_suite_PropsTestSuite_test_read_sheets_titles() : CxxTest::RealTestDescription( Tests_PropsTestSuite, suiteDescription_PropsTestSuite, 47, "test_read_sheets_titles" ) {} + void runTest() { suite_PropsTestSuite.test_read_sheets_titles(); } +} testDescription_suite_PropsTestSuite_test_read_sheets_titles; + +static class TestDescription_suite_PropsTestSuite_test_read_properties_core2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_PropsTestSuite_test_read_properties_core2() : CxxTest::RealTestDescription( Tests_PropsTestSuite, suiteDescription_PropsTestSuite, 68, "test_read_properties_core2" ) {} + void runTest() { suite_PropsTestSuite.test_read_properties_core2(); } +} testDescription_suite_PropsTestSuite_test_read_properties_core2; + +static class TestDescription_suite_PropsTestSuite_test_read_sheets_titles2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_PropsTestSuite_test_read_sheets_titles2() : CxxTest::RealTestDescription( Tests_PropsTestSuite, suiteDescription_PropsTestSuite, 75, "test_read_sheets_titles2" ) {} + void runTest() { suite_PropsTestSuite.test_read_sheets_titles2(); } +} testDescription_suite_PropsTestSuite_test_read_sheets_titles2; + +static class TestDescription_suite_PropsTestSuite_test_write_properties_core : public CxxTest::RealTestDescription { +public: + TestDescription_suite_PropsTestSuite_test_write_properties_core() : CxxTest::RealTestDescription( Tests_PropsTestSuite, suiteDescription_PropsTestSuite, 95, "test_write_properties_core" ) {} + void runTest() { suite_PropsTestSuite.test_write_properties_core(); } +} testDescription_suite_PropsTestSuite_test_write_properties_core; + +static class TestDescription_suite_PropsTestSuite_test_write_properties_app : public CxxTest::RealTestDescription { +public: + TestDescription_suite_PropsTestSuite_test_write_properties_app() : CxxTest::RealTestDescription( Tests_PropsTestSuite, suiteDescription_PropsTestSuite, 107, "test_write_properties_app" ) {} + void runTest() { suite_PropsTestSuite.test_write_properties_app(); } +} testDescription_suite_PropsTestSuite_test_write_properties_app; + +#include "C:\Users\taf656\Development\xlnt\source\tests\ReadTestSuite.h" + +static ReadTestSuite suite_ReadTestSuite; + +static CxxTest::List Tests_ReadTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_ReadTestSuite( "../../source/tests/ReadTestSuite.h", 9, "ReadTestSuite", suite_ReadTestSuite, Tests_ReadTestSuite ); + +static class TestDescription_suite_ReadTestSuite_test_read_standalone_worksheet : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_standalone_worksheet() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 17, "test_read_standalone_worksheet" ) {} + void runTest() { suite_ReadTestSuite.test_read_standalone_worksheet(); } +} testDescription_suite_ReadTestSuite_test_read_standalone_worksheet; + +static class TestDescription_suite_ReadTestSuite_test_read_standard_workbook : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_standard_workbook() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 33, "test_read_standard_workbook" ) {} + void runTest() { suite_ReadTestSuite.test_read_standard_workbook(); } +} testDescription_suite_ReadTestSuite_test_read_standard_workbook; + +static class TestDescription_suite_ReadTestSuite_test_read_standard_workbook_from_fileobj : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_standard_workbook_from_fileobj() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 40, "test_read_standard_workbook_from_fileobj" ) {} + void runTest() { suite_ReadTestSuite.test_read_standard_workbook_from_fileobj(); } +} testDescription_suite_ReadTestSuite_test_read_standard_workbook_from_fileobj; + +static class TestDescription_suite_ReadTestSuite_test_read_worksheet : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_worksheet() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 48, "test_read_worksheet" ) {} + void runTest() { suite_ReadTestSuite.test_read_worksheet(); } +} testDescription_suite_ReadTestSuite_test_read_worksheet; + +static class TestDescription_suite_ReadTestSuite_test_read_nostring_workbook : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_nostring_workbook() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 58, "test_read_nostring_workbook" ) {} + void runTest() { suite_ReadTestSuite.test_read_nostring_workbook(); } +} testDescription_suite_ReadTestSuite_test_read_nostring_workbook; + +static class TestDescription_suite_ReadTestSuite_test_read_empty_file : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_empty_file() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 66, "test_read_empty_file" ) {} + void runTest() { suite_ReadTestSuite.test_read_empty_file(); } +} testDescription_suite_ReadTestSuite_test_read_empty_file; + +static class TestDescription_suite_ReadTestSuite_test_read_empty_archive : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_empty_archive() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 73, "test_read_empty_archive" ) {} + void runTest() { suite_ReadTestSuite.test_read_empty_archive(); } +} testDescription_suite_ReadTestSuite_test_read_empty_archive; + +static class TestDescription_suite_ReadTestSuite_test_read_dimension : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_dimension() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 79, "test_read_dimension" ) {} + void runTest() { suite_ReadTestSuite.test_read_dimension(); } +} testDescription_suite_ReadTestSuite_test_read_dimension; + +static class TestDescription_suite_ReadTestSuite_test_calculate_dimension_iter : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_calculate_dimension_iter() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 93, "test_calculate_dimension_iter" ) {} + void runTest() { suite_ReadTestSuite.test_calculate_dimension_iter(); } +} testDescription_suite_ReadTestSuite_test_calculate_dimension_iter; + +static class TestDescription_suite_ReadTestSuite_test_get_highest_row_iter : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_get_highest_row_iter() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 102, "test_get_highest_row_iter" ) {} + void runTest() { suite_ReadTestSuite.test_get_highest_row_iter(); } +} testDescription_suite_ReadTestSuite_test_get_highest_row_iter; + +static class TestDescription_suite_ReadTestSuite_test_read_workbook_with_no_properties : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_workbook_with_no_properties() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 111, "test_read_workbook_with_no_properties" ) {} + void runTest() { suite_ReadTestSuite.test_read_workbook_with_no_properties(); } +} testDescription_suite_ReadTestSuite_test_read_workbook_with_no_properties; + +static class TestDescription_suite_ReadTestSuite_test_read_general_style : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_general_style() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 126, "test_read_general_style" ) {} + void runTest() { suite_ReadTestSuite.test_read_general_style(); } +} testDescription_suite_ReadTestSuite_test_read_general_style; + +static class TestDescription_suite_ReadTestSuite_test_read_date_style : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_date_style() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 132, "test_read_date_style" ) {} + void runTest() { suite_ReadTestSuite.test_read_date_style(); } +} testDescription_suite_ReadTestSuite_test_read_date_style; + +static class TestDescription_suite_ReadTestSuite_test_read_number_style : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_number_style() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 138, "test_read_number_style" ) {} + void runTest() { suite_ReadTestSuite.test_read_number_style(); } +} testDescription_suite_ReadTestSuite_test_read_number_style; + +static class TestDescription_suite_ReadTestSuite_test_read_time_style : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_time_style() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 144, "test_read_time_style" ) {} + void runTest() { suite_ReadTestSuite.test_read_time_style(); } +} testDescription_suite_ReadTestSuite_test_read_time_style; + +static class TestDescription_suite_ReadTestSuite_test_read_percentage_style : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_percentage_style() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 150, "test_read_percentage_style" ) {} + void runTest() { suite_ReadTestSuite.test_read_percentage_style(); } +} testDescription_suite_ReadTestSuite_test_read_percentage_style; + +static class TestDescription_suite_ReadTestSuite_test_read_win_base_date : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_win_base_date() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 167, "test_read_win_base_date" ) {} + void runTest() { suite_ReadTestSuite.test_read_win_base_date(); } +} testDescription_suite_ReadTestSuite_test_read_win_base_date; + +static class TestDescription_suite_ReadTestSuite_test_read_mac_base_date : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_mac_base_date() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 172, "test_read_mac_base_date" ) {} + void runTest() { suite_ReadTestSuite.test_read_mac_base_date(); } +} testDescription_suite_ReadTestSuite_test_read_mac_base_date; + +static class TestDescription_suite_ReadTestSuite_test_read_date_style_mac : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_date_style_mac() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 177, "test_read_date_style_mac" ) {} + void runTest() { suite_ReadTestSuite.test_read_date_style_mac(); } +} testDescription_suite_ReadTestSuite_test_read_date_style_mac; + +static class TestDescription_suite_ReadTestSuite_test_read_date_style_win : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_date_style_win() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 183, "test_read_date_style_win" ) {} + void runTest() { suite_ReadTestSuite.test_read_date_style_win(); } +} testDescription_suite_ReadTestSuite_test_read_date_style_win; + +static class TestDescription_suite_ReadTestSuite_test_read_date_value : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ReadTestSuite_test_read_date_value() : CxxTest::RealTestDescription( Tests_ReadTestSuite, suiteDescription_ReadTestSuite, 189, "test_read_date_value" ) {} + void runTest() { suite_ReadTestSuite.test_read_date_value(); } +} testDescription_suite_ReadTestSuite_test_read_date_value; + +#include "C:\Users\taf656\Development\xlnt\source\tests\StringsTestSuite.h" + +static StringsTestSuite suite_StringsTestSuite; + +static CxxTest::List Tests_StringsTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_StringsTestSuite( "../../source/tests/StringsTestSuite.h", 9, "StringsTestSuite", suite_StringsTestSuite, Tests_StringsTestSuite ); + +static class TestDescription_suite_StringsTestSuite_test_create_string_table : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StringsTestSuite_test_create_string_table() : CxxTest::RealTestDescription( Tests_StringsTestSuite, suiteDescription_StringsTestSuite, 17, "test_create_string_table" ) {} + void runTest() { suite_StringsTestSuite.test_create_string_table(); } +} testDescription_suite_StringsTestSuite_test_create_string_table; + +static class TestDescription_suite_StringsTestSuite_test_read_string_table : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StringsTestSuite_test_read_string_table() : CxxTest::RealTestDescription( Tests_StringsTestSuite, suiteDescription_StringsTestSuite, 28, "test_read_string_table" ) {} + void runTest() { suite_StringsTestSuite.test_read_string_table(); } +} testDescription_suite_StringsTestSuite_test_read_string_table; + +static class TestDescription_suite_StringsTestSuite_test_empty_string : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StringsTestSuite_test_empty_string() : CxxTest::RealTestDescription( Tests_StringsTestSuite, suiteDescription_StringsTestSuite, 39, "test_empty_string" ) {} + void runTest() { suite_StringsTestSuite.test_empty_string(); } +} testDescription_suite_StringsTestSuite_test_empty_string; + +static class TestDescription_suite_StringsTestSuite_test_formatted_string_table : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StringsTestSuite_test_formatted_string_table() : CxxTest::RealTestDescription( Tests_StringsTestSuite, suiteDescription_StringsTestSuite, 50, "test_formatted_string_table" ) {} + void runTest() { suite_StringsTestSuite.test_formatted_string_table(); } +} testDescription_suite_StringsTestSuite_test_formatted_string_table; + +#include "C:\Users\taf656\Development\xlnt\source\tests\StyleTestSuite.h" + +static StyleTestSuite suite_StyleTestSuite; + +static CxxTest::List Tests_StyleTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_StyleTestSuite( "../../source/tests/StyleTestSuite.h", 9, "StyleTestSuite", suite_StyleTestSuite, Tests_StyleTestSuite ); + +static class TestDescription_suite_StyleTestSuite_test_create_style_table : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_create_style_table() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 30, "test_create_style_table" ) {} + void runTest() { suite_StyleTestSuite.test_create_style_table(); } +} testDescription_suite_StyleTestSuite_test_create_style_table; + +static class TestDescription_suite_StyleTestSuite_test_write_style_table : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_write_style_table() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 35, "test_write_style_table" ) {} + void runTest() { suite_StyleTestSuite.test_write_style_table(); } +} testDescription_suite_StyleTestSuite_test_write_style_table; + +static class TestDescription_suite_StyleTestSuite_test_no_style : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_no_style() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 47, "test_no_style" ) {} + void runTest() { suite_StyleTestSuite.test_no_style(); } +} testDescription_suite_StyleTestSuite_test_no_style; + +static class TestDescription_suite_StyleTestSuite_test_nb_style : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_nb_style() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 54, "test_nb_style" ) {} + void runTest() { suite_StyleTestSuite.test_nb_style(); } +} testDescription_suite_StyleTestSuite_test_nb_style; + +static class TestDescription_suite_StyleTestSuite_test_style_unicity : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_style_unicity() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 68, "test_style_unicity" ) {} + void runTest() { suite_StyleTestSuite.test_style_unicity(); } +} testDescription_suite_StyleTestSuite_test_style_unicity; + +static class TestDescription_suite_StyleTestSuite_test_fonts : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_fonts() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 78, "test_fonts" ) {} + void runTest() { suite_StyleTestSuite.test_fonts(); } +} testDescription_suite_StyleTestSuite_test_fonts; + +static class TestDescription_suite_StyleTestSuite_test_fills : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_fills() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 92, "test_fills" ) {} + void runTest() { suite_StyleTestSuite.test_fills(); } +} testDescription_suite_StyleTestSuite_test_fills; + +static class TestDescription_suite_StyleTestSuite_test_borders : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_borders() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 101, "test_borders" ) {} + void runTest() { suite_StyleTestSuite.test_borders(); } +} testDescription_suite_StyleTestSuite_test_borders; + +static class TestDescription_suite_StyleTestSuite_test_write_cell_xfs_1 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_write_cell_xfs_1() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 110, "test_write_cell_xfs_1" ) {} + void runTest() { suite_StyleTestSuite.test_write_cell_xfs_1(); } +} testDescription_suite_StyleTestSuite_test_write_cell_xfs_1; + +static class TestDescription_suite_StyleTestSuite_test_alignment : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_alignment() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 124, "test_alignment" ) {} + void runTest() { suite_StyleTestSuite.test_alignment(); } +} testDescription_suite_StyleTestSuite_test_alignment; + +static class TestDescription_suite_StyleTestSuite_test_alignment_rotation : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_alignment_rotation() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 137, "test_alignment_rotation" ) {} + void runTest() { suite_StyleTestSuite.test_alignment_rotation(); } +} testDescription_suite_StyleTestSuite_test_alignment_rotation; + +static class TestDescription_suite_StyleTestSuite_test_format_comparisions : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_format_comparisions() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 152, "test_format_comparisions" ) {} + void runTest() { suite_StyleTestSuite.test_format_comparisions(); } +} testDescription_suite_StyleTestSuite_test_format_comparisions; + +static class TestDescription_suite_StyleTestSuite_test_builtin_format : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_builtin_format() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 167, "test_builtin_format" ) {} + void runTest() { suite_StyleTestSuite.test_builtin_format(); } +} testDescription_suite_StyleTestSuite_test_builtin_format; + +static class TestDescription_suite_StyleTestSuite_test_read_style : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_read_style() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 175, "test_read_style" ) {} + void runTest() { suite_StyleTestSuite.test_read_style(); } +} testDescription_suite_StyleTestSuite_test_read_style; + +static class TestDescription_suite_StyleTestSuite_test_read_cell_style : public CxxTest::RealTestDescription { +public: + TestDescription_suite_StyleTestSuite_test_read_cell_style() : CxxTest::RealTestDescription( Tests_StyleTestSuite, suiteDescription_StyleTestSuite, 192, "test_read_cell_style" ) {} + void runTest() { suite_StyleTestSuite.test_read_cell_style(); } +} testDescription_suite_StyleTestSuite_test_read_cell_style; + +#include "C:\Users\taf656\Development\xlnt\source\tests\ThemeTestSuite.h" + +static ThemeTestSuite suite_ThemeTestSuite; + +static CxxTest::List Tests_ThemeTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_ThemeTestSuite( "../../source/tests/ThemeTestSuite.h", 9, "ThemeTestSuite", suite_ThemeTestSuite, Tests_ThemeTestSuite ); + +static class TestDescription_suite_ThemeTestSuite_test_write_theme : public CxxTest::RealTestDescription { +public: + TestDescription_suite_ThemeTestSuite_test_write_theme() : CxxTest::RealTestDescription( Tests_ThemeTestSuite, suiteDescription_ThemeTestSuite, 17, "test_write_theme" ) {} + void runTest() { suite_ThemeTestSuite.test_write_theme(); } +} testDescription_suite_ThemeTestSuite_test_write_theme; + +#include "C:\Users\taf656\Development\xlnt\source\tests\UnicodeTestSuite.h" + +static UnicodeTestSuite suite_UnicodeTestSuite; + +static CxxTest::List Tests_UnicodeTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_UnicodeTestSuite( "../../source/tests/UnicodeTestSuite.h", 9, "UnicodeTestSuite", suite_UnicodeTestSuite, Tests_UnicodeTestSuite ); + +static class TestDescription_suite_UnicodeTestSuite_test_read_workbook_with_unicode_character : public CxxTest::RealTestDescription { +public: + TestDescription_suite_UnicodeTestSuite_test_read_workbook_with_unicode_character() : CxxTest::RealTestDescription( Tests_UnicodeTestSuite, suiteDescription_UnicodeTestSuite, 17, "test_read_workbook_with_unicode_character" ) {} + void runTest() { suite_UnicodeTestSuite.test_read_workbook_with_unicode_character(); } +} testDescription_suite_UnicodeTestSuite_test_read_workbook_with_unicode_character; + +#include "C:\Users\taf656\Development\xlnt\source\tests\UriTestSuite.h" static uriTestSuite suite_uriTestSuite; static CxxTest::List Tests_uriTestSuite = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_uriTestSuite( "../../source/tests/packaging/UriTestSuite.h", 6, "uriTestSuite", suite_uriTestSuite, Tests_uriTestSuite ); +CxxTest::StaticSuiteDescription suiteDescription_uriTestSuite( "../../source/tests/UriTestSuite.h", 6, "uriTestSuite", suite_uriTestSuite, Tests_uriTestSuite ); static class TestDescription_suite_uriTestSuite_test_absolute_path : public CxxTest::RealTestDescription { public: @@ -223,5 +1143,560 @@ public: void runTest() { suite_uriTestSuite.test_user_info(); } } testDescription_suite_uriTestSuite_test_user_info; +#include "C:\Users\taf656\Development\xlnt\source\tests\WorkbookTestSuite.h" + +static WorkbookTestSuite suite_WorkbookTestSuite; + +static CxxTest::List Tests_WorkbookTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_WorkbookTestSuite( "../../source/tests/WorkbookTestSuite.h", 9, "WorkbookTestSuite", suite_WorkbookTestSuite, Tests_WorkbookTestSuite ); + +static class TestDescription_suite_WorkbookTestSuite_test_get_active_sheet : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_get_active_sheet() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 17, "test_get_active_sheet" ) {} + void runTest() { suite_WorkbookTestSuite.test_get_active_sheet(); } +} testDescription_suite_WorkbookTestSuite_test_get_active_sheet; + +static class TestDescription_suite_WorkbookTestSuite_test_create_sheet : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_create_sheet() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 24, "test_create_sheet" ) {} + void runTest() { suite_WorkbookTestSuite.test_create_sheet(); } +} testDescription_suite_WorkbookTestSuite_test_create_sheet; + +static class TestDescription_suite_WorkbookTestSuite_test_create_sheet_with_name : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_create_sheet_with_name() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 31, "test_create_sheet_with_name" ) {} + void runTest() { suite_WorkbookTestSuite.test_create_sheet_with_name(); } +} testDescription_suite_WorkbookTestSuite_test_create_sheet_with_name; + +static class TestDescription_suite_WorkbookTestSuite_test_add_correct_sheet : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_add_correct_sheet() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 38, "test_add_correct_sheet" ) {} + void runTest() { suite_WorkbookTestSuite.test_add_correct_sheet(); } +} testDescription_suite_WorkbookTestSuite_test_add_correct_sheet; + +static class TestDescription_suite_WorkbookTestSuite_test_add_incorrect_sheet : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_add_incorrect_sheet() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 46, "test_add_incorrect_sheet" ) {} + void runTest() { suite_WorkbookTestSuite.test_add_incorrect_sheet(); } +} testDescription_suite_WorkbookTestSuite_test_add_incorrect_sheet; + +static class TestDescription_suite_WorkbookTestSuite_test_create_sheet_readonly : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_create_sheet_readonly() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 52, "test_create_sheet_readonly" ) {} + void runTest() { suite_WorkbookTestSuite.test_create_sheet_readonly(); } +} testDescription_suite_WorkbookTestSuite_test_create_sheet_readonly; + +static class TestDescription_suite_WorkbookTestSuite_test_remove_sheet : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_remove_sheet() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 59, "test_remove_sheet" ) {} + void runTest() { suite_WorkbookTestSuite.test_remove_sheet(); } +} testDescription_suite_WorkbookTestSuite_test_remove_sheet; + +static class TestDescription_suite_WorkbookTestSuite_test_get_sheet_by_name : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_get_sheet_by_name() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 67, "test_get_sheet_by_name" ) {} + void runTest() { suite_WorkbookTestSuite.test_get_sheet_by_name(); } +} testDescription_suite_WorkbookTestSuite_test_get_sheet_by_name; + +static class TestDescription_suite_WorkbookTestSuite_test_get_index2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_get_index2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 77, "test_get_index2" ) {} + void runTest() { suite_WorkbookTestSuite.test_get_index2(); } +} testDescription_suite_WorkbookTestSuite_test_get_index2; + +static class TestDescription_suite_WorkbookTestSuite_test_get_sheet_names : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_get_sheet_names() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 85, "test_get_sheet_names" ) {} + void runTest() { suite_WorkbookTestSuite.test_get_sheet_names(); } +} testDescription_suite_WorkbookTestSuite_test_get_sheet_names; + +static class TestDescription_suite_WorkbookTestSuite_test_get_named_ranges2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_get_named_ranges2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 97, "test_get_named_ranges2" ) {} + void runTest() { suite_WorkbookTestSuite.test_get_named_ranges2(); } +} testDescription_suite_WorkbookTestSuite_test_get_named_ranges2; + +static class TestDescription_suite_WorkbookTestSuite_test_get_active_sheet2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_get_active_sheet2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 102, "test_get_active_sheet2" ) {} + void runTest() { suite_WorkbookTestSuite.test_get_active_sheet2(); } +} testDescription_suite_WorkbookTestSuite_test_get_active_sheet2; + +static class TestDescription_suite_WorkbookTestSuite_test_create_sheet2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_create_sheet2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 109, "test_create_sheet2" ) {} + void runTest() { suite_WorkbookTestSuite.test_create_sheet2(); } +} testDescription_suite_WorkbookTestSuite_test_create_sheet2; + +static class TestDescription_suite_WorkbookTestSuite_test_create_sheet_with_name2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_create_sheet_with_name2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 116, "test_create_sheet_with_name2" ) {} + void runTest() { suite_WorkbookTestSuite.test_create_sheet_with_name2(); } +} testDescription_suite_WorkbookTestSuite_test_create_sheet_with_name2; + +static class TestDescription_suite_WorkbookTestSuite_test_add_correct_sheet2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_add_correct_sheet2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 123, "test_add_correct_sheet2" ) {} + void runTest() { suite_WorkbookTestSuite.test_add_correct_sheet2(); } +} testDescription_suite_WorkbookTestSuite_test_add_correct_sheet2; + +static class TestDescription_suite_WorkbookTestSuite_test_add_incorrect_sheet2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_add_incorrect_sheet2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 132, "test_add_incorrect_sheet2" ) {} + void runTest() { suite_WorkbookTestSuite.test_add_incorrect_sheet2(); } +} testDescription_suite_WorkbookTestSuite_test_add_incorrect_sheet2; + +static class TestDescription_suite_WorkbookTestSuite_test_create_sheet_readonly2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_create_sheet_readonly2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 139, "test_create_sheet_readonly2" ) {} + void runTest() { suite_WorkbookTestSuite.test_create_sheet_readonly2(); } +} testDescription_suite_WorkbookTestSuite_test_create_sheet_readonly2; + +static class TestDescription_suite_WorkbookTestSuite_test_remove_sheet2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_remove_sheet2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 146, "test_remove_sheet2" ) {} + void runTest() { suite_WorkbookTestSuite.test_remove_sheet2(); } +} testDescription_suite_WorkbookTestSuite_test_remove_sheet2; + +static class TestDescription_suite_WorkbookTestSuite_test_get_sheet_by_name2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_get_sheet_by_name2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 154, "test_get_sheet_by_name2" ) {} + void runTest() { suite_WorkbookTestSuite.test_get_sheet_by_name2(); } +} testDescription_suite_WorkbookTestSuite_test_get_sheet_by_name2; + +static class TestDescription_suite_WorkbookTestSuite_test_get_index : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_get_index() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 164, "test_get_index" ) {} + void runTest() { suite_WorkbookTestSuite.test_get_index(); } +} testDescription_suite_WorkbookTestSuite_test_get_index; + +static class TestDescription_suite_WorkbookTestSuite_test_get_sheet_names2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_get_sheet_names2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 172, "test_get_sheet_names2" ) {} + void runTest() { suite_WorkbookTestSuite.test_get_sheet_names2(); } +} testDescription_suite_WorkbookTestSuite_test_get_sheet_names2; + +static class TestDescription_suite_WorkbookTestSuite_test_get_named_ranges : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_get_named_ranges() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 184, "test_get_named_ranges" ) {} + void runTest() { suite_WorkbookTestSuite.test_get_named_ranges(); } +} testDescription_suite_WorkbookTestSuite_test_get_named_ranges; + +static class TestDescription_suite_WorkbookTestSuite_test_add_named_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_add_named_range() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 190, "test_add_named_range" ) {} + void runTest() { suite_WorkbookTestSuite.test_add_named_range(); } +} testDescription_suite_WorkbookTestSuite_test_add_named_range; + +static class TestDescription_suite_WorkbookTestSuite_test_get_named_range2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_get_named_range2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 200, "test_get_named_range2" ) {} + void runTest() { suite_WorkbookTestSuite.test_get_named_range2(); } +} testDescription_suite_WorkbookTestSuite_test_get_named_range2; + +static class TestDescription_suite_WorkbookTestSuite_test_remove_named_range2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_remove_named_range2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 210, "test_remove_named_range2" ) {} + void runTest() { suite_WorkbookTestSuite.test_remove_named_range2(); } +} testDescription_suite_WorkbookTestSuite_test_remove_named_range2; + +static class TestDescription_suite_WorkbookTestSuite_test_add_local_named_range2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_add_local_named_range2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 222, "test_add_local_named_range2" ) {} + void runTest() { suite_WorkbookTestSuite.test_add_local_named_range2(); } +} testDescription_suite_WorkbookTestSuite_test_add_local_named_range2; + +static class TestDescription_suite_WorkbookTestSuite_test_write_regular_date : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_write_regular_date() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 234, "test_write_regular_date" ) {} + void runTest() { suite_WorkbookTestSuite.test_write_regular_date(); } +} testDescription_suite_WorkbookTestSuite_test_write_regular_date; + +static class TestDescription_suite_WorkbookTestSuite_test_write_regular_float : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_write_regular_float() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 251, "test_write_regular_float" ) {} + void runTest() { suite_WorkbookTestSuite.test_write_regular_float(); } +} testDescription_suite_WorkbookTestSuite_test_write_regular_float; + +static class TestDescription_suite_WorkbookTestSuite_test_bad_encoding2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_bad_encoding2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 267, "test_bad_encoding2" ) {} + void runTest() { suite_WorkbookTestSuite.test_bad_encoding2(); } +} testDescription_suite_WorkbookTestSuite_test_bad_encoding2; + +static class TestDescription_suite_WorkbookTestSuite_test_good_encoding2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_good_encoding2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 277, "test_good_encoding2" ) {} + void runTest() { suite_WorkbookTestSuite.test_good_encoding2(); } +} testDescription_suite_WorkbookTestSuite_test_good_encoding2; + +static class TestDescription_suite_WorkbookTestSuite_test_add_named_range2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_add_named_range2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 287, "test_add_named_range2" ) {} + void runTest() { suite_WorkbookTestSuite.test_add_named_range2(); } +} testDescription_suite_WorkbookTestSuite_test_add_named_range2; + +static class TestDescription_suite_WorkbookTestSuite_test_get_named_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_get_named_range() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 297, "test_get_named_range" ) {} + void runTest() { suite_WorkbookTestSuite.test_get_named_range(); } +} testDescription_suite_WorkbookTestSuite_test_get_named_range; + +static class TestDescription_suite_WorkbookTestSuite_test_remove_named_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_remove_named_range() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 307, "test_remove_named_range" ) {} + void runTest() { suite_WorkbookTestSuite.test_remove_named_range(); } +} testDescription_suite_WorkbookTestSuite_test_remove_named_range; + +static class TestDescription_suite_WorkbookTestSuite_test_add_local_named_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_add_local_named_range() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 319, "test_add_local_named_range" ) {} + void runTest() { suite_WorkbookTestSuite.test_add_local_named_range(); } +} testDescription_suite_WorkbookTestSuite_test_add_local_named_range; + +static class TestDescription_suite_WorkbookTestSuite_test_write_regular_date2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_write_regular_date2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 332, "test_write_regular_date2" ) {} + void runTest() { suite_WorkbookTestSuite.test_write_regular_date2(); } +} testDescription_suite_WorkbookTestSuite_test_write_regular_date2; + +static class TestDescription_suite_WorkbookTestSuite_test_write_regular_float2 : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_write_regular_float2() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 349, "test_write_regular_float2" ) {} + void runTest() { suite_WorkbookTestSuite.test_write_regular_float2(); } +} testDescription_suite_WorkbookTestSuite_test_write_regular_float2; + +static class TestDescription_suite_WorkbookTestSuite_test_bad_encoding : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_bad_encoding() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 365, "test_bad_encoding" ) {} + void runTest() { suite_WorkbookTestSuite.test_bad_encoding(); } +} testDescription_suite_WorkbookTestSuite_test_bad_encoding; + +static class TestDescription_suite_WorkbookTestSuite_test_good_encoding : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorkbookTestSuite_test_good_encoding() : CxxTest::RealTestDescription( Tests_WorkbookTestSuite, suiteDescription_WorkbookTestSuite, 375, "test_good_encoding" ) {} + void runTest() { suite_WorkbookTestSuite.test_good_encoding(); } +} testDescription_suite_WorkbookTestSuite_test_good_encoding; + +#include "C:\Users\taf656\Development\xlnt\source\tests\WorksheetTestSuite.h" + +static WorksheetTestSuite suite_WorksheetTestSuite; + +static CxxTest::List Tests_WorksheetTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_WorksheetTestSuite( "../../source/tests/WorksheetTestSuite.h", 9, "WorksheetTestSuite", suite_WorksheetTestSuite, Tests_WorksheetTestSuite ); + +static class TestDescription_suite_WorksheetTestSuite_test_new_worksheet : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_new_worksheet() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 19, "test_new_worksheet" ) {} + void runTest() { suite_WorksheetTestSuite.test_new_worksheet(); } +} testDescription_suite_WorksheetTestSuite_test_new_worksheet; + +static class TestDescription_suite_WorksheetTestSuite_test_new_sheet_name : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_new_sheet_name() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 25, "test_new_sheet_name" ) {} + void runTest() { suite_WorksheetTestSuite.test_new_sheet_name(); } +} testDescription_suite_WorksheetTestSuite_test_new_sheet_name; + +static class TestDescription_suite_WorksheetTestSuite_test_get_cell : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_get_cell() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 32, "test_get_cell" ) {} + void runTest() { suite_WorksheetTestSuite.test_get_cell(); } +} testDescription_suite_WorksheetTestSuite_test_get_cell; + +static class TestDescription_suite_WorksheetTestSuite_test_set_bad_title : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_set_bad_title() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 39, "test_set_bad_title" ) {} + void runTest() { suite_WorksheetTestSuite.test_set_bad_title(); } +} testDescription_suite_WorksheetTestSuite_test_set_bad_title; + +static class TestDescription_suite_WorksheetTestSuite_test_set_bad_title_character : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_set_bad_title_character() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 44, "test_set_bad_title_character" ) {} + void runTest() { suite_WorksheetTestSuite.test_set_bad_title_character(); } +} testDescription_suite_WorksheetTestSuite_test_set_bad_title_character; + +static class TestDescription_suite_WorksheetTestSuite_test_worksheet_dimension : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_worksheet_dimension() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 55, "test_worksheet_dimension" ) {} + void runTest() { suite_WorksheetTestSuite.test_worksheet_dimension(); } +} testDescription_suite_WorksheetTestSuite_test_worksheet_dimension; + +static class TestDescription_suite_WorksheetTestSuite_test_worksheet_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_worksheet_range() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 63, "test_worksheet_range" ) {} + void runTest() { suite_WorksheetTestSuite.test_worksheet_range(); } +} testDescription_suite_WorksheetTestSuite_test_worksheet_range; + +static class TestDescription_suite_WorksheetTestSuite_test_worksheet_named_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_worksheet_named_range() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 72, "test_worksheet_named_range" ) {} + void runTest() { suite_WorksheetTestSuite.test_worksheet_named_range(); } +} testDescription_suite_WorksheetTestSuite_test_worksheet_named_range; + +static class TestDescription_suite_WorksheetTestSuite_test_bad_named_range : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_bad_named_range() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 81, "test_bad_named_range" ) {} + void runTest() { suite_WorksheetTestSuite.test_bad_named_range(); } +} testDescription_suite_WorksheetTestSuite_test_bad_named_range; + +static class TestDescription_suite_WorksheetTestSuite_test_named_range_wrong_sheet : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_named_range_wrong_sheet() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 87, "test_named_range_wrong_sheet" ) {} + void runTest() { suite_WorksheetTestSuite.test_named_range_wrong_sheet(); } +} testDescription_suite_WorksheetTestSuite_test_named_range_wrong_sheet; + +static class TestDescription_suite_WorksheetTestSuite_test_cell_offset : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_cell_offset() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 95, "test_cell_offset" ) {} + void runTest() { suite_WorksheetTestSuite.test_cell_offset(); } +} testDescription_suite_WorksheetTestSuite_test_cell_offset; + +static class TestDescription_suite_WorksheetTestSuite_test_range_offset : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_range_offset() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 101, "test_range_offset" ) {} + void runTest() { suite_WorksheetTestSuite.test_range_offset(); } +} testDescription_suite_WorksheetTestSuite_test_range_offset; + +static class TestDescription_suite_WorksheetTestSuite_test_cell_alternate_coordinates : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_cell_alternate_coordinates() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 111, "test_cell_alternate_coordinates" ) {} + void runTest() { suite_WorksheetTestSuite.test_cell_alternate_coordinates(); } +} testDescription_suite_WorksheetTestSuite_test_cell_alternate_coordinates; + +static class TestDescription_suite_WorksheetTestSuite_test_cell_insufficient_coordinates : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_cell_insufficient_coordinates() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 118, "test_cell_insufficient_coordinates" ) {} + void runTest() { suite_WorksheetTestSuite.test_cell_insufficient_coordinates(); } +} testDescription_suite_WorksheetTestSuite_test_cell_insufficient_coordinates; + +static class TestDescription_suite_WorksheetTestSuite_test_cell_range_name : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_cell_range_name() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 124, "test_cell_range_name" ) {} + void runTest() { suite_WorksheetTestSuite.test_cell_range_name(); } +} testDescription_suite_WorksheetTestSuite_test_cell_range_name; + +static class TestDescription_suite_WorksheetTestSuite_test_garbage_collect : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_garbage_collect() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 136, "test_garbage_collect" ) {} + void runTest() { suite_WorksheetTestSuite.test_garbage_collect(); } +} testDescription_suite_WorksheetTestSuite_test_garbage_collect; + +static class TestDescription_suite_WorksheetTestSuite_test_hyperlink_relationships : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_hyperlink_relationships() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 149, "test_hyperlink_relationships" ) {} + void runTest() { suite_WorksheetTestSuite.test_hyperlink_relationships(); } +} testDescription_suite_WorksheetTestSuite_test_hyperlink_relationships; + +static class TestDescription_suite_WorksheetTestSuite_test_bad_relationship_type : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_bad_relationship_type() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 169, "test_bad_relationship_type" ) {} + void runTest() { suite_WorksheetTestSuite.test_bad_relationship_type(); } +} testDescription_suite_WorksheetTestSuite_test_bad_relationship_type; + +static class TestDescription_suite_WorksheetTestSuite_test_append_list : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_append_list() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 174, "test_append_list" ) {} + void runTest() { suite_WorksheetTestSuite.test_append_list(); } +} testDescription_suite_WorksheetTestSuite_test_append_list; + +static class TestDescription_suite_WorksheetTestSuite_test_append_dict_letter : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_append_dict_letter() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 184, "test_append_dict_letter" ) {} + void runTest() { suite_WorksheetTestSuite.test_append_dict_letter(); } +} testDescription_suite_WorksheetTestSuite_test_append_dict_letter; + +static class TestDescription_suite_WorksheetTestSuite_test_append_dict_index : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_append_dict_index() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 194, "test_append_dict_index" ) {} + void runTest() { suite_WorksheetTestSuite.test_append_dict_index(); } +} testDescription_suite_WorksheetTestSuite_test_append_dict_index; + +static class TestDescription_suite_WorksheetTestSuite_test_bad_append : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_bad_append() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 204, "test_bad_append" ) {} + void runTest() { suite_WorksheetTestSuite.test_bad_append(); } +} testDescription_suite_WorksheetTestSuite_test_bad_append; + +static class TestDescription_suite_WorksheetTestSuite_test_append_2d_list : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_append_2d_list() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 210, "test_append_2d_list" ) {} + void runTest() { suite_WorksheetTestSuite.test_append_2d_list(); } +} testDescription_suite_WorksheetTestSuite_test_append_2d_list; + +static class TestDescription_suite_WorksheetTestSuite_test_rows : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_rows() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 223, "test_rows" ) {} + void runTest() { suite_WorksheetTestSuite.test_rows(); } +} testDescription_suite_WorksheetTestSuite_test_rows; + +static class TestDescription_suite_WorksheetTestSuite_test_cols : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_cols() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 238, "test_cols" ) {} + void runTest() { suite_WorksheetTestSuite.test_cols(); } +} testDescription_suite_WorksheetTestSuite_test_cols; + +static class TestDescription_suite_WorksheetTestSuite_test_auto_filter : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_auto_filter() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 253, "test_auto_filter" ) {} + void runTest() { suite_WorksheetTestSuite.test_auto_filter(); } +} testDescription_suite_WorksheetTestSuite_test_auto_filter; + +static class TestDescription_suite_WorksheetTestSuite_test_page_margins : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_page_margins() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 266, "test_page_margins" ) {} + void runTest() { suite_WorksheetTestSuite.test_page_margins(); } +} testDescription_suite_WorksheetTestSuite_test_page_margins; + +static class TestDescription_suite_WorksheetTestSuite_test_merge : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_merge() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 283, "test_merge" ) {} + void runTest() { suite_WorksheetTestSuite.test_merge(); } +} testDescription_suite_WorksheetTestSuite_test_merge; + +static class TestDescription_suite_WorksheetTestSuite_test_freeze : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_freeze() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 303, "test_freeze" ) {} + void runTest() { suite_WorksheetTestSuite.test_freeze(); } +} testDescription_suite_WorksheetTestSuite_test_freeze; + +static class TestDescription_suite_WorksheetTestSuite_test_printer_settings : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WorksheetTestSuite_test_printer_settings() : CxxTest::RealTestDescription( Tests_WorksheetTestSuite, suiteDescription_WorksheetTestSuite, 319, "test_printer_settings" ) {} + void runTest() { suite_WorksheetTestSuite.test_printer_settings(); } +} testDescription_suite_WorksheetTestSuite_test_printer_settings; + +#include "C:\Users\taf656\Development\xlnt\source\tests\WriteTestSuite.h" + +static WriteTestSuite suite_WriteTestSuite; + +static CxxTest::List Tests_WriteTestSuite = { 0, 0 }; +CxxTest::StaticSuiteDescription suiteDescription_WriteTestSuite( "../../source/tests/WriteTestSuite.h", 9, "WriteTestSuite", suite_WriteTestSuite, Tests_WriteTestSuite ); + +static class TestDescription_suite_WriteTestSuite_test_write_empty_workbook : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_empty_workbook() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 17, "test_write_empty_workbook" ) {} + void runTest() { suite_WriteTestSuite.test_write_empty_workbook(); } +} testDescription_suite_WriteTestSuite_test_write_empty_workbook; + +static class TestDescription_suite_WriteTestSuite_test_write_virtual_workbook : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_virtual_workbook() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 27, "test_write_virtual_workbook" ) {} + void runTest() { suite_WriteTestSuite.test_write_virtual_workbook(); } +} testDescription_suite_WriteTestSuite_test_write_virtual_workbook; + +static class TestDescription_suite_WriteTestSuite_test_write_workbook_rels : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_workbook_rels() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 35, "test_write_workbook_rels" ) {} + void runTest() { suite_WriteTestSuite.test_write_workbook_rels(); } +} testDescription_suite_WriteTestSuite_test_write_workbook_rels; + +static class TestDescription_suite_WriteTestSuite_test_write_workbook : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_workbook() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 43, "test_write_workbook" ) {} + void runTest() { suite_WriteTestSuite.test_write_workbook(); } +} testDescription_suite_WriteTestSuite_test_write_workbook; + +static class TestDescription_suite_WriteTestSuite_test_write_string_table : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_string_table() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 52, "test_write_string_table" ) {} + void runTest() { suite_WriteTestSuite.test_write_string_table(); } +} testDescription_suite_WriteTestSuite_test_write_string_table; + +static class TestDescription_suite_WriteTestSuite_test_write_worksheet : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_worksheet() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 60, "test_write_worksheet" ) {} + void runTest() { suite_WriteTestSuite.test_write_worksheet(); } +} testDescription_suite_WriteTestSuite_test_write_worksheet; + +static class TestDescription_suite_WriteTestSuite_test_write_hidden_worksheet : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_hidden_worksheet() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 70, "test_write_hidden_worksheet" ) {} + void runTest() { suite_WriteTestSuite.test_write_hidden_worksheet(); } +} testDescription_suite_WriteTestSuite_test_write_hidden_worksheet; + +static class TestDescription_suite_WriteTestSuite_test_write_bool : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_bool() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 81, "test_write_bool" ) {} + void runTest() { suite_WriteTestSuite.test_write_bool(); } +} testDescription_suite_WriteTestSuite_test_write_bool; + +static class TestDescription_suite_WriteTestSuite_test_write_formula : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_formula() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 92, "test_write_formula" ) {} + void runTest() { suite_WriteTestSuite.test_write_formula(); } +} testDescription_suite_WriteTestSuite_test_write_formula; + +static class TestDescription_suite_WriteTestSuite_test_write_style : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_style() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 104, "test_write_style" ) {} + void runTest() { suite_WriteTestSuite.test_write_style(); } +} testDescription_suite_WriteTestSuite_test_write_style; + +static class TestDescription_suite_WriteTestSuite_test_write_height : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_height() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 115, "test_write_height" ) {} + void runTest() { suite_WriteTestSuite.test_write_height(); } +} testDescription_suite_WriteTestSuite_test_write_height; + +static class TestDescription_suite_WriteTestSuite_test_write_hyperlink : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_hyperlink() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 126, "test_write_hyperlink" ) {} + void runTest() { suite_WriteTestSuite.test_write_hyperlink(); } +} testDescription_suite_WriteTestSuite_test_write_hyperlink; + +static class TestDescription_suite_WriteTestSuite_test_write_hyperlink_rels : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_hyperlink_rels() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 137, "test_write_hyperlink_rels" ) {} + void runTest() { suite_WriteTestSuite.test_write_hyperlink_rels(); } +} testDescription_suite_WriteTestSuite_test_write_hyperlink_rels; + +static class TestDescription_suite_WriteTestSuite_test_hyperlink_value : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_hyperlink_value() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 153, "test_hyperlink_value" ) {} + void runTest() { suite_WriteTestSuite.test_hyperlink_value(); } +} testDescription_suite_WriteTestSuite_test_hyperlink_value; + +static class TestDescription_suite_WriteTestSuite_test_write_auto_filter : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_write_auto_filter() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 163, "test_write_auto_filter" ) {} + void runTest() { suite_WriteTestSuite.test_write_auto_filter(); } +} testDescription_suite_WriteTestSuite_test_write_auto_filter; + +static class TestDescription_suite_WriteTestSuite_test_freeze_panes_horiz : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_freeze_panes_horiz() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 178, "test_freeze_panes_horiz" ) {} + void runTest() { suite_WriteTestSuite.test_freeze_panes_horiz(); } +} testDescription_suite_WriteTestSuite_test_freeze_panes_horiz; + +static class TestDescription_suite_WriteTestSuite_test_freeze_panes_vert : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_freeze_panes_vert() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 189, "test_freeze_panes_vert" ) {} + void runTest() { suite_WriteTestSuite.test_freeze_panes_vert(); } +} testDescription_suite_WriteTestSuite_test_freeze_panes_vert; + +static class TestDescription_suite_WriteTestSuite_test_freeze_panes_both : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_freeze_panes_both() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 200, "test_freeze_panes_both" ) {} + void runTest() { suite_WriteTestSuite.test_freeze_panes_both(); } +} testDescription_suite_WriteTestSuite_test_freeze_panes_both; + +static class TestDescription_suite_WriteTestSuite_test_long_number : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_long_number() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 211, "test_long_number" ) {} + void runTest() { suite_WriteTestSuite.test_long_number(); } +} testDescription_suite_WriteTestSuite_test_long_number; + +static class TestDescription_suite_WriteTestSuite_test_decimal : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_decimal() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 221, "test_decimal" ) {} + void runTest() { suite_WriteTestSuite.test_decimal(); } +} testDescription_suite_WriteTestSuite_test_decimal; + +static class TestDescription_suite_WriteTestSuite_test_short_number : public CxxTest::RealTestDescription { +public: + TestDescription_suite_WriteTestSuite_test_short_number() : CxxTest::RealTestDescription( Tests_WriteTestSuite, suiteDescription_WriteTestSuite, 231, "test_short_number" ) {} + void runTest() { suite_WriteTestSuite.test_short_number(); } +} testDescription_suite_WriteTestSuite_test_short_number; + #include const char* CxxTest::RealWorldDescription::_worldName = "cxxtest"; diff --git a/source/tests/test_data/genuine/NameWithValueBug.xlsx b/source/tests/test_data/genuine/NameWithValueBug.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0f8a5dc39864daa10f506bfd66b258bfb3387dab GIT binary patch literal 8021 zcmeHMg;!MT-X6L`q@or|%ir-Qk(A*Y9}4Nd+80x%bV2*3Y-$A8xoC{L17>EgzhJ(K@Vdq~V^ z*DQ%Hu#?|G&;&%|J}s=?oJ{HE*x5;E;3ojeux>D^n+@K+oQ>i$reaH^pviR;v>dhR zB&Zr;v276Xo@*(@V}}CE33~KCO<}}wkTeJ#4fY{1Y1;Bwnn(SJcTQr|MC4n8jwmcV zW~B2CPB!gwOf#zWnnc@!|&?)n;SF zDxNaE+`+%72l@N?C;4*O8VvVpho5@3GZ}finfnTLuu|#(+bMHB9znwyZ^aHE4 zh0f~G2Cn0}n^Y4Z6-{_9y{X9($>T`Ezy~g@+gl`n+TSEsr^QWw0_Tx3Tv1qnF9^m? z<~Gh;oIkHL`JewMwf`E4MJ0TNs|&klPrgNZ`D)Wn9zE|(v$A|MttM3m!!C7QbOD3p z*=aCRprR>k_;l^7gu(3Ys1w?0N z*2dVQFe%ey;;N)3GLoz*>6+ezpHh_&>tNgIO+2^yXNc8s;)4?N?@23hcE6I4=uMk9Zlr?&x@Sh7w~T+kN^NO06Kz)4cDJ^cei(XVPbFp;^zYMFX|)zq&{3R|G$rxgu&nLltx<+n_?fnkQjPKhV&us>Yv+041hExgy+Luzu# z3oIT85mD=*O7ssB%g~CK3NW@PNi{n^c2p(fc`eKoc@EL|3e~*D=JQU!VuU2sZYn4( zsidZte~A3ffgxpGd(m4=EwY*8<#&2ICw*U-d(=Fe*%JjtxECEnTqQp}bS#wYRp@eTsEjY-a1aIlrqN z>9R6I=018-wpvzeGR7qTQUQ|Z;1O!~93x{56H0KFLPc(&chzyJ*M&*l*y=*@I36-a z5{LEH)AlG+gN7j<@(n6NFEU%v)gk`O$x~F)1`hu%vn<9wy4^H27c<=qXJMDoa5C|A zuXV`}@!kGrxGOO2;}q>OIeFb!qI=_K#=2om?g<2atsK&>H(Xne2f(8EG;MrI(MXl~m&DV9^6^uBE4i1nxLaYB8&M!?Djs)&ji>T)4x#d@eS zSL2IeUp;nw?lxc4YU|gr=_^uC#PaZPy7?CvST)_ZGBXwnuRWtt=4aSZj0OZ$Tie=) zrjVo0=tYm#g*$jKv^fYJ=DNUJEC+)>9`e_c9kn-kc*j>RDhyyic^GniDPnRhc+-qr zco{Qp(9|zwl5P_71rm|O3ap6-zYrg>qkUF50!kF*^0ct#=bs}z+F?~eglR8nT+&B9 z>|e8%3i2%w+4b)I*5R=BXt8zI3j?y_`0=`5$F-m8UUD#my3OeX>vzr14eG8efH&U^ zK5O9o*?eagPaAXRpR+|F82bD>H-0P0A>QLNxn?XJ+v?ZS5ZbsT$@-x(n?56`m096I z&F+My*~8fxFm9`^sw$s-w#D+|!M0SEjWXvmmWDHO7Is0X@V4T`TGj2PVT24>bf|xQ zQUU0&y6H-TfehM4S-}V;NK^D=*nG*FoKbKhIukZams3mY1!{?Yt>{}jU6{2jwIi5` zwo)gpM`SChn2&)((5xF?Du3IpfW&9;wlp6DKc6PWlKy_sG)!bM6;sf>;ZNV+)NH3&?l`4cjNi`haZ(6H*Y!%s75=0%OF`OPK0JG(Hg zzzj@nS<3u{U1MY4qEbW~B^&;x-83D{M=!S|3B{0>Tu9WAq)+0j0c|R#2(yR5Kk9|1 z*R<#7&$6?XSvuu^tv&Ttc)$KB<&7f7#z0g608IY#72^*nyI7gqnsfbe<@wpuZ9P?cm>^+0 z-lRK?i@hy#Jvo|d#AJ151&F-cE{w`LJw+FsFFB&%OAa@02whE(RD|XoZX32C#AcTq zCWEjFq)VbxdBqyiex(sq^6{}S8M>D~w{uJMt|!w$;d#<@3@eVXGQ&!*@NRMHQDG}@ z_s|<9a;gN(Uef^&<>}ch`Mv4!t3AVynXC-=q^iVIG8=b76d5yqeMTm z&k=7<7}E`2s}v6_npexqU zKR_kqB~wiun$ElNQ+yPrEDYlau?P4RWOR}M!$ZZI_#-i5$4Yf0_kB4p0Yj3ZMA7jX z%w~bU;ftIxa)Bm;0DFR`Y1PtgPsv7F;*L>3ny@QwXxu$4uXoumZ#OT%$D0?4OJQGQ zsDHRzuMZz|QFCxuE^x*KEq12P`JJv!P!~vK`yCw~kgRyCigF}Gh|dy3%mTG0+i za^+l~ZudpL6Ti7>?q%G!4R|7Z9w#T0Z?KF`xsUF`7wX8!Oz+r6)P)bWM8OSk!`R5i zq@1r1u`qAMb&Ph`kvsq*8Rg8ln^6Xv6j@=ckwcaNXTp}0oQgOO(nqYi9>S49POB!` z-IULKbbFd3O?&HF^$@lAuoQbwXX1oScKImSDB{w9g=^YJ0Uv6q2L;_B;E zvXsh7Al^cH<~ZU=H)~|S^wbUPN;jML?j)|lY@=Rb6ixE-=mUzu)C8+(2cp?56v^=v zi{V5#e)r3&ls`eAp36Q}W!-m?Bz@A#6JKL9Xp3-3oaKik-OB2EMV0x4Qv)c~xGBCEz!en`on7$&_KTN3U^cHd;Y6Zw zQ}ikP>RGH?(NXcHuMMH$z3|&lm2H8BtF1x@8pKd6u8o#Q@iFY2Ow5tP>aZ6A<78Ba zjw7c`4&@=eK!kTnGv^TEj+wZ3!8ljo#3{3j&ddsB9wCh94q(VmTVWL#jevFxHzf}T zhc7u45GlaScB_vx;H8c^DgP3OWn74c^oIaTM@;35KC{O@S}tx78Q7P$qBluj3GW3t z_yo(@FyV4H8i%p2^A!=;F)PasaXBOxRoE7NU(8}MJV5N9-xjt|2p@GS1M~NrVF`I= z^*@`%Tnw;#Q$xP;#|x%LfoY< zLUhnuN_-9nN~}?QO@|ztA6QN$x3H}D{L1=WZ&fLW02r88@t7#IS86HB$FCokr|cT0 zFeqW9hqH#W-Df)uryvmgCQ$YE%ndIDf3ql~(7a<_r6=bq+hPbf1XAId%OXqIYZXNM zvGJvsi4V9k4jCOXJN+ulKBcwe^g+& zk+K$AsGv7mRFPP(U$1BEP@H-62x7xArFZSCV!Ae%-v6cVV z!ce9usUG1TpD|WHkHvzk`E|<1#T*_+5I5A4F(B`RB2CPHxq)JEq@w+|?sI6boJ`8O!25IEic$wDb;G>~){ii5_e@Q_WX2sj_DCw^dnehp#kP}z z_Y=0YZ(B!Gh@g>S9X@SBd$RW8VMbZpGD?;HVqlsfElq<7;{6}>%}r?c5*_O{`XC6# zq!6%?(RzF*ty{PPcVHxn3(G}aQuU?-HxGSm%tM?ID1(YLTLGTcrlSf=U09WHv#{&2Yr>OtJ(19d;^a|{=>8W!y`m#7`}k}J|C`Q3G_$A&o6=) z1|bhAaPoYGfeIP!uUl$l%_`V7cD-)f*fN``Y%v8$-E^Ay-gk|=OFZd6oez?l*r)3k zK`O4|tF%8qTMLWL5ynz)QqgxA+NVeMn`nEfLp{_Uia^8r*dcF0I%-rgJQtPJ{F4LX z6E3nFApM&*638Jt~ez^cRBpa6Yxl(P~y`o>0ok1F1TAKYmy`}Mon zt#3lo&}Q~stMzrB)}9Ppo6O^Lnh>v?Vz8H>Q$Fa>)3=E{&me2pU}5g&7GjWjn?KcM zS(W0?cDUNx$#XxPPuk!%M%4!IJ<*)lmSq3y=va?)#3E|CVWZb4GyOo=^in`PH3PFU z?+1f&%#l0|$JhD3-r&eb!@$e8S7I7%A{ry%7K%)t+?;)oZy?S-@os2!Ll`@kg3T3& zk$cqp)+_BqTJ}(hH(QO%z_M~yPT=8TED`ZnVl<|yF1gFu#twEXUY4(R!bg!1X9~xR zGMy}29ytotDM?GzWzFpPr_rRU7?c6R)OJ_DHSlpYs&dJ2-BiL){6F<$3b8Sjwt`sO z{nU+E3<$H68$aYM&>j7K1DGvbepCZlH5UziV-h(*p$~Z&Mo!Y?EwSG^5&MqxTVl<5 zH`yr&D`K)}>L`D~uX$G`w~#a&B(F?1%fO8b1KESBNG!$56rT;xE9!j>H=&fJ2kF0h zaU?I2p4hj+o zh+**DD>$gI<{D~r0~t_WdpG0sV2hu7?1|j$eh?a5_12P`d-l5AC1xZz7oGoI@HZGm zYbD76q3jnv4qZL#Ps0cl86*=r4}_9*h_h|YJG?MBF&TD%LL$?i_Q0N)JxQKacwP_B)sFyVy^Y>`obptE|JwwT#*?7^3(xL3dulA>KNIGCM0*7W7_!SPOwxFzM zYeCu%gp-fa?z@ThP}ZRAbgZ%Id638eY(bKQZzNa6pLbPxxJ z|8edo+x|SVz#w}VH+C!D`pbP6)n&68HRPHI+MS`U8WhlUwm^DJ$aDftwOos_L|-L& zv9aXZeOd8G;^N?KA7dQ_q%Uj*e7u=O3f?-bJNlmc+xixT0jU}oKCA0vh4klFW42j1Ruqr&_zmbE)<~o03 zK7AE;92JRro60Z5yLr?A8%Kp^`8L#RXgo_xc$ehTlZlwv-x?e->==*YN*;%&0_g|K z^**VO&kr=GSq&)>0iM}b% zJFCVr2q8M3`=~GM^D*h2DOl9Hm9h0RsP@_TiBIi(UsUBc)$5kp=kM}7u12ru6p$ zf8R{`H}L1^4A;d^hO&1y08N z1Nxcit@!qX+*S-C!5=i*lDt~ynyH)P` zgMreHNC6gWSA?%ZJk NI^o{Hm*VHA{{v-uy72%2 literal 0 HcmV?d00001 diff --git a/source/tests/test_data/genuine/empty-no-string.xlsx b/source/tests/test_data/genuine/empty-no-string.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..39490ac32434e02546ef2a888f12dedf4f5b58f4 GIT binary patch literal 7842 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 literal 0 HcmV?d00001 diff --git a/source/tests/test_data/genuine/empty-with-styles.xlsx b/source/tests/test_data/genuine/empty-with-styles.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..250e9b4365699542af00bce79d17024ea1ae1131 GIT binary patch literal 7511 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 literal 0 HcmV?d00001 diff --git a/source/tests/test_data/genuine/empty.xlsx b/source/tests/test_data/genuine/empty.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3749d02093e170795608aa9c00a2b8e4e2be3a8d GIT binary patch literal 11005 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

j@~^R=nw%o zamN={t&gS>+}A@l(K9uDi*fVzemvj`*o||dR~OhH>^%>&+o01&!gZ+AQ6k`Qz;wCm zd?T5I9xY-;fP&~)q~XyP;ZlP~9b|A-P~N4g|6!YvpFZ8VN`?KjEI%eAkB2Z#+-d!) zB=;&iE;rJykmQq{HY4i;yc?*%{KP~9l?Dr;;Zg22!z;g)(QXk{Qvi6vtO8C#V*Vi`Co^MfeYfaNY2Et<_W$MmHV>zIqV9rwI8?# zkrVDuEtiQ6%a=XFE;44E0`C;2u?Qt-=)+Elniz_gj6l8ccKWXM^UO5DvMer3y@9p9 z&dS{v=iPu)r_mFvE?QH~{aLLyE)F-aol~rpv-{4T^_kfadMj{p6%69(-yb9@5+)e@ z4mMa1ZR(XOT7E#@f2T^*%91ah02NLbQGhLmc501iyEeg>*4PUeIn~8m=B`+DM31U$-^aac zm5aUWgpJVg7}5u)yPb*C9#Td|(>11;!1eBw6`#xPS<(WbY@hS9Q`{{#jo!zb9-5B3 zJ9i#5Rx|R6$d@^Hmj^?URf6~TEdx|1*8Y;>KVl`s^0hXf5uZGBVhgdSqM@*F$L>K> zF@-_#cY)u{Mj&3T;4v|7La~o_eItBI3-vZ<$<>HB$e_p!ew$E#6L7_CO3VaAwi7*n zq3*^V8R+oM;B_yto|k%mOQhjIeVYcP8XF>T;BqOJ+u(?eh@L1mm9}vEM`A3-;gQnb zob$Vz02x809TIV3Ss6LjLJFE#oJbdQXrHu{U8G7EtB9njIboNvHyRp|wNx~K2ide;AM75xx?2KG zPX+zeb(h_irONX$TpZeU^p6gJG@>7?-t6Lrx zEW@WUt}$SOB69(H6^^?Xt5r@%13-RS{t3X@~0~0k( z z)hcip-|!HE)W!iuf>(Eu z1oy?JVsL!yjW6Hs=Fxp;GdZBUWs(gRWZMF%B79=On zvXV&iHeL&viro!MK{jH@@w?A$QM@UyIIdJt0+^$gdqtY7Nt-XkCiKq{t9=od%Rt~8fHvcBx znm?8)*2NAwI)S*Zt58~FvZx}VL9;MJ=Y1c;@6|4~I`B(ki{a({AeB9OxZdZ4Ro7Qt!sN|TtOsV|yz7wVL`)xK7jee=< z_^r$G6UZ%R1xG$Y|9PhI%Wq|>EZP(>qj~F^KX#pM0O4b;7N0?=C6+A#D>xTqZmmYp z%71h(gcSOA1WKFLdzW59q~be{X?sz(2)>Z^0H^Y@CXGl`Ak#B|J38{dkIh*XwD#G% z5z+ziq|bP=n51sth%*0tT)jwEpUKVisIx{NCity1{O= zhU7XOIv8Fx`JPRO&f(p;0Qi>j_^uX^p?VIzAM;s@qXTQZku$-&vuJHl@oaT<yyy&E|SauE}W9$LS~rgCB6 zoLjCVk4Sufx?J*cHn$hzL)5km(8BO;zRSLQLWrBRoo4jI249jqLPkM%zS40M4SxVd zXf@}D$pxp^cS6mBQ!Gn@{Be>hc}AyW?Ur)}8(lsRL-VI;~Ue`+Y41Gvo&NpPt?Bd)__zRmL}~#Ep&wI#IGs~UW8Ds zvx7d2dN@CV`(5iRPyPMhfOFv{U`s&<*VK$`4HX@1?Hpek+Bz8jY(823e@kiLUIlo? zPXK$Eu|kevR`NC-K-AWuO(2&Yqc1o0!*@9MTs`eYX?Txj2B-#uRc zcoePOefzqL22X3|g`~ZhA|PTmUv;0TjbVF@5uw}=SY7rywg5_Q4_O{tZW)YrNJH(LHCh_OU4+~P??#yP?*&e!P{4hmqs-Xv<9g(;?6|cmc zL=cuKzR##K3fm!JODT@6b4Q%MoAr;o91nht&uzSmvf#?wM_dbY+`HV?Xl(oS&}D+j z+VIC6i;ot+V53@(GDqXOUxcjPXJqC#83tIn$1zqdbI4r-dSRdzu= z!`kvSAc`*}@24YHFyp1nh7ixVJu}7n{WL=vLfp3rtj1Ju^$qQ>YSg#0`>z;(%J7dZ zGoi}{T!suehPp%vI10~VzzY$6%~FWyq236v_k3f_i$g6FA_g~sqO>cd4}D;2Al=F>8Bjai;%dJM&TOX|WgIZMTNl7J_kGU{ntI8Q=A3;2g|~urO4d z5&|yUTXN2Q%JAj@%|4!BVsRj;MX(c6Xm85<3AK9a`Th1PZHr~Yl!@%Up`!(>&3qlS8=F zu7MUC!tpk7Gz}S->>#2L_L9-0xuHEB@5bji=|Ank7|90f1VDsAs!V+)!@kuxQtkAO zt?J(t=;;(#J)j3@SK|+x=NpdD+f}K@uS;rmfco!sFT%yN7BXhaxK!ztm*|7SjlL}F zB3pYc(YhA3SIxL?`1BQ1U+LrzGZf3$RH^y}^!tXd5Uu<7<5{H`snEIlt>?QF@3@?} zyO}xEWENk1M|3?6-@Gi`Bn5ZdA6X~}NJenR>Guok{@uI(KL2K!oubU&3I4wP=ik7e z=M1n3{be!GQ{dm%Qv4Md3ZCZw=am&td7jqG|76++uN{0+J%0**T5kOlyo>O^;C~cf zpRzoyUH!?j4$gS}s|kN)`Blk!%JMWZ{U?hI#&21ErKz8?JWVYA$ua@XGyX2k_>|#k z!tPIo7VJM5{x^O16#6tt^CuJ%oN5RE`O}omQ-Y@<^PdFuB)|OzzXIr|EYnW{qCZ)P z$$zo@Ej)UP{(C_3Cl&x$1f%~Eo;-#B-GlrUZch0Z_`m##q6`dJ?EnA@_!kQ{m^U;( Gul@&`W-g-u literal 0 HcmV?d00001 diff --git a/source/tests/test_data/genuine/empty_libre.xlsx b/source/tests/test_data/genuine/empty_libre.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9b66aa08820a3e8ec0677c0aab04d26dae4a70e9 GIT binary patch literal 8107 zcmbt(WmH_-vNZ&E3GN;ongn-ucXxLhCqS?O!Ge2`MuG)*3n929xCM82x7Xy{_a!&) z-1FmpwMWYyy{dYzIabY@qe@8@3K|On9v&WI-NjT8;x|JAe>Ze7w*#^;KfRa5eUpI# zpobp%zI*TEQHL#NR^1x*JzdK8P0HYdF=r|(zMHR45WG%NK3t5n-{}yiXxcoc#reAo z$#)Wt#X1a;(RX-0pe)qOUBXsd%^}KR4H+sl)BfV|uXbl-aSo7Ggsjtg%3rh$cvg(^ zi5f%A=FNP9?ez_z9?iBc!ip{ytQKygG(s}~+0)+c zCr+*L-)uTrk-<12f^Ju+_WSXiz43z#>JK0zL0@yi?WqnG7yU>GbrGrelw8>2_75+K z^K32ws4FPpK8ILX+NjSmkL3?}U|2$X(s`#RN_G(7h{vAS`5MJOaA_EsB44UhRdU%3 zzZOb%&`|_M7v(9y+DA8uYHwU?j3z*ydqnorl|I;|-7uR(8b|=LrH7bL0@>=32JAM> z>NJV9OAyjGrK}$d;(6^KdrRrP>JraiJi+D2KmxG|24fKFpWwp#3$7=ifL7+_u0WQb zA1|K}i&9^7oZ~?ETQuxAHg*hWtaoUgbiw#~szX*5#G@b3I&dvGap-5 znzvm65gy~wX1M6L(WURsuQ)`scYbBYE6)A;TLDE z&^#`1uwMW23iJiGdkv)q%eeB~Z6~zQ z_;v*CzIj<#$G*`VK%a2}Fr2%`Y~HOoQcPI$1tDL>bJA(*fB&dUnie&o$Y{7v0`wJg zb$&0}xwvFk4sTKoi((Ej^8%?Z|J^6y-9W?jjQxt7K*B&hV4bGK?0s1^Dcm7j6xeYNU! zLQ-y=uvkvG@}{ZenPFs@kzBdkW7z8zfmi;crH_<@6W==R?BMIXFt_Oi_?*|#2#yCQWRP@KOcvA0C#8_H z(~)po13q_a>V$Jd=h07|J$eS_c9flv%4PJSDP^$AMqqB}7$}Ld%yQur$i_awWB#Q$ z%JR)b1H5PZFhebW`4|v|BxuZUe6mQ=Ht_qDr|xHz?;TM1YS$ogS={w%C*6>6H@$bG zvmCAz{7lv4nfBO_Z@$JVAV(|ZXQ0(YAzW}ZdlD!Dzr`FLhMQlb7m1f3KD@&rR8LXJ zV;IrF%}@%^Fhyd(ZT>22a$v*CAQq3z)KKdk{B^x!d5e!RYs$40TfY94wNr$v#XTD3 z4uePrX4?Qfb$oHLlRM4VrB=go1L^CY1G&BHL77wqdKG&zPznW&8w*xNZ40T37e=s=P<{G?z>oyeq|tg!X#tV44-lC9#Dfixs9_$$P~>; zfmK9J$2&abA=O{CQXtNOhRWU9n3>9*=KK1SSPh(gLmV&;6%#XH5PQ{y^MxU)CMg>x zzAQCJL^>s&67R(MxMwf>ES?V1E*Ld0HGXvVh9+9xKty~sJr&+p0|Au#va0J-Mu zFAzI6O+hHr<+W3DlIL#%<9Q4QS0+6HrbLunY7{7489xd*2gX~E&>q&ESX+S!3^`|u zb_xZim;hQU%00uh>iqa`;S(tDrB3z3$q#cX3g5@lO&Ev3a0I4lidg!7qfUvheg27% zL8*>gLzmjX`au~k@*DxO+u#CwQMg3GXxkm?nF~@Wl7;#{n@%A5Cppah%53gfR5#&V zsAM@}lA0>3jnKSW;PVRgoxX`f`kp>7<>J{jHL_gm(RTmiVdi|)TOV(=s2)};{Rk>C zEYtnt0K!I&4o)`Th4DaL(wk`#!C;ze3jNbSkWnDY-uzs~?i66qziobCv7zz4HodG$ zL%p1DzF@P_#r)zMmk1Zv@>JCO?AmR&g0;vF{G)dQ-}=xWf%QcWOfjh2U(ds4MwdBL z^yGUq`=|!qg8F)4{Mt8_cfHP%HkZi;3OY-UsTzmlM$R8kGiW-ccVFKP*Q~yYklcyZ zX-ctn^Q6>Uz=M9hj=v&uh47>4o*qyr4Isqk*de(fd#y5S95K-tv|Do=wqzSVdT+ut z6nD(H(2O;wIdEk2`r3xIpJsK$Eh)Nsn5>&k;W_$FF?+JRzR$A=nIDE`3ooDV4Kq5? z2@~*^xfQ+gR~}WV6w`p7hk`GfKe@9MCu%r)Il&tp5VDzP=EQDoz2n-^b<~MNGe;_` z$ac^{C0}hedLR2yN$R;{@k+E$I?pU(n&7<5McEq8uzjb!PH{g*v-2Hgrrg92>=@(J z0{#WY298OL-sFPWoA*@cH%0r_K97^A+NAl-X{MUQxH<5hBSLnyqZ+CX^BjjpWxk10 zekYaCjS^Iuxv;IvEa)5+J#J9}6Xpu`pFVm!>BIWswjpm6Uby0uD?lzLhO(Ko&{jB( zdT(axzc6@tvH8F^6_IMf_!`D((A$y^Hb(eI=55E(tnVc5UrOaWL}F|(IFkwB|BFlp zJY{mLy1XMelUonV(LEih8r^nblOiaz>yh%@lnQmTIdzD%#b{MzRopWS7x7h+usM;i z_{ZNwEhBTEZtQwJ9ONkXp_ax=;4-%NYCUUuC9-4R(YC;3IH76#?B)h(06xTiNwKEqvB28~K5wJH!Yvqz9H z@0VY(s#D80aF|cMxfltD>Ei$5QENx6J182go35tfRgo1bG>xr^`hD_*skFo2K4^Y1 zRacE@Xxrq&MGP*G9Pmt?x>5;y&)4tTScdaUh(Gn-yp)0rDDqwsYww&P3I3yJ;T;@9 z7xp&NhCLi(rHigC*;wX%al{*{tn%WTj5D%KgAbDgG38$(&+x1v zIJ$qR-Xw6L4ub$gO>2lqX_l*}n@f9ovia@HaAP5u5)5uqqF(@$s4U;Vo(y z8!piH;#)8SZ|G98@yu`nX#maTx<<7YN zB@;ng8MvywSu>EQ*P}s%W9^yK&a>giMC-6{V!&IPOlxXvh&d)kQVf0SveTNAtY(Yn zB2~Sgdzd%wuXTymU+Wd^YT)cqSHcyu62+*E6YMf2f4Fc&Vj!#%YZ~=n-@?`a*VyUW z*TD^}l@ML+Jxb0IM%=_Wn!Wm4g_)u(y)gHD&{vkefAFArW7 zL^NVhjB-TJN=X2`BX@*J;5t{21Y52kpK5FbI<2%CI5P+Sn;OgZl$l+r@{X$<=x-12 zu>%hXt-G@j>{tRDW|%md5q9iwx1#E-BElGpvFu-5pHovys!73a6%CS;g_52QzaNG2 zvdGH16nD+bwP?xcaf$Mj=aKUUfU8j(?oAl1b=KXgS)gof=rdgNShR^d{5tp3N{Ci2Fyou zw6^&w6#bJSV@25+2MR0Uyg0+n(&E*w(&HntTqXu8>_x8vGe>D>PR{?9){TLIj@%B62~AlMQe+@uC1bjS`Z3L!xd$E&#EzzxvMN{ z$Q^~2J81t@>m5`SWrus?iI-&k$&jVm=ACN^1s_(PpXGSTp_cS+{lu)N|ND@tGJ^|S zgBHT;_^gETa{A64)>|ll)ehbus$FcREs4=mAdOc(_WbwUl%6ScNlEPQe9UgM5nMc# zY^#NE9r-$wKjKb#d|@Ut1h=o;)^>JUT-prnrE*jdt=k_#GlO+IYm2eCepW8i(K|2c zt;G_`L222CKeV$Yw@-`dQ|$EGGt#rNx$|hGe7*N2_TzXXeeSC_c3NX@vNl>K#?k6W zJ_t@*4CSxgdhqH8HEQt;`swPEyE)H3-XLP<75lu1uVw_%Ec=|40)r_h%x2xA;;;EW7|6ZYw&LmPfM*H)E*4uOKu|7A(Pu())wk*Z{Frz(x8YnJX;{?OM2av* znSH?T=(tJDKbng{T_c5^>A+a~qr2E5x!+swGb6W+*CzhrEdKZOSc5zZm0YvO^4ZF< z=xFzv8jvFI+cANy8Z@GPDB0W3g}&$tw-sXot~F>(`=VJF#$5X#h1=c{0q^pAS$~Or zUkZt~Es5n^LXVNC%&qREi%P{?u8a%mLf;juEUnoW0{ih!vxS)#MIc`r>#Um^#ZK$? zy&6NFSr(@KWP$zU3dPN4rN;a7OS&i|BZI&_P2+N5Xi| zMDUP9I=Wb=iC{^?$jQPw-s9Kbwf`=T{(FKUKyBGK&BJ?A0nW^D3OnSqT zC^NJeGu}oZl72-IlE9vb&|cs&bHfr$ddre13$z#u-bEmiVZ}C*z@3QDU2X?U)0H@3 z`&Osp=P5ygyW9xFn&Sw8JCokS#Ra&EO{D2-=!<1s(T&9=T>ZP;D8sX5T&NXX6u*%! zmf0(DQa=Eh-^l;}PaZ}`yiUiw700|s%Ts>7G_6@V3>`9FhU{JGw1r}tnQ|CrmWX6^ z=HlzR;*^_#ttTpRD{qtH-We!Ft4Y;4!^PF1o@Is+t42o@5XBqF4a1}Xbx(?|i;`7t zOCEGt9BmkzIG?2yfDTxq>oQ~?l}0B%psLp}_ik)A4f?IisQ`6qXdSK$aO-UJ{pf0= zG$ZS{hoH9;qw3_wRi+gEh%R=!&41w3EGQ5T-y7QNL)@h5XvmR%(#e(UC$`?@!NyfV zr*Q+AN*;kg%Q=cw%-F&F4 z{fTQeDi(TaV8AMf_@7h|)?W<>pp~(UxtXe~i?xF#@QG*bqlMo+1E7mve#rgUTA-^8 zD@{Sc1&7Bkw8gwHq+;D%9GW_(_%$Rwpxx`PXLGJoQQ=5F{_7XiIrSi+ABh4d^ULQh z27Y8=um_^_a;W~&M@zUGVmS;iOFB`$3?2i()N=54w!p9d+@M1HYs0^{rlR7&YL6B9?cpuBrbG#@z*wUf;t@da8qZf) z>}w}&Yeg{PV`kReo`Vt_&g&?q`)I`Zy|3d2(l;flp}5LR`@Gn~xuGcSiw2oD1?$pF zxGhOS=tAmXT^^o&SS%G_jG5d=vb~HvAj~=?sMHsWO=f@fMbQrFtpfcnK>${h{+cda z?io7-2an9ECl0#^z8?kSk4IKJbvguFhGtmg4`iq{LMn&06W(n)8Zw=$MdUQI7Y47W zZZ)j>KoccdxT~aUC(X<{16Z7fX*f|b)p2#5E^@joUPCEiPmTjaB-MxZMKL6Ghy)tOLB|r za^clE`r9>lK?S%%GtJqNLbgqS0yA7%(jdbi=~o2ObNT2*6N|IM-=X9DXiZrcH zVB3EE(B!@8i9!GqWrW$|jM>o1Q|1Ttbo@sG5hO++As|ZrvHynhujB9PWoQ2L-0y4Y zI?l3U`7M@LFz!3ED>;(yO zillpzOi@06e^moAXYf(v8vS-);(TI%#v`(7vF)0yVg9RGzVp86#HZSB2Wo4dsN*ob zxGX32GG5(Me^B`gkn%*~?rSN5Ltz#r7w&tSVF)giE6N+M#HU6$$ zR0ONRE`t)A z-Uzix*4)8x2{ApV&@zx{QDD$Ye8 zvMZm_BX`1hW-(?9D^`4dR=HukcA!E1HCC&{1dowVZ!5A9PslR{!FiMCSh6C+7e&ev zGFO^n!!j_G%>uRF8xc|EjPJZ$Nc8;6h6KX^Upg}qeulVPISV7E!$Sml!$zl#DXOhQ zyg?j+_XT1<|riJC03!Krb zWrK*n68-CHnIJVk^(-GBzm$;&mXE*U_~^BNxH5Tr#Z0r_Dqc56YtN=ra*5ZhUKe?H z_-^R}-wMZ0m&l;KxAEi6=B4rhKb?h7vPoM=#c&(q?gM4yTB{BZ3GGc?lq_wUTw{ga zM(M)%=KlHHmntdQTJg|2O>?V z+0wLnb&P8djL$?B<(4!jmDQ&1zqLkNC>muG>9=LWN@k2Pg7g2W)Hn0AoT0&~(}Vp_ zWQq<>A2UZ&B^O60Ad9h+(^KWh{02Y@Vnv5pYHb&(vb76Uq1sX5@u-*=b+P&UL)r!V z{!*T9ymfW8qsOOM|2}~UJ(seytCCh6)~c6>$mV#<;ac1*mR*M*LxhPVEY}`&hs5gb zXH=6U=*U{U)J>UwD~Tf>oTBdWGpv>ktWL6`!^{AN)MPj_FZzM%;6zBK>DLbdD-0S) zj}ba-S-!_J_P`T@35?w$AW51^A3ts5qSe9^KWulV#(=<&j|Aq3|6DCFe&3*}ql@{^ z+W39|JjDRl#(P9iE5AEb4&L01+k^-?ohw6L5v2+Lce&NILxzY+dGdh)e&BnD`sV2( zE>o&ieU`Lh92lPUT4z(11+;JL@w8$2V=gDCKF;Ep&C5BeIqCu{x@VA-gn1OI=sh{{Zy4+_bzO&4z2@)Q)(IBS3}s89-OK*=Xhvl5A&GKgtJdA+S_vJgD=&8 zTx?%OO{RTF51_rFfGTXQbTA0N-FEXM?*%(P7`Vgzs!jQtL!;y~18|{|S)s%ezt~jDj|9;_G5mpb3>+_L-mo29Y#w2rv&fnqn zA~duw$B0&%0)o)8U*1O#enGeqiUYL2?R=LAD@QVo$vR6sGfTOLw)h|+eV;nbV15}8 zWAIbS#2E*2@q>{+1j{!iS;%Kt5Wl97zmMUbrjY+`zs)57bo_lF^)#jXW%%H~`p+}F zKjZw~Cx04W{W2-=WDp$ZZ--fbM)|!*_wP}z!JGb@C_g*we@6MepYZQdIuZUh%FpiJ zpHY5S%KsikAFL1l=2?DrBL0l>yZn4o)xWF{^JkR*qp|;t@VjJrlBvI}37l#FdXE2{ zr~c{uJ7GVmnqSrnrf{$`@c(I?KV5&P!Y4-mWpMcam*4;N{+%kG=<=6s{qFt0g#oTm!9-7Y{{xTdGjRX_ literal 0 HcmV?d00001 diff --git a/source/tests/test_data/genuine/empty_no_dimensions.xlsx b/source/tests/test_data/genuine/empty_no_dimensions.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e402883cb832541b75ff0e0eac09e26766fca02d GIT binary patch literal 10300 zcmb7~1yq$=(|`}seP|Djgdm;L4bt66cOFteN;-r?iy)l}(xpgY?~5Ex^4^>5BNuiL^A4QY9n4(vt({57KGBtlEFvWSaQQV>>SP;N|oMB)O)5%n=FjS2)xnp5r|Xk$zyOJ&tFYS zTzyFP!Y#kGjIzZvpzq8$%@JWXaPVBLH$8lN3&#Svin$7v)X68fWoP)p&51w^6^oHd z5?k;~ouuuUD3z*M_E5@T8k>4(q$F=^0Ft^H`ZVGY=e#mQ#a8w+9DnA_l&Wm71gljr--lHQr<0FeCY2*#OjD=% zd`NpD$v57QS1`!rhg$-32B-zkDNMbL=U+TWLJ%|UxXwXf;_)0nerm!av|(BG$R|?| z1NMpCr`Of}+N-adsaXael4ujh!KPfZe}0my0qggXQ8^+QX-3c6I#3qw%*26(&qu=Tww?rkS6Oe ztb)9oKk1pM)CtlZq5i7$;yph$lk=?T*Sgrk3|yieEQX9y z>BbE)_A(aG`clm0(gAvtGe`I?oU}P@mU|+=Rqv7OWM

-9^4#wUfrDm68W&%)&# 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 K=0Nf7*Z%=_7p>0# literal 0 HcmV?d00001 diff --git a/source/tests/test_data/genuine/empty_with_no_properties.xlsx b/source/tests/test_data/genuine/empty_with_no_properties.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8eaa8729f05fddf36996d42248d3394618fcb944 GIT binary patch literal 9476 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 MhH!QsG6n$ne}ZOyW&i*H literal 0 HcmV?d00001 diff --git a/source/tests/test_data/genuine/merge_range.xlsx b/source/tests/test_data/genuine/merge_range.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9452e362b623108660651ae51b199adb3d059133 GIT binary patch literal 8742 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 literal 0 HcmV?d00001 diff --git a/source/tests/test_data/genuine/unicode.xlsx b/source/tests/test_data/genuine/unicode.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b0e0f68a8a631f82317c778d33869c42fef6cc04 GIT binary patch literal 8189 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 literal 0 HcmV?d00001 diff --git a/source/tests/packaging/a.txt b/source/tests/test_data/packaging/a.txt similarity index 100% rename from source/tests/packaging/a.txt rename to source/tests/test_data/packaging/a.txt diff --git a/source/tests/packaging/a.xml b/source/tests/test_data/packaging/a.xml similarity index 100% rename from source/tests/packaging/a.xml rename to source/tests/test_data/packaging/a.xml diff --git a/source/tests/test_data/packaging/a.zip b/source/tests/test_data/packaging/a.zip new file mode 100644 index 0000000000000000000000000000000000000000..bd6b610e7ce1ad2cb6884f65261f0c421f22cde5 GIT binary patch literal 458 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 KuV|0eqkjWH+WjN| literal 0 HcmV?d00001 diff --git a/source/tests/test_data/reader/date_1904.xlsx b/source/tests/test_data/reader/date_1904.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d18e7c483299897c321cb3a5885bf7f0b98183ea GIT binary patch literal 28038 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 eb^fUh>i_P{HWu7Ku>lxM;Kc{j>u + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/tests/test_data/reader/merged-ranges.xml b/source/tests/test_data/reader/merged-ranges.xml new file mode 100644 index 00000000..72b1322b --- /dev/null +++ b/source/tests/test_data/reader/merged-ranges.xml @@ -0,0 +1,2 @@ + +12340123464646546464610 \ No newline at end of file diff --git a/source/tests/test_data/reader/null_archive.xlsx b/source/tests/test_data/reader/null_archive.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..967263ab8a68d2f5626d2ba7b24575fa340bf924 GIT binary patch literal 126 zcmWIWW@h1H0D+T5%64D|l;8u>d8Iiy@oAYksd^PT#T5bGj7%a7xK)ERGBPNDC?G)B S%gP24WduSSAgu%9FaQ96VG&#a literal 0 HcmV?d00001 diff --git a/source/tests/test_data/reader/null_file.xlsx b/source/tests/test_data/reader/null_file.xlsx new file mode 100644 index 00000000..e69de29b diff --git a/source/tests/test_data/reader/shared-strings-rich.xml b/source/tests/test_data/reader/shared-strings-rich.xml new file mode 100644 index 00000000..b7d561e9 --- /dev/null +++ b/source/tests/test_data/reader/shared-strings-rich.xml @@ -0,0 +1,33 @@ + + + + Welcome + + + + to the best + + + + + + + + + shop in + + + + + + + + + + town + + + + let's play + + \ No newline at end of file diff --git a/source/tests/test_data/reader/sharedStrings-emptystring.xml b/source/tests/test_data/reader/sharedStrings-emptystring.xml new file mode 100644 index 00000000..1dd7caf0 --- /dev/null +++ b/source/tests/test_data/reader/sharedStrings-emptystring.xml @@ -0,0 +1,3 @@ + +Testing empty cell + diff --git a/source/tests/test_data/reader/sharedStrings.xml b/source/tests/test_data/reader/sharedStrings.xml new file mode 100644 index 00000000..61acf409 --- /dev/null +++ b/source/tests/test_data/reader/sharedStrings.xml @@ -0,0 +1,2 @@ + +This is cell A1 in Sheet 1This is cell G5 \ No newline at end of file diff --git a/source/tests/test_data/reader/sheet2.xml b/source/tests/test_data/reader/sheet2.xml new file mode 100644 index 00000000..2870e65e --- /dev/null +++ b/source/tests/test_data/reader/sheet2.xml @@ -0,0 +1,2 @@ + +10.0120.0230.0340.04510.0560.0677.0000000000000007E-280.0890.09100.1110.11120.12130.13140.14000000000000001150.15160.16170.17180.18190.19200.2210.21220.22230.23240.24250.25260.26270.27280.28000000000000003290.28999999999999998300.3 \ No newline at end of file diff --git a/source/tests/test_data/reader/simple-styles.xml b/source/tests/test_data/reader/simple-styles.xml new file mode 100644 index 00000000..3cee3ed0 --- /dev/null +++ b/source/tests/test_data/reader/simple-styles.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/tests/test_data/reader/workbook.xml b/source/tests/test_data/reader/workbook.xml new file mode 100644 index 00000000..2697d4ca --- /dev/null +++ b/source/tests/test_data/reader/workbook.xml @@ -0,0 +1,2 @@ + +'My Sheeet'!$D$8 \ No newline at end of file diff --git a/source/tests/test_data/reader/workbook_namedrange.xml b/source/tests/test_data/reader/workbook_namedrange.xml new file mode 100644 index 00000000..1ab606fe --- /dev/null +++ b/source/tests/test_data/reader/workbook_namedrange.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + 'My Sheeet with a , and '''!$U$16:$U$24,'My Sheeet with a , and '''!$V$28:$V$36 + + + diff --git a/source/tests/test_data/writer/expected/.rels b/source/tests/test_data/writer/expected/.rels new file mode 100644 index 00000000..9a330b09 --- /dev/null +++ b/source/tests/test_data/writer/expected/.rels @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/[Content_Types].xml b/source/tests/test_data/writer/expected/[Content_Types].xml new file mode 100644 index 00000000..883203d1 --- /dev/null +++ b/source/tests/test_data/writer/expected/[Content_Types].xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/app.xml b/source/tests/test_data/writer/expected/app.xml new file mode 100644 index 00000000..390d0f96 --- /dev/null +++ b/source/tests/test_data/writer/expected/app.xml @@ -0,0 +1,2 @@ + +Microsoft Excel0falsefalsefalsefalse12.0000Worksheets3SheetSheet1Sheet2 \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/core.xml b/source/tests/test_data/writer/expected/core.xml new file mode 100644 index 00000000..48b61c6e --- /dev/null +++ b/source/tests/test_data/writer/expected/core.xml @@ -0,0 +1,2 @@ + +TEST_USERSOMEBODY2010-04-01T20:30:00Z2010-04-05T14:05:30Z \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/decimal.xml b/source/tests/test_data/writer/expected/decimal.xml new file mode 100644 index 00000000..1bbba5fd --- /dev/null +++ b/source/tests/test_data/writer/expected/decimal.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + 3.14 + + + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/font.xml b/source/tests/test_data/writer/expected/font.xml new file mode 100644 index 00000000..e6f689de --- /dev/null +++ b/source/tests/test_data/writer/expected/font.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/long_number.xml b/source/tests/test_data/writer/expected/long_number.xml new file mode 100644 index 00000000..0b43bc9c --- /dev/null +++ b/source/tests/test_data/writer/expected/long_number.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + 9781231231230 + + + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/sharedStrings.xml b/source/tests/test_data/writer/expected/sharedStrings.xml new file mode 100644 index 00000000..76c63a9f --- /dev/null +++ b/source/tests/test_data/writer/expected/sharedStrings.xml @@ -0,0 +1,2 @@ + +helloworldnice \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/sheet1.xml b/source/tests/test_data/writer/expected/sheet1.xml new file mode 100644 index 00000000..2f416116 --- /dev/null +++ b/source/tests/test_data/writer/expected/sheet1.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + 0 + + + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/sheet1_auto_filter.xml b/source/tests/test_data/writer/expected/sheet1_auto_filter.xml new file mode 100644 index 00000000..b4178b82 --- /dev/null +++ b/source/tests/test_data/writer/expected/sheet1_auto_filter.xml @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/sheet1_bool.xml b/source/tests/test_data/writer/expected/sheet1_bool.xml new file mode 100644 index 00000000..be769d04 --- /dev/null +++ b/source/tests/test_data/writer/expected/sheet1_bool.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + 0 + + + + + 1 + + + + diff --git a/source/tests/test_data/writer/expected/sheet1_formula.xml b/source/tests/test_data/writer/expected/sheet1_formula.xml new file mode 100644 index 00000000..e573f3bb --- /dev/null +++ b/source/tests/test_data/writer/expected/sheet1_formula.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + 10 + + + + + 32 + + + + + F1+F2 + + + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/sheet1_freeze_panes_both.xml b/source/tests/test_data/writer/expected/sheet1_freeze_panes_both.xml new file mode 100644 index 00000000..772f2d66 --- /dev/null +++ b/source/tests/test_data/writer/expected/sheet1_freeze_panes_both.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + 0 + + + + diff --git a/source/tests/test_data/writer/expected/sheet1_freeze_panes_horiz.xml b/source/tests/test_data/writer/expected/sheet1_freeze_panes_horiz.xml new file mode 100644 index 00000000..b926678e --- /dev/null +++ b/source/tests/test_data/writer/expected/sheet1_freeze_panes_horiz.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + 0 + + + + diff --git a/source/tests/test_data/writer/expected/sheet1_freeze_panes_vert.xml b/source/tests/test_data/writer/expected/sheet1_freeze_panes_vert.xml new file mode 100644 index 00000000..7bd71acc --- /dev/null +++ b/source/tests/test_data/writer/expected/sheet1_freeze_panes_vert.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + 0 + + + + diff --git a/source/tests/test_data/writer/expected/sheet1_height.xml b/source/tests/test_data/writer/expected/sheet1_height.xml new file mode 100644 index 00000000..608ab99d --- /dev/null +++ b/source/tests/test_data/writer/expected/sheet1_height.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + 10 + + + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/sheet1_hyperlink.xml b/source/tests/test_data/writer/expected/sheet1_hyperlink.xml new file mode 100644 index 00000000..cc2a0e62 --- /dev/null +++ b/source/tests/test_data/writer/expected/sheet1_hyperlink.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + diff --git a/source/tests/test_data/writer/expected/sheet1_hyperlink.xml.rels b/source/tests/test_data/writer/expected/sheet1_hyperlink.xml.rels new file mode 100644 index 00000000..424209dd --- /dev/null +++ b/source/tests/test_data/writer/expected/sheet1_hyperlink.xml.rels @@ -0,0 +1,6 @@ + + + + + + diff --git a/source/tests/test_data/writer/expected/sheet1_style.xml b/source/tests/test_data/writer/expected/sheet1_style.xml new file mode 100644 index 00000000..27af47e6 --- /dev/null +++ b/source/tests/test_data/writer/expected/sheet1_style.xml @@ -0,0 +1 @@ +0.13 \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/short_number.xml b/source/tests/test_data/writer/expected/short_number.xml new file mode 100644 index 00000000..877408b6 --- /dev/null +++ b/source/tests/test_data/writer/expected/short_number.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + 1234567890 + + + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/simple-styles.xml b/source/tests/test_data/writer/expected/simple-styles.xml new file mode 100644 index 00000000..3cee3ed0 --- /dev/null +++ b/source/tests/test_data/writer/expected/simple-styles.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/styles.xml b/source/tests/test_data/writer/expected/styles.xml new file mode 100644 index 00000000..2da6be61 --- /dev/null +++ b/source/tests/test_data/writer/expected/styles.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/theme1.xml b/source/tests/test_data/writer/expected/theme1.xml new file mode 100644 index 00000000..9944f3ec --- /dev/null +++ b/source/tests/test_data/writer/expected/theme1.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/workbook.xml b/source/tests/test_data/writer/expected/workbook.xml new file mode 100644 index 00000000..65095a84 --- /dev/null +++ b/source/tests/test_data/writer/expected/workbook.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/workbook.xml.rels b/source/tests/test_data/writer/expected/workbook.xml.rels new file mode 100644 index 00000000..0385c7c5 --- /dev/null +++ b/source/tests/test_data/writer/expected/workbook.xml.rels @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/source/tests/test_data/writer/expected/workbook_auto_filter.xml b/source/tests/test_data/writer/expected/workbook_auto_filter.xml new file mode 100644 index 00000000..25f28b96 --- /dev/null +++ b/source/tests/test_data/writer/expected/workbook_auto_filter.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/source/writer/writer.cpp b/source/writer/writer.cpp deleted file mode 100644 index 1a1d46aa..00000000 --- a/source/writer/writer.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "writer.h" - -namespace xlnt { - -void writer::save_workbook(const workbook &/*workbook*/, const std::string &/*filename*/) -{ - -} - -} // namespace xlnt diff --git a/third-party/pugixml b/third-party/pugixml new file mode 160000 index 00000000..6d43ad28 --- /dev/null +++ b/third-party/pugixml @@ -0,0 +1 @@ +Subproject commit 6d43ad2870b9411c409fcd12937e02eb44b2a76c