summaryrefslogtreecommitdiff
path: root/tomlplusplus/tests/windows_compat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tomlplusplus/tests/windows_compat.cpp')
-rw-r--r--tomlplusplus/tests/windows_compat.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/tomlplusplus/tests/windows_compat.cpp b/tomlplusplus/tests/windows_compat.cpp
new file mode 100644
index 0000000000..1d234cf7a0
--- /dev/null
+++ b/tomlplusplus/tests/windows_compat.cpp
@@ -0,0 +1,97 @@
+// This file is a part of toml++ and is subject to the the terms of the MIT license.
+// Copyright (c) Mark Gillard <mark.gillard@outlook.com.au>
+// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text.
+// SPDX-License-Identifier: MIT
+
+#include "tests.hpp"
+
+#if TOML_ENABLE_WINDOWS_COMPAT
+
+TOML_DISABLE_WARNINGS;
+#include <windows.h>
+TOML_ENABLE_WARNINGS;
+
+TEST_CASE("windows compat")
+{
+ static constexpr auto toml_text = R"(
+ [library]
+ name = "toml++"
+ authors = ["Mark Gillard <mark.gillard@outlook.com.au>"]
+ free = true
+
+ [dependencies]
+ cpp = 17
+ )"sv;
+
+ auto res = toml::parse(toml_text, L"kek.toml");
+#if !TOML_EXCEPTIONS
+ REQUIRE(res.succeeded());
+#endif
+ table& tbl = res;
+
+ // source paths
+ REQUIRE(tbl.source().path != nullptr);
+ CHECK(*tbl.source().path == "kek.toml"sv);
+ CHECK(tbl.source().wide_path().has_value());
+ CHECK(tbl.source().wide_path().value() == L"kek.toml"sv);
+
+ // direct lookups from tables
+ REQUIRE(tbl.get("library") != nullptr);
+ CHECK(tbl.get("library") == tbl.get("library"sv));
+ CHECK(tbl.get("library") == tbl.get("library"s));
+ CHECK(tbl.get(L"library") != nullptr);
+ CHECK(tbl.get(L"library") == tbl.get(L"library"sv));
+ CHECK(tbl.get(L"library") == tbl.get(L"library"s));
+ CHECK(tbl.get(L"library") == tbl.get("library"));
+
+ // node-view lookups
+ CHECK(tbl[L"library"].node() != nullptr);
+ CHECK(tbl[L"library"].node() == tbl.get(L"library"));
+
+ // value queries
+ REQUIRE(tbl[L"library"][L"name"].as_string() != nullptr);
+ CHECK(tbl[L"library"][L"name"].value<std::wstring>() == L"toml++"s);
+ CHECK(tbl[L"library"][L"name"].value_or(L""sv) == L"toml++"s);
+ CHECK(tbl[L"library"][L"name"].value_or(L""s) == L"toml++"s);
+ CHECK(tbl[L"library"][L"name"].value_or(L"") == L"toml++"s);
+
+ // node-view comparisons
+ CHECK(tbl[L"library"][L"name"] == "toml++"sv);
+ CHECK(tbl[L"library"][L"name"] == "toml++"s);
+ CHECK(tbl[L"library"][L"name"] == "toml++");
+ CHECK(tbl[L"library"][L"name"] == L"toml++"sv);
+ CHECK(tbl[L"library"][L"name"] == L"toml++"s);
+ CHECK(tbl[L"library"][L"name"] == L"toml++");
+
+ // table manipulation
+ tbl.insert(L"foo", L"bar");
+ REQUIRE(tbl.contains("foo"));
+ REQUIRE(tbl.contains(L"foo"));
+ CHECK(tbl["foo"] == "bar");
+ tbl.insert_or_assign(L"foo", L"kek");
+ CHECK(tbl["foo"] == "kek");
+ tbl.erase(L"foo");
+ REQUIRE(!tbl.contains("foo"));
+ REQUIRE(!tbl.contains(L"foo"));
+
+ // windows types
+ CHECK(tbl[L"library"][L"free"].value<BOOL>() == 1);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<BOOL>() == 17);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<SHORT>() == 17);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<INT>() == 17);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<LONG>() == 17);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<INT_PTR>() == 17);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<LONG_PTR>() == 17);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<USHORT>() == 17u);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<UINT>() == 17u);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<ULONG>() == 17u);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<UINT_PTR>() == 17u);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<ULONG_PTR>() == 17u);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<WORD>() == 17u);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<DWORD>() == 17u);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<DWORD32>() == 17u);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<DWORD64>() == 17u);
+ CHECK(tbl[L"dependencies"][L"cpp"].value<DWORDLONG>() == 17u);
+}
+
+#endif // TOML_ENABLE_WINDOWS_COMPAT