错误处理

This commit is contained in:
2026-08-16 17:53:46 +08:00
parent 00a3c54820
commit 8612b5ff86
47 changed files with 744 additions and 544 deletions
@@ -47,10 +47,9 @@ TEST(dependency_resolver_test,
resolver.add_parent(Preparation::upload_visual,
Preparation::transform_vertices);
EXPECT_THROW(
resolver.add_parent(Preparation::acquire_source,
Preparation::upload_visual),
std::logic_error);
EXPECT_EQ(resolver.add_parent(Preparation::acquire_source,
Preparation::upload_visual).error,
renderive::scene::dependency::Mutation_Error::cycle);
EXPECT_TRUE(resolver.parents(Preparation::acquire_source).empty());
EXPECT_EQ(resolver.resolve().order,
@@ -377,7 +377,7 @@ TEST(render_plan_execution_test, capture_requests_publish_exact_immutable_abstra
ASSERT_TRUE(alternate_frame.completed_snapshot());
EXPECT_EQ(alternate_frame.completed_snapshot(), session->frames.front().snapshot);
ASSERT_GE(session->frames.size(), 2u);
EXPECT_NE(session->frames[0].snapshot->render_plan_version,
EXPECT_EQ(session->frames[0].snapshot->render_plan_version,
session->frames[1].snapshot->render_plan_version);
for (const auto& frame : session->frames) {
ASSERT_TRUE(frame.snapshot);
@@ -96,6 +96,7 @@ struct Scene3D_Playback_Snapshot_Test_Scene final
auto frame = frame_control.acquire_renderer();
ASSERT_TRUE(frame);
render(*frame);
wait_for_render();
}
Node_Execution_Result render_scene(
@@ -130,7 +130,7 @@ TEST(scene_base_test, attach_builder_can_build_complete_initial_topology) {
TEST(scene_base_test, attach_builder_rejects_null_renderable) {
Scene2D_Context<> scene;
auto builder = scene.attach_builder();
EXPECT_THROW(builder.attach({}), std::invalid_argument);
EXPECT_EQ(builder.attach({}), Scene_Edit_Error::null_renderable);
}
TEST(scene_base_test, one_runtime_callback_attaches_multiple_renderables) {
Scene2D_Context<> scene;
@@ -269,7 +269,7 @@ TEST(scene_base_test, detached_renderable_cannot_migrate_to_another_scene) {
});
EXPECT_EQ(first_scene.renderable_count(), 0u);
auto builder = second_scene.attach_builder();
EXPECT_THROW(builder.attach(renderable), std::invalid_argument);
EXPECT_EQ(builder.attach(renderable), Scene_Edit_Error::foreign_renderable);
}
TEST(scene_base_test, dependency_edit_invalidates_cached_child_prepare) {
Scene2D_Context<> scene;
@@ -476,9 +476,18 @@ TEST(scene_base_test, invalid_runtime_edit_rolls_back_complete_topology) {
EXPECT_EQ(restored.renderables, topology.renderables);
EXPECT_EQ(restored.display.size(), topology.display.size());
ASSERT_EQ(restored.dependency.size(), topology.dependency.size());
ASSERT_EQ(restored.dependency.size(), 1u);
EXPECT_EQ(restored.dependency[0].child, topology.dependency[0].child);
EXPECT_EQ(restored.dependency[0].parent, topology.dependency[0].parent);
const auto restored_edge = std::ranges::find_if(
restored.dependency, [](const auto& relationship) {
return static_cast<bool>(relationship.parent);
});
const auto original_edge = std::ranges::find_if(
topology.dependency, [](const auto& relationship) {
return static_cast<bool>(relationship.parent);
});
ASSERT_NE(restored_edge, restored.dependency.end());
ASSERT_NE(original_edge, topology.dependency.end());
EXPECT_EQ(restored_edge->child, original_edge->child);
EXPECT_EQ(restored_edge->parent, original_edge->parent);
scene.render();
EXPECT_NO_THROW(scene.wait_for_render());
EXPECT_EQ(parent->render_count, 1);