diff --git a/tests/test_parse_file.cpp b/tests/test_parse_file.cpp index ef3cf84..6283c04 100644 --- a/tests/test_parse_file.cpp +++ b/tests/test_parse_file.cpp @@ -194,6 +194,178 @@ BOOST_AUTO_TEST_CASE(test_hard_example) expected_multi_line_array); } +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"); + } +} + // --------------------------------------------------------------------------- // after here, the test codes generate the content of a file. @@ -695,174 +867,3 @@ BOOST_AUTO_TEST_CASE(test_files_end_with_empty_lines) } } -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"); - } -}