From 2080b301109fb55e385f6116d61d70dca7995758 Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Thu, 13 Dec 2018 00:38:24 +0900 Subject: [PATCH] add test cases for test_to_toml --- tests/CMakeLists.txt | 3 +- tests/test_to_toml.cpp | 228 ++++++++++++++++++++++++++++------------- 2 files changed, 157 insertions(+), 74 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index d56e73b..2140d54 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -20,8 +20,7 @@ set(TEST_NAMES test_parse_key test_parse_table_key test_get - -# test_to_toml + test_to_toml # test_from_toml # test_get_or # test_parse_file diff --git a/tests/test_to_toml.cpp b/tests/test_to_toml.cpp index dca9799..464a760 100644 --- a/tests/test_to_toml.cpp +++ b/tests/test_to_toml.cpp @@ -9,97 +9,181 @@ #include #include -BOOST_AUTO_TEST_CASE(test_to_toml_exact) +BOOST_AUTO_TEST_CASE(test_value_boolean) { - toml::Boolean b(true); - toml::Integer i(42); - toml::Float f(3.14); - toml::String s("hoge"); - toml::Datetime d(std::chrono::system_clock::now()); - toml::Array a; - a.emplace_back(2); - a.emplace_back(7); - a.emplace_back(1); - a.emplace_back(8); - a.emplace_back(2); - toml::Table t; - t.emplace("val1", true); - t.emplace("val2", 42); - t.emplace("val3", 3.14); - t.emplace("val4", "piyo"); - - auto v1 = toml::to_toml(b); - auto v2 = toml::to_toml(i); - auto v3 = toml::to_toml(f); - auto v4 = toml::to_toml(s); - auto v5 = toml::to_toml(d); - auto v6 = toml::to_toml(a); - auto v7 = toml::to_toml(t); + toml::value v1 = toml::to_toml(true); + toml::value v2 = toml::to_toml(false); BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean); - BOOST_CHECK_EQUAL(v2.type(), toml::value_t::Integer); - BOOST_CHECK_EQUAL(v3.type(), toml::value_t::Float); - BOOST_CHECK_EQUAL(v4.type(), toml::value_t::String); - BOOST_CHECK_EQUAL(v5.type(), toml::value_t::Datetime); - BOOST_CHECK_EQUAL(v6.type(), toml::value_t::Array); - BOOST_CHECK_EQUAL(v7.type(), toml::value_t::Table); + BOOST_CHECK_EQUAL(v2.type(), toml::value_t::Boolean); + BOOST_CHECK(v1.is(toml::value_t::Boolean)); + BOOST_CHECK(v2.is(toml::value_t::Boolean)); + BOOST_CHECK(v1.is()); + BOOST_CHECK(v2.is()); - BOOST_CHECK_EQUAL(v1.cast(), b); - BOOST_CHECK_EQUAL(v2.cast(), i); - BOOST_CHECK_EQUAL(v3.cast(), f); - BOOST_CHECK_EQUAL(v4.cast(), s); - const auto& ar = v6.cast(); - BOOST_CHECK_EQUAL(ar.at(0).cast(), a.at(0).cast()); - BOOST_CHECK_EQUAL(ar.at(1).cast(), a.at(1).cast()); - BOOST_CHECK_EQUAL(ar.at(2).cast(), a.at(2).cast()); - BOOST_CHECK_EQUAL(ar.at(3).cast(), a.at(3).cast()); - BOOST_CHECK_EQUAL(ar.at(4).cast(), a.at(4).cast()); + BOOST_CHECK_EQUAL(v1.cast(), true); + BOOST_CHECK_EQUAL(v2.cast(), false); } -BOOST_AUTO_TEST_CASE(test_to_toml_castable) +BOOST_AUTO_TEST_CASE(test_value_integer) { - auto v1 = toml::to_toml(true); - auto v2 = toml::to_toml(42ul); - auto v3 = toml::to_toml(3.14f); - auto v4 = toml::to_toml("hoge"); + toml::value v1 = toml::to_toml(-42); + toml::value v2 = toml::to_toml(42u); - BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean); + BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Integer); BOOST_CHECK_EQUAL(v2.type(), toml::value_t::Integer); - BOOST_CHECK_EQUAL(v3.type(), toml::value_t::Float); - BOOST_CHECK_EQUAL(v4.type(), toml::value_t::String); + BOOST_CHECK(v1.is(toml::value_t::Integer)); + BOOST_CHECK(v2.is(toml::value_t::Integer)); + BOOST_CHECK(v1.is()); + BOOST_CHECK(v2.is()); - BOOST_CHECK_EQUAL(v1.cast(), true); - BOOST_CHECK_EQUAL(v2.cast(), 42); - BOOST_CHECK_CLOSE_FRACTION(v3.cast(), 3.14, 1e-5); - BOOST_CHECK_EQUAL(v4.cast(), "hoge"); + BOOST_CHECK_EQUAL(v1.cast(), -42); + BOOST_CHECK_EQUAL(v2.cast(), 42u); } -BOOST_AUTO_TEST_CASE(test_to_toml_initializer_list) +BOOST_AUTO_TEST_CASE(test_value_float) { - toml::value v1 = toml::to_toml({3,1,4,1,5}); - toml::value v2 = toml::to_toml({{"hoge", 1}, {"piyo", 3.14}, {"fuga", "string"}}); + toml::value v1 = toml::to_toml(3.14); + toml::value v2 = toml::to_toml(3.14f); + + BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Float); + BOOST_CHECK_EQUAL(v2.type(), toml::value_t::Float); + BOOST_CHECK(v1.is(toml::value_t::Float)); + BOOST_CHECK(v2.is(toml::value_t::Float)); + BOOST_CHECK(v1.is()); + BOOST_CHECK(v2.is()); + + BOOST_CHECK_EQUAL(v1.cast(), 3.14); + BOOST_CHECK_CLOSE_FRACTION(v2.cast(), 3.14, 1e-2); +} + +BOOST_AUTO_TEST_CASE(test_value_string) +{ + toml::value v1 = toml::to_toml(std::string("foo")); + toml::value v2 = toml::to_toml(std::string("foo"), toml::string_t::literal); + toml::value v3 = toml::to_toml("foo"); + + BOOST_CHECK_EQUAL(v1.type(), toml::value_t::String); + BOOST_CHECK_EQUAL(v2.type(), toml::value_t::String); + BOOST_CHECK_EQUAL(v3.type(), toml::value_t::String); + BOOST_CHECK(v1.is(toml::value_t::String)); + BOOST_CHECK(v2.is(toml::value_t::String)); + BOOST_CHECK(v3.is(toml::value_t::String)); + BOOST_CHECK(v1.is()); + BOOST_CHECK(v2.is()); + BOOST_CHECK(v3.is()); + + BOOST_CHECK_EQUAL(v1.cast(), "foo"); + BOOST_CHECK_EQUAL(v2.cast(), "foo"); + BOOST_CHECK_EQUAL(v3.cast(), "foo"); +} + +BOOST_AUTO_TEST_CASE(test_value_local_date) +{ + toml::value v1 = toml::to_toml(toml::local_date(2018, toml::month_t::Jan, 31)); + + BOOST_CHECK_EQUAL(v1.type(), toml::value_t::LocalDate); + BOOST_CHECK(v1.is(toml::value_t::LocalDate)); + BOOST_CHECK(v1.is()); + + BOOST_CHECK_EQUAL(v1.cast(), + toml::local_date(2018, toml::month_t::Jan, 31)); +} + +BOOST_AUTO_TEST_CASE(test_value_local_time) +{ + toml::value v1 = toml::to_toml(toml::local_time(12, 30, 45)); + toml::value v2 = toml::to_toml(std::chrono::hours(12) + std::chrono::minutes(30) + + std::chrono::seconds(45)); + + BOOST_CHECK_EQUAL(v1.type(), toml::value_t::LocalTime); + BOOST_CHECK_EQUAL(v2.type(), toml::value_t::LocalTime); + BOOST_CHECK(v1.is(toml::value_t::LocalTime)); + BOOST_CHECK(v2.is(toml::value_t::LocalTime)); + BOOST_CHECK(v1.is()); + BOOST_CHECK(v2.is()); + + BOOST_CHECK_EQUAL(v1.cast(), + toml::local_time(12, 30, 45)); + BOOST_CHECK_EQUAL(v2.cast(), + toml::local_time(12, 30, 45)); + BOOST_CHECK_EQUAL(v1.cast(), + v2.cast()); +} + +BOOST_AUTO_TEST_CASE(test_value_local_datetime) +{ + toml::value v1 = toml::to_toml(toml::local_datetime( + toml::local_date(2018, toml::month_t::Jan, 31), + toml::local_time(12, 30, 45) + )); + + BOOST_CHECK_EQUAL(v1.type(), toml::value_t::LocalDatetime); + BOOST_CHECK(v1.is(toml::value_t::LocalDatetime)); + BOOST_CHECK(v1.is()); + + BOOST_CHECK_EQUAL(v1.cast(), + toml::local_datetime( + toml::local_date(2018, toml::month_t::Jan, 31), + toml::local_time(12, 30, 45))); +} + +BOOST_AUTO_TEST_CASE(test_value_offset_datetime) +{ + toml::value v1 = toml::to_toml(toml::offset_datetime( + toml::local_date(2018, toml::month_t::Jan, 31), + toml::local_time(12, 30, 45), + toml::time_offset(9, 0) + )); + + BOOST_CHECK_EQUAL(v1.type(), toml::value_t::OffsetDatetime); + BOOST_CHECK(v1.is(toml::value_t::OffsetDatetime)); + BOOST_CHECK(v1.is()); + + BOOST_CHECK_EQUAL(v1.cast(), + toml::offset_datetime( + toml::local_date(2018, toml::month_t::Jan, 31), + toml::local_time(12, 30, 45), + toml::time_offset(9, 0) + )); +} + +BOOST_AUTO_TEST_CASE(test_value_array) +{ + std::vector v{1,2,3,4,5}; + toml::value v1 = toml::to_toml(v); + toml::value v2 = toml::to_toml(6,7,8,9,0); BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Array); - BOOST_CHECK_EQUAL(v2.type(), toml::value_t::Table); + BOOST_CHECK(v1.is(toml::value_t::Array)); + BOOST_CHECK(v1.is()); - const auto& ar = v1.cast(); - BOOST_CHECK_EQUAL(ar.at(0).cast(), 3); - BOOST_CHECK_EQUAL(ar.at(1).cast(), 1); - BOOST_CHECK_EQUAL(ar.at(2).cast(), 4); - BOOST_CHECK_EQUAL(ar.at(3).cast(), 1); - BOOST_CHECK_EQUAL(ar.at(4).cast(), 5); + BOOST_CHECK_EQUAL(v2.type(), toml::value_t::Array); + BOOST_CHECK(v2.is(toml::value_t::Array)); + BOOST_CHECK(v2.is()); - const auto& tb = v2.cast(); - - BOOST_CHECK_EQUAL(tb.at("hoge").type(), toml::value_t::Integer); - BOOST_CHECK_EQUAL(tb.at("piyo").type(), toml::value_t::Float); - BOOST_CHECK_EQUAL(tb.at("fuga").type(), toml::value_t::String); - - BOOST_CHECK_EQUAL(tb.at("hoge").cast(), 1); - BOOST_CHECK_CLOSE_FRACTION(tb.at("piyo").cast(), 3.14, 1e-3); - BOOST_CHECK_EQUAL(tb.at("fuga").cast(), "string"); + BOOST_CHECK_EQUAL(v1.cast().at(0).cast(), 1); + BOOST_CHECK_EQUAL(v1.cast().at(1).cast(), 2); + BOOST_CHECK_EQUAL(v1.cast().at(2).cast(), 3); + BOOST_CHECK_EQUAL(v1.cast().at(3).cast(), 4); + BOOST_CHECK_EQUAL(v1.cast().at(4).cast(), 5); + BOOST_CHECK_EQUAL(v2.cast().at(0).cast(), 6); + BOOST_CHECK_EQUAL(v2.cast().at(1).cast(), 7); + BOOST_CHECK_EQUAL(v2.cast().at(2).cast(), 8); + BOOST_CHECK_EQUAL(v2.cast().at(3).cast(), 9); + BOOST_CHECK_EQUAL(v2.cast().at(4).cast(), 0); } +BOOST_AUTO_TEST_CASE(test_value_table) +{ + toml::value v1 = toml::to_toml({{"foo", 42}, {"bar", 3.14}, {"baz", "qux"}}); + BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Table); + BOOST_CHECK(v1.is(toml::value_t::Table)); + BOOST_CHECK(v1.is()); + BOOST_CHECK_EQUAL(v1.cast().at("foo").cast(), 42); + BOOST_CHECK_EQUAL(v1.cast().at("bar").cast(), 3.14); + BOOST_CHECK_EQUAL(v1.cast().at("baz").cast().str, "qux"); +}