From 1265952b97d2533a48dba5eaa42eabb3daa7293d Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Wed, 17 May 2017 12:54:13 +0900 Subject: [PATCH] split parsing unicode file --- tests/CMakeLists.txt | 1 + tests/test_parse_file.cpp | 30 --------------------------- tests/test_parse_unicode.cpp | 40 ++++++++++++++++++++++++++++++++++++ toml/parser.hpp | 3 ++- 4 files changed, 43 insertions(+), 31 deletions(-) create mode 100644 tests/test_parse_unicode.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2578947..09cccef 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -10,6 +10,7 @@ set(TEST_NAMES test_acceptor test_parser test_parse_file + test_parse_unicode ) CHECK_CXX_COMPILER_FLAG("-Wall" COMPILER_SUPPORTS_WALL) diff --git a/tests/test_parse_file.cpp b/tests/test_parse_file.cpp index 27281cf..812c8de 100644 --- a/tests/test_parse_file.cpp +++ b/tests/test_parse_file.cpp @@ -123,33 +123,3 @@ BOOST_AUTO_TEST_CASE(test_hard_example) BOOST_CHECK(toml::get>(bit.at("multi_line_array")) == expected_multi_line_array); } - -BOOST_AUTO_TEST_CASE(test_hard_example_unicode) -{ - const auto data = toml::parse("toml/tests/hard_example_unicode.toml"); - - const auto the = toml::get(data.at("the")); - BOOST_CHECK_EQUAL(toml::get(the.at("test_string")), - u8"Ýôú'ℓℓ λáƭè ₥è áƒƭèř ƭλïƨ - #"); - - const auto hard = toml::get(the.at("hard")); - const std::vector expected_the_hard_test_array{"] ", " # "}; - BOOST_CHECK(toml::get>(hard.at("test_array")) == - expected_the_hard_test_array); - const std::vector expected_the_hard_test_array2{ - u8"Tèƨƭ #11 ]ƥřôƲèδ ƭλáƭ", u8"Éжƥèřï₥èñƭ #9 ωáƨ á ƨúççèƨƨ"}; - BOOST_CHECK(toml::get>(hard.at("test_array2")) == - expected_the_hard_test_array2); - BOOST_CHECK_EQUAL(toml::get(hard.at("another_test_string")), - u8"§á₥è ƭλïñϱ, βúƭ ωïƭλ á ƨƭřïñϱ #"); - BOOST_CHECK_EQUAL(toml::get(hard.at("harder_test_string")), - u8" Âñδ ωλèñ \"'ƨ ářè ïñ ƭλè ƨƭřïñϱ, áℓôñϱ ωïƭλ # \""); - - const auto bit = toml::get(hard.at(std::string(u8"βïƭ#"))); - BOOST_CHECK_EQUAL(toml::get(bit.at(std::string(u8"ωλáƭ?"))), - u8"Ýôú δôñ'ƭ ƭλïñƙ ƨô₥è úƨèř ωôñ'ƭ δô ƭλáƭ?"); - const std::vector expected_multi_line_array{"]"}; - BOOST_CHECK(toml::get>(bit.at("multi_line_array")) == - expected_multi_line_array); - -} diff --git a/tests/test_parse_unicode.cpp b/tests/test_parse_unicode.cpp new file mode 100644 index 0000000..42c692f --- /dev/null +++ b/tests/test_parse_unicode.cpp @@ -0,0 +1,40 @@ +#define BOOST_TEST_MODULE "test_parse_unicode" +#ifdef UNITTEST_FRAMEWORK_LIBRARY_EXIST +#include +#else +#define BOOST_TEST_NO_LIB +#include +#endif +#include +#include +#include + +BOOST_AUTO_TEST_CASE(test_hard_example_unicode) +{ + const auto data = toml::parse("toml/tests/hard_example_unicode.toml"); + + const auto the = toml::get(data.at("the")); + BOOST_CHECK_EQUAL(toml::get(the.at("test_string")), + u8"Ýôú'ℓℓ λáƭè ₥è áƒƭèř ƭλïƨ - #"); + + const auto hard = toml::get(the.at("hard")); + const std::vector expected_the_hard_test_array{"] ", " # "}; + BOOST_CHECK(toml::get>(hard.at("test_array")) == + expected_the_hard_test_array); + const std::vector expected_the_hard_test_array2{ + u8"Tèƨƭ #11 ]ƥřôƲèδ ƭλáƭ", u8"Éжƥèřï₥èñƭ #9 ωáƨ á ƨúççèƨƨ"}; + BOOST_CHECK(toml::get>(hard.at("test_array2")) == + expected_the_hard_test_array2); + BOOST_CHECK_EQUAL(toml::get(hard.at("another_test_string")), + u8"§á₥è ƭλïñϱ, βúƭ ωïƭλ á ƨƭřïñϱ #"); + BOOST_CHECK_EQUAL(toml::get(hard.at("harder_test_string")), + u8" Âñδ ωλèñ \"'ƨ ářè ïñ ƭλè ƨƭřïñϱ, áℓôñϱ ωïƭλ # \""); + + const auto bit = toml::get(hard.at(std::string(u8"βïƭ#"))); + BOOST_CHECK_EQUAL(toml::get(bit.at(std::string(u8"ωλáƭ?"))), + u8"Ýôú δôñ'ƭ ƭλïñƙ ƨô₥è úƨèř ωôñ'ƭ δô ƭλáƭ?"); + const std::vector expected_multi_line_array{"]"}; + BOOST_CHECK(toml::get>(bit.at("multi_line_array")) == + expected_multi_line_array); + +} diff --git a/toml/parser.hpp b/toml/parser.hpp index 6927f93..45c3012 100644 --- a/toml/parser.hpp +++ b/toml/parser.hpp @@ -6,6 +6,7 @@ #include #include #include +#include #include namespace toml @@ -1071,7 +1072,7 @@ toml::Table parse(std::basic_istream& is) toml::Table parse(const std::string& filename) { - std::ifstream ifs(filename, std::ios::binary); + std::ifstream ifs(filename); if(!ifs.good()) throw std::runtime_error("file open error: " + filename); return parse(ifs); }