Route startup resources through app core
This commit is contained in:
@@ -1,12 +1,15 @@
|
||||
#include "app_core/app_startup.h"
|
||||
#include "test_harness.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
#include <string>
|
||||
|
||||
namespace {
|
||||
|
||||
class FakeAppStartupServices final : public pp::app::AppStartupServices {
|
||||
class FakeAppStartupServices final
|
||||
: public pp::app::AppStartupServices
|
||||
, public pp::app::AppStartupResourceServices {
|
||||
public:
|
||||
void store_run_counter(int value) override
|
||||
{
|
||||
@@ -38,11 +41,50 @@ public:
|
||||
call_order += "license;";
|
||||
}
|
||||
|
||||
void initialize_shaders() override
|
||||
{
|
||||
shader_initializations += 1;
|
||||
call_order += "shaders;";
|
||||
}
|
||||
|
||||
void initialize_assets() override
|
||||
{
|
||||
asset_initializations += 1;
|
||||
call_order += "assets;";
|
||||
}
|
||||
|
||||
void initialize_layout() override
|
||||
{
|
||||
layout_initializations += 1;
|
||||
call_order += "layout;";
|
||||
}
|
||||
|
||||
void update_title() override
|
||||
{
|
||||
title_updates += 1;
|
||||
call_order += "title;";
|
||||
}
|
||||
|
||||
void create_ui_render_target(int width, int height) override
|
||||
{
|
||||
ui_render_target_width = width;
|
||||
ui_render_target_height = height;
|
||||
ui_render_target_creations += 1;
|
||||
call_order += "ui-rtt;";
|
||||
}
|
||||
|
||||
int stored_run_counter = 0;
|
||||
int save_calls = 0;
|
||||
int timelapse_starts = 0;
|
||||
bool vr_controllers_enabled = false;
|
||||
int license_warnings = 0;
|
||||
int shader_initializations = 0;
|
||||
int asset_initializations = 0;
|
||||
int layout_initializations = 0;
|
||||
int title_updates = 0;
|
||||
int ui_render_target_creations = 0;
|
||||
int ui_render_target_width = 0;
|
||||
int ui_render_target_height = 0;
|
||||
std::string call_order;
|
||||
};
|
||||
|
||||
@@ -144,6 +186,57 @@ void startup_executor_rejects_malformed_counter_state(pp::tests::Harness& harnes
|
||||
PP_EXPECT(harness, services.call_order.empty());
|
||||
}
|
||||
|
||||
void startup_resource_plan_projects_ui_target_size(pp::tests::Harness& harness)
|
||||
{
|
||||
const auto plan = pp::app::plan_app_startup_resources(1280.9F, 720.1F);
|
||||
|
||||
PP_EXPECT(harness, plan);
|
||||
if (plan) {
|
||||
PP_EXPECT(harness, plan.value().ui_render_target_width == 1280);
|
||||
PP_EXPECT(harness, plan.value().ui_render_target_height == 720);
|
||||
PP_EXPECT(harness, plan.value().initialize_shaders);
|
||||
PP_EXPECT(harness, plan.value().initialize_assets);
|
||||
PP_EXPECT(harness, plan.value().initialize_layout);
|
||||
PP_EXPECT(harness, plan.value().update_title);
|
||||
PP_EXPECT(harness, plan.value().create_ui_render_target);
|
||||
}
|
||||
}
|
||||
|
||||
void startup_resource_plan_rejects_invalid_dimensions(pp::tests::Harness& harness)
|
||||
{
|
||||
PP_EXPECT(harness, !pp::app::plan_app_startup_resources(0.0F, 720.0F));
|
||||
PP_EXPECT(harness, !pp::app::plan_app_startup_resources(1280.0F, -1.0F));
|
||||
PP_EXPECT(harness, !pp::app::plan_app_startup_resources(std::nanf(""), 720.0F));
|
||||
}
|
||||
|
||||
void startup_resource_executor_dispatches_in_stable_order(pp::tests::Harness& harness)
|
||||
{
|
||||
FakeAppStartupServices services;
|
||||
const auto plan = pp::app::plan_app_startup_resources(1024.0F, 512.0F);
|
||||
|
||||
PP_EXPECT(harness, plan);
|
||||
PP_EXPECT(harness, pp::app::execute_app_startup_resources(plan.value(), services).ok());
|
||||
PP_EXPECT(harness, services.shader_initializations == 1);
|
||||
PP_EXPECT(harness, services.asset_initializations == 1);
|
||||
PP_EXPECT(harness, services.layout_initializations == 1);
|
||||
PP_EXPECT(harness, services.title_updates == 1);
|
||||
PP_EXPECT(harness, services.ui_render_target_creations == 1);
|
||||
PP_EXPECT(harness, services.ui_render_target_width == 1024);
|
||||
PP_EXPECT(harness, services.ui_render_target_height == 512);
|
||||
PP_EXPECT(harness, services.call_order == "shaders;assets;layout;title;ui-rtt;");
|
||||
}
|
||||
|
||||
void startup_resource_executor_rejects_invalid_render_target_size(pp::tests::Harness& harness)
|
||||
{
|
||||
FakeAppStartupServices services;
|
||||
pp::app::AppStartupResourcePlan plan;
|
||||
plan.ui_render_target_width = 0;
|
||||
plan.ui_render_target_height = 720;
|
||||
|
||||
PP_EXPECT(harness, !pp::app::execute_app_startup_resources(plan, services).ok());
|
||||
PP_EXPECT(harness, services.call_order.empty());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int main()
|
||||
@@ -160,5 +253,13 @@ int main()
|
||||
"startup split executors keep persistence and runtime separate",
|
||||
startup_split_executors_keep_persistence_and_runtime_separate);
|
||||
harness.run("startup executor rejects malformed counter state", startup_executor_rejects_malformed_counter_state);
|
||||
harness.run("startup resource plan projects UI target size", startup_resource_plan_projects_ui_target_size);
|
||||
harness.run("startup resource plan rejects invalid dimensions", startup_resource_plan_rejects_invalid_dimensions);
|
||||
harness.run(
|
||||
"startup resource executor dispatches in stable order",
|
||||
startup_resource_executor_dispatches_in_stable_order);
|
||||
harness.run(
|
||||
"startup resource executor rejects invalid render target size",
|
||||
startup_resource_executor_rejects_invalid_render_target_size);
|
||||
return harness.finish();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user