Write more (extended) output spec tests

This commit is contained in:
John Ericson 2023-01-12 22:05:55 -05:00
parent d29eb08563
commit d8512653d4

View file

@ -1,5 +1,6 @@
#include "outputs-spec.hh" #include "outputs-spec.hh"
#include <nlohmann/json.hpp>
#include <gtest/gtest.h> #include <gtest/gtest.h>
namespace nix { namespace nix {
@ -105,6 +106,10 @@ TEST(OutputsSpec, union_names_names) {
TEST_DONT_PARSE(carot_empty, "^") TEST_DONT_PARSE(carot_empty, "^")
TEST_DONT_PARSE(prefix_carot_empty, "foo^") TEST_DONT_PARSE(prefix_carot_empty, "foo^")
TEST_DONT_PARSE(garbage, "^&*()")
TEST_DONT_PARSE(double_star, "^**")
TEST_DONT_PARSE(star_first, "^*,foo")
TEST_DONT_PARSE(star_second, "^foo,*")
#undef TEST_DONT_PARSE #undef TEST_DONT_PARSE
@ -151,4 +156,32 @@ TEST(ExtendedOutputsSpec, many_carrot) {
ASSERT_EQ(std::string { prefix } + expected.to_string(), "foo^bar^bin,out"); ASSERT_EQ(std::string { prefix } + expected.to_string(), "foo^bar^bin,out");
} }
#define TEST_JSON(TYPE, NAME, STR, VAL) \
\
TEST(TYPE, NAME ## _to_json) { \
using nlohmann::literals::operator "" _json; \
ASSERT_EQ( \
STR ## _json, \
((nlohmann::json) TYPE { VAL })); \
} \
\
TEST(TYPE, NAME ## _from_json) { \
using nlohmann::literals::operator "" _json; \
ASSERT_EQ( \
TYPE { VAL }, \
(STR ## _json).get<TYPE>()); \
}
TEST_JSON(OutputsSpec, all, R"(["*"])", OutputsSpec::All { })
TEST_JSON(OutputsSpec, name, R"(["a"])", OutputsSpec::Names { "a" })
TEST_JSON(OutputsSpec, names, R"(["a","b"])", (OutputsSpec::Names { "a", "b" }))
TEST_JSON(ExtendedOutputsSpec, def, R"(null)", ExtendedOutputsSpec::Default { })
TEST_JSON(ExtendedOutputsSpec, all, R"(["*"])", ExtendedOutputsSpec::Explicit { OutputsSpec::All { } })
TEST_JSON(ExtendedOutputsSpec, name, R"(["a"])", ExtendedOutputsSpec::Explicit { OutputsSpec::Names { "a" } })
TEST_JSON(ExtendedOutputsSpec, names, R"(["a","b"])", (ExtendedOutputsSpec::Explicit { OutputsSpec::Names { "a", "b" } }))
#undef TEST_JSON
} }