930bf0ad58
new file: .editorconfig new file: .gitattributes new file: .gitignore new file: .gitmodules new file: LICENSE new file: README.md new file: examples/example.cpp new file: examples/example.toml new file: examples/meson.build new file: include/toml++/toml.h new file: include/toml++/toml_array.h new file: include/toml++/toml_common.h new file: include/toml++/toml_formatter.h new file: include/toml++/toml_node.h new file: include/toml++/toml_node_view.h new file: include/toml++/toml_parser.h new file: include/toml++/toml_table.h new file: include/toml++/toml_utf8.h new file: include/toml++/toml_utf8_generated.h new file: include/toml++/toml_value.h new file: meson.build new file: python/ci_single_header_check.py new file: python/generate_single_header.py new file: python/generate_unicode_functions.py new file: tests/catch2 new file: tests/catch2.h new file: tests/lifetimes.cpp new file: tests/main.cpp new file: tests/meson.build new file: tests/parsing_arrays.cpp new file: tests/parsing_booleans.cpp new file: tests/parsing_comments.cpp new file: tests/parsing_dates_and_times.cpp new file: tests/parsing_floats.cpp new file: tests/parsing_integers.cpp new file: tests/parsing_key_value_pairs.cpp new file: tests/parsing_spec_example.cpp new file: tests/parsing_strings.cpp new file: tests/parsing_tables.cpp new file: tests/tests.cpp new file: tests/tests.h new file: toml.hpp new file: vs/.runsettings new file: vs/example.vcxproj new file: vs/test_char.vcxproj new file: vs/test_char8.vcxproj new file: vs/test_char8_noexcept.vcxproj new file: vs/test_char_noexcept.vcxproj new file: vs/test_strict_char.vcxproj new file: vs/test_strict_char8.vcxproj new file: vs/test_strict_char8_noexcept.vcxproj new file: vs/test_strict_char_noexcept.vcxproj new file: vs/toml++.natvis new file: vs/toml++.props new file: vs/toml++.sln new file: vs/toml++.vcxproj new file: vs/toml++.vcxproj.filters
89 lines
2.6 KiB
C++
89 lines
2.6 KiB
C++
#include "tests.h"
|
|
|
|
TOML_PUSH_WARNINGS
|
|
TOML_DISABLE_FIELD_INIT_WARNING
|
|
|
|
TEST_CASE("parsing TOML spec example")
|
|
{
|
|
static constexpr auto toml_text =
|
|
S(R"(# This is a TOML document.
|
|
|
|
title = "TOML Example"
|
|
|
|
[owner]
|
|
name = "Tom Preston-Werner"
|
|
dob = 1979-05-27T07:32:00-08:00 # First class dates
|
|
|
|
[database]
|
|
server = "192.168.1.1"
|
|
ports = [ 8001, 8001, 8002 ]
|
|
connection_max = 5000
|
|
enabled = true
|
|
|
|
[servers]
|
|
|
|
# Indentation (tabs and/or spaces) is allowed but not required
|
|
[servers.alpha]
|
|
ip = "10.0.0.1"
|
|
dc = "eqdc10"
|
|
|
|
[servers.beta]
|
|
ip = "10.0.0.2"
|
|
dc = "eqdc10"
|
|
|
|
[clients]
|
|
data = [ ["gamma", "delta"], [1, 2] ]
|
|
|
|
# Line breaks are OK when inside arrays
|
|
hosts = [
|
|
"alpha",
|
|
"omega"
|
|
])"sv);
|
|
|
|
parsing_should_succeed(toml_text, [](table&& tbl) noexcept
|
|
{
|
|
CHECK(tbl.size() == 5);
|
|
|
|
CHECK(tbl[S("title")] == S("TOML Example"sv));
|
|
|
|
CHECK(tbl[S("owner")]);
|
|
CHECK(tbl[S("owner")].as<table>());
|
|
CHECK(tbl[S("owner")][S("name")] == S("Tom Preston-Werner"sv));
|
|
const auto dob = date_time{ { 1979, 5, 27 }, { 7, 32 }, time_offset{ -8 } };
|
|
CHECK(tbl[S("owner")][S("dob")] == dob);
|
|
|
|
CHECK(tbl[S("database")].as<table>());
|
|
CHECK(tbl[S("database")][S("server")] == S("192.168.1.1"sv));
|
|
const auto ports = { 8001, 8001, 8002 };
|
|
CHECK(tbl[S("database")][S("ports")] == ports);
|
|
CHECK(tbl[S("database")][S("connection_max")] == 5000);
|
|
CHECK(tbl[S("database")][S("enabled")] == true);
|
|
|
|
CHECK(tbl[S("servers")].as<table>());
|
|
CHECK(tbl[S("servers")][S("alpha")].as<table>());
|
|
CHECK(tbl[S("servers")][S("alpha")][S("ip")] == S("10.0.0.1"sv));
|
|
CHECK(tbl[S("servers")][S("alpha")][S("dc")] == S("eqdc10"sv));
|
|
CHECK(tbl[S("servers")][S("beta")].as<table>());
|
|
CHECK(tbl[S("servers")][S("beta")][S("ip")] == S("10.0.0.2"sv));
|
|
CHECK(tbl[S("servers")][S("beta")][S("dc")] == S("eqdc10"sv));
|
|
|
|
CHECK(tbl[S("clients")].as<table>());
|
|
REQUIRE(tbl[S("clients")][S("data")].as<array>());
|
|
CHECK(tbl[S("clients")][S("data")].as<array>()->size() == 2);
|
|
REQUIRE(tbl[S("clients")][S("data")][0].as<array>());
|
|
CHECK(tbl[S("clients")][S("data")][0].as<array>()->size() == 2);
|
|
CHECK(tbl[S("clients")][S("data")][0][0] == S("gamma"sv));
|
|
CHECK(tbl[S("clients")][S("data")][0][1] == S("delta"sv));
|
|
REQUIRE(tbl[S("clients")][S("data")][1].as<array>());
|
|
CHECK(tbl[S("clients")][S("data")][1].as<array>()->size() == 2);
|
|
CHECK(tbl[S("clients")][S("data")][1][0] == 1);
|
|
CHECK(tbl[S("clients")][S("data")][1][1] == 2);
|
|
REQUIRE(tbl[S("clients")][S("hosts")].as<array>());
|
|
CHECK(tbl[S("clients")][S("hosts")].as<array>()->size() == 2);
|
|
CHECK(tbl[S("clients")][S("hosts")][0] == S("alpha"sv));
|
|
CHECK(tbl[S("clients")][S("hosts")][1] == S("omega"sv));
|
|
});
|
|
}
|
|
|
|
TOML_POP_WARNINGS
|