Files
photocraft/crates/engine/tests/rendering_preferences.rs
eb2fb2634f Add rendering modes and CPU fallback recovery (#434)
* Add rendering policy with legacy preference migration and safe adapter selection

* Add rendering mode preferences and GPU fallback recovery warning

* Complete CPU fallback recovery and validate rendering mode UI

* Simplify GPU recovery and reuse preference persistence

* Rendering modes: rebase onto the preferences merge/retry save path; drop docs screenshots

save_preferences now writes through write_prefs (merging other instances' changes) and
only marks the revision saved when the write succeeds, so a failed recovery choice is
still retried. Removes a leftover diff3 marker in es.tsv, the docs/images/rendering-*.png
screenshots and their ATTRIBUTION row (no binary assets in the repo), and regenerates
docs/scorecard.md for the new performance.renderingMode preference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Brandon Thomas <echelon@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 06:11:06 -04:00

38 lines
1.6 KiB
Rust

//! Rendering policy migration and command validation, without a graphics device.
use photocraft_engine::prefs::{GpuBackend, Preferences, RenderingMode};
use serde_json::json;
#[test]
fn old_preferences_preserve_cpu_choices() {
for old in [json!({"useGpu": false}), json!({"gpuBackend": "cpu"})] {
let p: Preferences = serde_json::from_value(json!({"performance": old})).unwrap();
assert_eq!(p.performance.effective_rendering_mode(), RenderingMode::Cpu);
}
assert_eq!(Preferences::default().performance.effective_rendering_mode(), RenderingMode::Auto);
}
#[test]
fn explicit_choices_override_legacy_flags_and_round_trip() {
let mut p = Preferences::default();
p.performance.use_gpu = false;
p.performance.gpu_backend = GpuBackend::Cpu;
for mode in [RenderingMode::Auto, RenderingMode::Gpu, RenderingMode::Cpu] {
p.set("performance.renderingMode", json!(mode.name())).unwrap();
assert_eq!(p.performance.effective_rendering_mode(), mode);
let restored: Preferences = serde_json::from_value(p.to_json()).unwrap();
assert_eq!(restored.performance.effective_rendering_mode(), mode);
}
}
#[test]
fn malformed_policy_is_rejected_without_changing_preferences() {
let mut p = Preferences::default();
let before = p.to_json();
for invalid in [json!("quantum"), json!(7), json!({}), json!(true)] {
assert!(p.set("performance.renderingMode", invalid).is_err());
assert_eq!(p.to_json(), before);
}
p.reset(Some("performance.renderingMode")).unwrap();
assert_eq!(p.performance.rendering_mode, None);
}