From 8665272babceac3f6bc064281bb300823825a92d Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Sat, 15 Jun 2019 20:25:19 +0900 Subject: [PATCH] test: add test for custom basic_value type --- tests/test_parse_file.cpp | 175 +++++++++++++++++++++++++++++++++++++- 1 file changed, 174 insertions(+), 1 deletion(-) diff --git a/tests/test_parse_file.cpp b/tests/test_parse_file.cpp index 0e974b7..ef3cf84 100644 --- a/tests/test_parse_file.cpp +++ b/tests/test_parse_file.cpp @@ -8,7 +8,8 @@ #include #include #include - +#include +#include BOOST_AUTO_TEST_CASE(test_example) { @@ -693,3 +694,175 @@ BOOST_AUTO_TEST_CASE(test_files_end_with_empty_lines) BOOST_CHECK_EQUAL(toml::find(toml::find(data, "table"), "key"), "value"); } } + +BOOST_AUTO_TEST_CASE(test_example_preserve_comment) +{ + const auto data = toml::parse("toml/tests/example.toml"); + + BOOST_CHECK_EQUAL(toml::find(data, "title"), "TOML Example"); + const auto& owner = toml::find(data, "owner"); + { + BOOST_CHECK_EQUAL(toml::find(owner, "name"), "Tom Preston-Werner"); + BOOST_CHECK_EQUAL(toml::find(owner, "organization"), "GitHub"); + BOOST_CHECK_EQUAL(toml::find(owner, "bio"), + "GitHub Cofounder & CEO\nLikes tater tots and beer."); + BOOST_CHECK_EQUAL(toml::find(owner, "dob"), + toml::offset_datetime(toml::local_date(1979, toml::month_t::May, 27), + toml::local_time(7, 32, 0), toml::time_offset(0, 0))); + BOOST_CHECK_EQUAL(toml::find(owner, "dob").comments().at(0), + " First class dates? Why not?"); + } + + const auto& database = toml::find(data, "database"); + { + BOOST_CHECK_EQUAL(toml::find(database, "server"), "192.168.1.1"); + const std::vector expected_ports{8001, 8001, 8002}; + BOOST_CHECK(toml::find>(database, "ports") == expected_ports); + BOOST_CHECK_EQUAL(toml::find(database, "connection_max"), 5000); + BOOST_CHECK_EQUAL(toml::find(database, "enabled"), true); + } + + const auto& servers = toml::find(data, "servers"); + { + const auto& alpha = toml::find(servers, "alpha"); + BOOST_CHECK_EQUAL(alpha.comments().at(0), + " You can indent as you please. Tabs or spaces. TOML don't care."); + BOOST_CHECK_EQUAL(toml::find(alpha, "ip"), "10.0.0.1"); + BOOST_CHECK_EQUAL(toml::find(alpha, "dc"), "eqdc10"); + + const auto& beta = toml::find(servers, "beta"); + BOOST_CHECK_EQUAL(toml::find(beta, "ip"), "10.0.0.2"); + BOOST_CHECK_EQUAL(toml::find(beta, "dc"), "eqdc10"); + BOOST_CHECK_EQUAL(toml::find(beta, "country"), + "\xE4\xB8\xAD\xE5\x9B\xBD"); + BOOST_CHECK_EQUAL(toml::find(beta, "country").comments().at(0), + " This should be parsed as UTF-8"); + } + + const auto& clients = toml::find(data, "clients"); + { + BOOST_CHECK_EQUAL(toml::find(clients, "data").comments().at(0), + " just an update to make sure parsers support it"); + + + toml::array clients_data = toml::find(clients, "data"); + std::vector expected_name{"gamma", "delta"}; + BOOST_CHECK(toml::get>(clients_data.at(0)) == + expected_name); + std::vector expected_number{1, 2}; + BOOST_CHECK(toml::get>(clients_data.at(1)) == + expected_number); + std::vector expected_hosts{"alpha", "omega"}; + BOOST_CHECK(toml::find>(clients, "hosts") == + expected_hosts); + + BOOST_CHECK_EQUAL(toml::find(clients, "hosts").comments().at(0), + " Line breaks are OK when inside arrays"); + } + + std::vector products = + toml::find>(data, "products"); + { + BOOST_CHECK_EQUAL(toml::get(products.at(0).at("name")), + "Hammer"); + BOOST_CHECK_EQUAL(toml::get(products.at(0).at("sku")), + 738594937); + + BOOST_CHECK_EQUAL(toml::get(products.at(1).at("name")), + "Nail"); + BOOST_CHECK_EQUAL(toml::get(products.at(1).at("sku")), + 284758393); + BOOST_CHECK_EQUAL(toml::get(products.at(1).at("color")), + "gray"); + } +} + +BOOST_AUTO_TEST_CASE(test_example_preserve_stdmap_stddeque) +{ + const auto data = toml::parse("toml/tests/example.toml"); + + static_assert(std::is_same::type> + >::value, ""); + static_assert(std::is_same::type> + >::value, ""); + + BOOST_CHECK_EQUAL(toml::find(data, "title"), "TOML Example"); + const auto& owner = toml::find(data, "owner"); + { + BOOST_CHECK_EQUAL(toml::find(owner, "name"), "Tom Preston-Werner"); + BOOST_CHECK_EQUAL(toml::find(owner, "organization"), "GitHub"); + BOOST_CHECK_EQUAL(toml::find(owner, "bio"), + "GitHub Cofounder & CEO\nLikes tater tots and beer."); + BOOST_CHECK_EQUAL(toml::find(owner, "dob"), + toml::offset_datetime(toml::local_date(1979, toml::month_t::May, 27), + toml::local_time(7, 32, 0), toml::time_offset(0, 0))); + BOOST_CHECK_EQUAL(toml::find(owner, "dob").comments().at(0), + " First class dates? Why not?"); + } + + const auto& database = toml::find(data, "database"); + { + BOOST_CHECK_EQUAL(toml::find(database, "server"), "192.168.1.1"); + const std::vector expected_ports{8001, 8001, 8002}; + BOOST_CHECK(toml::find>(database, "ports") == expected_ports); + BOOST_CHECK_EQUAL(toml::find(database, "connection_max"), 5000); + BOOST_CHECK_EQUAL(toml::find(database, "enabled"), true); + } + + const auto& servers = toml::find(data, "servers"); + { + const auto& alpha = toml::find(servers, "alpha"); + BOOST_CHECK_EQUAL(alpha.comments().at(0), + " You can indent as you please. Tabs or spaces. TOML don't care."); + BOOST_CHECK_EQUAL(toml::find(alpha, "ip"), "10.0.0.1"); + BOOST_CHECK_EQUAL(toml::find(alpha, "dc"), "eqdc10"); + + const auto& beta = toml::find(servers, "beta"); + BOOST_CHECK_EQUAL(toml::find(beta, "ip"), "10.0.0.2"); + BOOST_CHECK_EQUAL(toml::find(beta, "dc"), "eqdc10"); + BOOST_CHECK_EQUAL(toml::find(beta, "country"), + "\xE4\xB8\xAD\xE5\x9B\xBD"); + BOOST_CHECK_EQUAL(toml::find(beta, "country").comments().at(0), + " This should be parsed as UTF-8"); + } + + const auto& clients = toml::find(data, "clients"); + { + BOOST_CHECK_EQUAL(toml::find(clients, "data").comments().at(0), + " just an update to make sure parsers support it"); + + + toml::array clients_data = toml::find(clients, "data"); + std::vector expected_name{"gamma", "delta"}; + BOOST_CHECK(toml::get>(clients_data.at(0)) == + expected_name); + std::vector expected_number{1, 2}; + BOOST_CHECK(toml::get>(clients_data.at(1)) == + expected_number); + std::vector expected_hosts{"alpha", "omega"}; + BOOST_CHECK(toml::find>(clients, "hosts") == + expected_hosts); + + BOOST_CHECK_EQUAL(toml::find(clients, "hosts").comments().at(0), + " Line breaks are OK when inside arrays"); + } + + std::vector products = + toml::find>(data, "products"); + { + BOOST_CHECK_EQUAL(toml::get(products.at(0).at("name")), + "Hammer"); + BOOST_CHECK_EQUAL(toml::get(products.at(0).at("sku")), + 738594937); + + BOOST_CHECK_EQUAL(toml::get(products.at(1).at("name")), + "Nail"); + BOOST_CHECK_EQUAL(toml::get(products.at(1).at("sku")), + 284758393); + BOOST_CHECK_EQUAL(toml::get(products.at(1).at("color")), + "gray"); + } +}