mirror of
https://github.com/NixOS/nix.git
synced 2025-11-22 18:29:36 +01:00
Also do a better JSON and testing for deep and shallow NAR listings. As documented, this for file system objects themselves, since `MemorySourceAccessor` is an implementation detail.
116 lines
3.2 KiB
C++
116 lines
3.2 KiB
C++
#include <string_view>
|
|
|
|
#include "nix/util/memory-source-accessor.hh"
|
|
#include "nix/util/tests/json-characterization.hh"
|
|
|
|
namespace nix {
|
|
|
|
namespace memory_source_accessor {
|
|
|
|
using namespace std::literals;
|
|
using File = MemorySourceAccessor::File;
|
|
|
|
ref<MemorySourceAccessor> exampleSimple()
|
|
{
|
|
auto sc = make_ref<MemorySourceAccessor>();
|
|
sc->root = File{File::Regular{
|
|
.executable = false,
|
|
.contents = "asdf",
|
|
}};
|
|
return sc;
|
|
}
|
|
|
|
ref<MemorySourceAccessor> exampleComplex()
|
|
{
|
|
auto files = make_ref<MemorySourceAccessor>();
|
|
files->root = File::Directory{
|
|
.entries{
|
|
{
|
|
"foo",
|
|
File::Regular{
|
|
.contents = "hello\n\0\n\tworld!"s,
|
|
},
|
|
},
|
|
{
|
|
"bar",
|
|
File::Directory{
|
|
.entries =
|
|
{
|
|
{
|
|
"baz",
|
|
File::Regular{
|
|
.executable = true,
|
|
.contents = "good day,\n\0\n\tworld!"s,
|
|
},
|
|
},
|
|
{
|
|
"quux",
|
|
File::Symlink{
|
|
.target = "/over/there",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
return files;
|
|
}
|
|
|
|
} // namespace memory_source_accessor
|
|
|
|
/* ----------------------------------------------------------------------------
|
|
* JSON
|
|
* --------------------------------------------------------------------------*/
|
|
|
|
class MemorySourceAccessorTest : public virtual CharacterizationTest
|
|
{
|
|
std::filesystem::path unitTestData = getUnitTestData() / "memory-source-accessor";
|
|
|
|
public:
|
|
|
|
std::filesystem::path goldenMaster(std::string_view testStem) const override
|
|
{
|
|
return unitTestData / testStem;
|
|
}
|
|
};
|
|
|
|
using nlohmann::json;
|
|
|
|
struct MemorySourceAccessorJsonTest : MemorySourceAccessorTest,
|
|
JsonCharacterizationTest<MemorySourceAccessor>,
|
|
::testing::WithParamInterface<std::pair<std::string_view, MemorySourceAccessor>>
|
|
{};
|
|
|
|
TEST_P(MemorySourceAccessorJsonTest, from_json)
|
|
{
|
|
auto & [name, expected] = GetParam();
|
|
/* Cannot use `readJsonTest` because need to compare `root` field of
|
|
the source accessors for equality. */
|
|
readTest(Path{name} + ".json", [&](const auto & encodedRaw) {
|
|
auto encoded = json::parse(encodedRaw);
|
|
auto decoded = static_cast<MemorySourceAccessor>(encoded);
|
|
ASSERT_EQ(decoded.root, expected.root);
|
|
});
|
|
}
|
|
|
|
TEST_P(MemorySourceAccessorJsonTest, to_json)
|
|
{
|
|
auto & [name, value] = GetParam();
|
|
writeJsonTest(name, value);
|
|
}
|
|
|
|
INSTANTIATE_TEST_SUITE_P(
|
|
MemorySourceAccessorJSON,
|
|
MemorySourceAccessorJsonTest,
|
|
::testing::Values(
|
|
std::pair{
|
|
"simple",
|
|
*memory_source_accessor::exampleSimple(),
|
|
},
|
|
std::pair{
|
|
"complex",
|
|
*memory_source_accessor::exampleComplex(),
|
|
}));
|
|
|
|
} // namespace nix
|