3D 第一个控件成功显示
This commit is contained in:
@@ -34,7 +34,7 @@ Gallery_Request gallery_request(Gallery_Request_Kind kind, std::string message)
|
||||
|
||||
std::string open_message(std::string_view mode) {
|
||||
return std::string(
|
||||
R"({"category":"event","type":"gallery_open","case":"datoviz_3d","frame_mode":")") +
|
||||
R"({"category":"event","type":"gallery_open","case":"point_3d","frame_mode":")") +
|
||||
std::string(mode) + R"("})";
|
||||
}
|
||||
|
||||
@@ -181,7 +181,7 @@ TEST(RenderiveWebDatovizGallery, CatalogUsesOnlyThreeDimensionalActions) {
|
||||
const auto catalog = nlohmann::json::parse(Gallery_Protocol::catalog_json());
|
||||
const auto item = std::find_if(
|
||||
catalog.at("cases").begin(), catalog.at("cases").end(),
|
||||
[](const nlohmann::json& value) { return value.at("id") == "datoviz_3d"; });
|
||||
[](const nlohmann::json& value) { return value.at("id") == "point_3d"; });
|
||||
ASSERT_NE(item, catalog.at("cases").end());
|
||||
EXPECT_EQ(item->at("category"), "3D");
|
||||
EXPECT_EQ(item->at("control_count"), 0);
|
||||
@@ -193,11 +193,11 @@ TEST(RenderiveWebDatovizGallery, CatalogUsesOnlyThreeDimensionalActions) {
|
||||
R"({"resources":[],"observers":[],"render_plan":null,"performance_capture":null})";
|
||||
const auto state_for = [&](Gallery_Frame_Mode mode) {
|
||||
return nlohmann::json::parse(Gallery_Protocol::case_json_from_controls(
|
||||
"datoviz_3d", empty_controls, "{}", {}, mode, false));
|
||||
"point_3d", empty_controls, "{}", {}, mode, false));
|
||||
};
|
||||
const std::set<std::string> common{
|
||||
"add_sphere", "move_sphere", "remove_sphere", "reset_camera",
|
||||
"sphere_churn", "toggle_projection"};
|
||||
"add_point", "orbit_points", "remove_point", "point_churn",
|
||||
"reset_points"};
|
||||
auto expected = common;
|
||||
expected.insert({"mode_prepare", "mode_refresh", "mode_render", "mode_discard"});
|
||||
EXPECT_EQ(action_ids(state_for(Gallery_Frame_Mode::Manual)), expected);
|
||||
@@ -239,12 +239,39 @@ TEST(RenderiveWebDatovizGallery, AutomaticLowLatencyFramesCarryAnimatedState) {
|
||||
expect_actual_datoviz_pixels(later, 560, 320);
|
||||
}
|
||||
|
||||
TEST(RenderiveWebDatovizGallery, WebPointerEventsReachTheDatovizController) {
|
||||
Gallery_Plot_Session session;
|
||||
ASSERT_EQ(open_scene(session, "low_latency").at("type"), "case_state");
|
||||
const std::string before = request_pixels(session);
|
||||
|
||||
Pointer_Event press(Event_Type::Pointer_Press);
|
||||
press.position = {210.0, 135.0};
|
||||
press.button = Mouse_Button::Left;
|
||||
EXPECT_FALSE(session.handle(Web_Event{press}).has_value());
|
||||
|
||||
Pointer_Event move(Event_Type::Pointer_Move);
|
||||
move.position = {330.0, 190.0};
|
||||
move.buttons = 1;
|
||||
EXPECT_FALSE(session.handle(Web_Event{move}).has_value());
|
||||
move.position = {390.0, 225.0};
|
||||
EXPECT_FALSE(session.handle(Web_Event{move}).has_value());
|
||||
|
||||
Pointer_Event release(Event_Type::Pointer_Release);
|
||||
release.position = move.position;
|
||||
release.button = Mouse_Button::Left;
|
||||
EXPECT_FALSE(session.handle(Web_Event{release}).has_value());
|
||||
|
||||
const std::string after = request_pixels(session);
|
||||
expect_actual_datoviz_pixels(after, 560, 320);
|
||||
EXPECT_NE(after, before);
|
||||
}
|
||||
|
||||
TEST(RenderiveWebDatovizGallery, ManualRenderUsesThePreparedLogicalState) {
|
||||
Gallery_Plot_Session session;
|
||||
ASSERT_EQ(open_scene(session, "manual").at("type"), "case_state");
|
||||
ASSERT_EQ(invoke_action(session, "move_sphere").at("type"), "case_state");
|
||||
ASSERT_EQ(invoke_action(session, "orbit_points").at("type"), "case_state");
|
||||
ASSERT_EQ(invoke_action(session, "mode_prepare").at("type"), "case_state");
|
||||
ASSERT_EQ(invoke_action(session, "move_sphere").at("type"), "case_state");
|
||||
ASSERT_EQ(invoke_action(session, "orbit_points").at("type"), "case_state");
|
||||
ASSERT_EQ(invoke_action(session, "mode_refresh").at("type"), "case_state");
|
||||
ASSERT_EQ(invoke_action(session, "mode_render").at("type"), "case_state");
|
||||
const std::string prepared = request_pixels(session);
|
||||
@@ -288,7 +315,7 @@ TEST(RenderiveWebDatovizGallery, AddedAndChurnedVisualsAreActuallyRemoved) {
|
||||
ASSERT_EQ(open_scene(session, "manual").at("type"), "case_state");
|
||||
const std::string baseline = request_pixels(session);
|
||||
|
||||
ASSERT_EQ(invoke_action(session, "add_sphere").at("type"), "case_state");
|
||||
ASSERT_EQ(invoke_action(session, "add_point").at("type"), "case_state");
|
||||
manual_render_cycle(session);
|
||||
const std::string added = request_pixels(session);
|
||||
EXPECT_NE(added, baseline);
|
||||
@@ -314,23 +341,24 @@ TEST(RenderiveWebDatovizGallery, AddedAndChurnedVisualsAreActuallyRemoved) {
|
||||
const auto green_y = centroid_y([](unsigned red, unsigned green, unsigned blue) {
|
||||
return green > red + 20U && green > blue + 20U;
|
||||
});
|
||||
const auto yellow_y = centroid_y([](unsigned red, unsigned green, unsigned blue) {
|
||||
return red > 100U && green > 100U && blue < 100U;
|
||||
const auto cyan_y = centroid_y([](unsigned red, unsigned green, unsigned blue) {
|
||||
return green > red + 50U && blue > red + 50U &&
|
||||
std::abs(static_cast<int>(green) - static_cast<int>(blue)) < 30;
|
||||
});
|
||||
ASSERT_TRUE(green_y.has_value());
|
||||
ASSERT_TRUE(yellow_y.has_value());
|
||||
EXPECT_LT(*yellow_y, *green_y)
|
||||
ASSERT_TRUE(cyan_y.has_value());
|
||||
EXPECT_GT(*cyan_y, *green_y)
|
||||
<< "Frame_3D_View must expose top-left-origin RGBA rows";
|
||||
|
||||
ASSERT_EQ(invoke_action(session, "remove_sphere").at("type"), "case_state");
|
||||
ASSERT_EQ(invoke_action(session, "remove_point").at("type"), "case_state");
|
||||
manual_render_cycle(session);
|
||||
const std::string removed = request_pixels(session);
|
||||
EXPECT_EQ(removed, baseline);
|
||||
|
||||
const auto churned = invoke_action(session, "sphere_churn");
|
||||
const auto churned = invoke_action(session, "point_churn");
|
||||
ASSERT_EQ(churned.at("type"), "case_state");
|
||||
EXPECT_EQ(churned.at("telemetry").at("kernel_observer").at("last_event"),
|
||||
"sphere_churned");
|
||||
"point_churned");
|
||||
const std::string after_churn = request_pixels(session);
|
||||
expect_actual_datoviz_pixels(after_churn, 560, 320);
|
||||
EXPECT_EQ(after_churn, baseline);
|
||||
|
||||
@@ -228,10 +228,10 @@ TEST(RenderiveWebGallery, AdminiveCatalogCoversEveryControlCaseAndThreeModes) {
|
||||
EXPECT_EQ(catalog.at("protocol"), "renderive.control-gallery");
|
||||
EXPECT_EQ(catalog.at("protocol_version"), 4);
|
||||
EXPECT_EQ(catalog.at("case_descriptor").at("protocol"), "adminive.resource");
|
||||
EXPECT_EQ(catalog.at("cases").size(), 8U);
|
||||
EXPECT_EQ(catalog.at("cases").size(), 9U);
|
||||
EXPECT_EQ(catalog.at("frame_modes").size(), 3U);
|
||||
EXPECT_EQ(catalog.at("coverage").at("page_count"), 3);
|
||||
EXPECT_EQ(catalog.at("coverage").at("canvas_count"), 24);
|
||||
EXPECT_EQ(catalog.at("coverage").at("canvas_count"), 27);
|
||||
EXPECT_GT(catalog.at("coverage").at("manual_control_count").get<std::size_t>(), 180U);
|
||||
EXPECT_GT(catalog.at("coverage").at("manual_action_count").get<std::size_t>(), 50U);
|
||||
EXPECT_EQ(catalog.at("coverage").at("frequency_modes"),
|
||||
|
||||
Reference in New Issue
Block a user