aboutsummaryrefslogtreecommitdiffstats
path: root/nihil.ucl/tests
diff options
context:
space:
mode:
Diffstat (limited to 'nihil.ucl/tests')
-rw-r--r--nihil.ucl/tests/emit.cc82
-rw-r--r--nihil.ucl/tests/object.cc15
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);
+}