diff options
Diffstat (limited to 'src/layers.cpp')
-rw-r--r-- | src/layers.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/layers.cpp b/src/layers.cpp index d3ec7cf..f475556 100644 --- a/src/layers.cpp +++ b/src/layers.cpp @@ -10,6 +10,8 @@ namespace wm { +using json = nlohmann::json; + surface_id_to_layer::surface_id_to_layer(nlohmann::json const &j) { // DB(j); if (j["type"] == "range") { @@ -27,8 +29,9 @@ struct result<struct surface_id_to_layer_map> to_surface_id_to_layer_map( DB(j); try { surface_id_to_layer_map stl{}; + auto m = j["mappings"]; std::transform( - std::cbegin(j), std::cend(j), + std::cbegin(m), std::cend(m), std::inserter(stl.mapping, stl.mapping.end()), [](nlohmann::json const &j) { return surface_id_to_layer(j); }); for (auto i : stl.mapping) { @@ -41,6 +44,31 @@ struct result<struct surface_id_to_layer_map> to_surface_id_to_layer_map( "Found invalid/unset IDs in mapping"); } } + + // Check lookup + auto jtests = j.value("tests", json()); + + if (! jtests.empty()) { + DB("Embedded tests..."); + std::vector<std::pair<int, int>> tests; + tests.reserve(jtests.size()); + std::transform(std::cbegin(jtests), std::cend(jtests), + std::back_inserter(tests), [](json const &j) { + return std::make_pair(get<int>(j["surface_id"]), + get<int>(j["expect_layer_id"])); + }); + + for (auto sid : tests) { + int lid = stl.get_layer_for_surface(sid.first).value_or(-1); + DB("this=" << sid.first << ", that=" << lid + << ", expect=" << sid.second); + if (lid != sid.second) { + return Err<surface_id_to_layer_map>( + "ID Map embedded test failed!"); + } + } + } + return Ok(stl); } catch (std::exception &e) { return Err<struct surface_id_to_layer_map>(e.what()); |