diff options
| author | Lexi Winter <lexi@le-fay.org> | 2025-06-22 15:22:23 +0100 |
|---|---|---|
| committer | Lexi Winter <lexi@le-fay.org> | 2025-06-22 15:22:23 +0100 |
| commit | a14cb70cb715beb714e7b05d8fe631c0df4a7053 (patch) | |
| tree | a2a2c80ce3e1b4a28c0868a6db5f6b10f5223350 /nihil.ucl/tests | |
| parent | f41970666675f873d7c1075efd192f22df8d17fe (diff) | |
| download | nihil-a14cb70cb715beb714e7b05d8fe631c0df4a7053.tar.gz nihil-a14cb70cb715beb714e7b05d8fe631c0df4a7053.tar.bz2 | |
nihil.ucl: add object comparison and std::format support
Diffstat (limited to 'nihil.ucl/tests')
| -rw-r--r-- | nihil.ucl/tests/emit.cc | 82 | ||||
| -rw-r--r-- | nihil.ucl/tests/object.cc | 15 |
2 files changed, 97 insertions, 0 deletions
diff --git a/nihil.ucl/tests/emit.cc b/nihil.ucl/tests/emit.cc index 13f5914..c7f9757 100644 --- a/nihil.ucl/tests/emit.cc +++ b/nihil.ucl/tests/emit.cc @@ -2,7 +2,89 @@ * This source code is released into the public domain. */ +#include <format> +#include <sstream> + #include <catch2/catch_test_macros.hpp> import nihil; import nihil.ucl; + +TEST_CASE("ucl: emit to std::ostream", "[ucl]") +{ + using namespace std::literals; + + auto obj = nihil::ucl::parse("int = [1, 42, 666]"sv); + auto strm = std::ostringstream(); + strm << obj; + + REQUIRE(strm.str() == +"{\n" +" \"int\": [\n" +" 1,\n" +" 42,\n" +" 666\n" +" ]\n" +"}"); +} + +TEST_CASE("ucl: emit JSON with std::format", "[ucl]") +{ + using namespace std::literals; + + auto obj = nihil::ucl::parse("int = [1, 42, 666]"sv); + auto str = std::format("{:j}", obj); + + REQUIRE(str == +"{\n" +" \"int\": [\n" +" 1,\n" +" 42,\n" +" 666\n" +" ]\n" +"}"); + + // Make sure JSON is the default format. + auto str2 = std::format("{}", obj); + REQUIRE(str == str2); +} + +TEST_CASE("ucl: emit compact JSON with std::format", "[ucl]") +{ + using namespace std::literals; + + auto obj = nihil::ucl::parse("int = [1, 42, 666]"sv); + auto str = std::format("{:J}", obj); + + REQUIRE(str == "{\"int\":[1,42,666]}"); +} + +TEST_CASE("ucl: emit configuration with std::format", "[ucl]") +{ + using namespace std::literals; + + auto obj = nihil::ucl::parse("int = [1, 42, 666]"sv); + auto str = std::format("{:c}", obj); + + REQUIRE(str == +"int [\n" +" 1,\n" +" 42,\n" +" 666,\n" +"]\n"); +} + +TEST_CASE("ucl: emit YAML with std::format", "[ucl]") +{ + using namespace std::literals; + + auto obj = nihil::ucl::parse("int = [1, 42, 666]"sv); + auto str = std::format("{:y}", obj); + + REQUIRE(str == +"int: [\n" +" 1,\n" +" 42,\n" +" 666\n" +"]"); +} diff --git a/nihil.ucl/tests/object.cc b/nihil.ucl/tests/object.cc index f9cef9f..1bbcf4f 100644 --- a/nihil.ucl/tests/object.cc +++ b/nihil.ucl/tests/object.cc @@ -20,3 +20,18 @@ TEST_CASE("ucl object: get_ucl_object", "[ucl]") static_assert(std::same_as<::ucl_object_t const *, decltype(cobj.get_ucl_object())>); } + +TEST_CASE("ucl object: compare", "[ucl]") +{ + using namespace std::literals; + + auto obj_41 = nihil::ucl::parse("int = 41;"sv); + auto obj_42 = nihil::ucl::parse("int = 42;"sv); + auto obj_42_2 = nihil::ucl::parse("int = 42;"sv); + auto obj_43 = nihil::ucl::parse("int = 43;"sv); + + REQUIRE(obj_42 == obj_42_2); + REQUIRE(obj_42 != obj_43); + REQUIRE(obj_42 < obj_43); + REQUIRE(obj_42 > obj_41); +} |
