#include "editor/EditorEnvironmentBrowser.h" #include "zeroerr/assert.h" #include "zeroerr/unittest.h" using namespace eve::editor; namespace { AssetRecord environment(const char* id, const char* uri, const char* layout, int width, int height, int faces = 1) { AssetRecord record; record.guid = AssetGuid(id); record.logicalUri = uri; record.typeId = "environment-map"; record.sourceUri = std::string("source/") + id; record.sourceHash = "hash"; record.importerId = "environment-test"; record.artifacts = {std::string("artifact/") + id}; record.metadata = EditorValue::Object{{"layout", layout}, {"width", int64_t{width}}, {"height", int64_t{height}}, {"faceCount", int64_t{faces}}}; return record; } } TEST_CASE("editor.environment.browser_pages_and_rejects_stale_generation") { MemoryAssetDatabase database; CHECK(database.publish(environment("sky-a", "env/sky-a", "equirectangular", 2048, 1024)).ok()); const auto generation = database.generation(); EnvironmentAssetBrowser browser(&database); auto page = browser.query("sky", 0, 20, generation); REQUIRE(page.ok()); CHECK_EQ(page.value().values.size(), 1U); CHECK_EQ(page.value().values.front().layout, std::string("equirectangular")); CHECK(database.publish(environment("sky-b", "env/sky-b", "cubemap", 512, 512, 6)).ok()); CHECK_EQ(static_cast(browser.query({}, 0, 20, generation).code()), static_cast(EditorStatus::Conflict)); } TEST_CASE("editor.environment.browser_surfaces_invalid_import_metadata") { MemoryAssetDatabase database; CHECK(database.publish(environment("broken", "env/broken", "cubemap", 512, 512, 5)).ok()); EnvironmentAssetBrowser browser(&database); auto selected = browser.select(AssetGuid("broken")); CHECK_EQ(static_cast(selected.code()), static_cast(EditorStatus::Rejected)); CHECK(!selected.diagnostics().empty()); }