54 const fs::path library = temporary.path /
"library";
55 const std::vector<fs::path> shaders{
56 library /
"orphan.frag.spv", library /
"one.frag.spv",
57 library /
"compute/two.comp.spv"};
61 "fragment shader name was not resolved");
63 "compute/two.comp") == shaders[2],
64 "relative compute shader path was not resolved");
66 const fs::path playlist_path = temporary.path /
"test.playlist.txt";
75 "missing-again.frag\n");
76 std::ostringstream warnings;
77 const std::vector<acmxvk::PlaylistNode> playlist =
79 expect(playlist.size() == 3,
"empty playlist node was not removed");
80 expect(playlist[0].name ==
"Default" &&
81 playlist[0].shaders ==
82 std::vector<fs::path>{shaders[0]},
83 "default playlist entries were not retained");
84 expect(playlist[1].name ==
"Warm" &&
85 playlist[1].shaders ==
86 std::vector<fs::path>{shaders[1]},
87 "named fragment node was parsed incorrectly");
88 expect(playlist[2].name ==
"Compute" &&
89 playlist[2].shaders ==
90 std::vector<fs::path>{shaders[2]},
91 "named compute node was parsed incorrectly");
93 "playlist shader count is incorrect");
94 expect(warnings.str().find(
"missing.frag") != std::string::npos,
95 "missing shader warning was not emitted");
97 const fs::path malformed_path = temporary.path /
"malformed.txt";
98 write_text(malformed_path,
"[Broken\none.frag\n");
99 bool rejected_malformed =
false;
102 malformed_path, shaders, library, warnings));
103 }
catch (
const std::runtime_error &) {
104 rejected_malformed =
true;
106 expect(rejected_malformed,
"malformed playlist node was accepted");
107 }
catch (
const std::exception &error) {
108 std::cerr <<
"playlist test failed: " << error.what() <<
'\n';