From f1dcabc5b8e2d9b31cbb031ce2f8d8054e41a48a Mon Sep 17 00:00:00 2001 From: Marcus Fritzsch Date: Fri, 28 Jul 2017 09:57:24 +0200 Subject: [PATCH] app/layers: move embedded test run to layers Signed-off-by: Marcus Fritzsch --- src/app.cpp | 23 +---------------------- src/layers.cpp | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/app.cpp b/src/app.cpp index 871222f..29f84f7 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -79,28 +79,7 @@ struct result std::ifstream i(filename); i >> jids; - auto m = to_surface_id_to_layer_map(jids["mappings"]); - - if (m.is_ok()) { - auto i = m.unwrap(); - - auto jtests = jids.value("tests", json()); - - std::vector> tests; - std::transform(std::cbegin(jtests), std::cend(jtests), - std::back_inserter(tests), [](json const &j) { - return std::make_pair(get(j["surface_id"]), - get(j["expect_layer_id"])); - }); - - for (auto sid : tests) { - if (i.get_layer_for_surface(sid.first).value_or(-1) != sid.second) { - return Err("ID Map embedded test failed!"); - } - } - } - - return m; + return to_surface_id_to_layer_map(jids); } } // namespace 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 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 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> 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(j["surface_id"]), + get(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( + "ID Map embedded test failed!"); + } + } + } + return Ok(stl); } catch (std::exception &e) { return Err(e.what()); -- 2.16.6