#include "app_core/brush_ui.h" #include "test_harness.h" #include namespace { void color_plan_validates_all_channels(pp::tests::Harness& harness) { const auto plan = pp::app::plan_brush_ui_color(0.25F, 0.5F, 0.75F, 1.0F); PP_EXPECT(harness, plan); if (plan) { PP_EXPECT(harness, plan.value().operation == pp::app::BrushUiOperation::set_tip_color); PP_EXPECT(harness, plan.value().r == 0.25F); PP_EXPECT(harness, plan.value().g == 0.5F); PP_EXPECT(harness, plan.value().b == 0.75F); PP_EXPECT(harness, plan.value().a == 1.0F); PP_EXPECT(harness, plan.value().mutates_brush); PP_EXPECT(harness, plan.value().update_color_ui); PP_EXPECT(harness, !plan.value().update_brush_ui); } PP_EXPECT(harness, !pp::app::plan_brush_ui_color(-0.01F, 0.5F, 0.5F, 1.0F)); PP_EXPECT(harness, !pp::app::plan_brush_ui_color(0.5F, 1.01F, 0.5F, 1.0F)); PP_EXPECT(harness, !pp::app::plan_brush_ui_color(0.5F, 0.5F, std::nanf(""), 1.0F)); } void texture_plan_validates_path_and_slot(pp::tests::Harness& harness) { const auto plan = pp::app::plan_brush_ui_texture( pp::app::BrushUiTextureSlot::pattern, "data/patterns/noise.png", "data/patterns/thumbs/noise.png"); PP_EXPECT(harness, plan); if (plan) { PP_EXPECT(harness, plan.value().operation == pp::app::BrushUiOperation::set_texture); PP_EXPECT(harness, plan.value().texture_slot == pp::app::BrushUiTextureSlot::pattern); PP_EXPECT(harness, plan.value().path == "data/patterns/noise.png"); PP_EXPECT(harness, plan.value().thumbnail_path == "data/patterns/thumbs/noise.png"); PP_EXPECT(harness, plan.value().loads_brush_resources); PP_EXPECT(harness, plan.value().update_color_ui); PP_EXPECT(harness, plan.value().update_brush_ui); } PP_EXPECT( harness, !pp::app::plan_brush_ui_texture(pp::app::BrushUiTextureSlot::tip, "", "thumb.png")); } void preset_plan_preserves_color_and_requires_brush(pp::tests::Harness& harness) { const auto plan = pp::app::plan_brush_ui_preset_replace(true); PP_EXPECT(harness, plan); if (plan) { PP_EXPECT(harness, plan.value().operation == pp::app::BrushUiOperation::replace_brush_from_preset); PP_EXPECT(harness, plan.value().preserves_existing_color); PP_EXPECT(harness, plan.value().loads_brush_resources); PP_EXPECT(harness, plan.value().update_color_ui); PP_EXPECT(harness, plan.value().update_brush_ui); } PP_EXPECT(harness, !pp::app::plan_brush_ui_preset_replace(false)); } void stroke_settings_plan_updates_brush_preview(pp::tests::Harness& harness) { const auto plan = pp::app::plan_brush_ui_stroke_settings_changed(); PP_EXPECT(harness, plan.operation == pp::app::BrushUiOperation::stroke_settings_changed); PP_EXPECT(harness, plan.mutates_brush); PP_EXPECT(harness, plan.update_color_ui); PP_EXPECT(harness, plan.update_brush_ui); PP_EXPECT(harness, !plan.loads_brush_resources); } } // namespace int main() { pp::tests::Harness harness; harness.run("color plan validates all channels", color_plan_validates_all_channels); harness.run("texture plan validates path and slot", texture_plan_validates_path_and_slot); harness.run("preset plan preserves color and requires brush", preset_plan_preserves_color_and_requires_brush); harness.run("stroke settings plan updates brush preview", stroke_settings_plan_updates_brush_preview); return harness.finish(); }