Add test for nested #[persist] key prefixes
This has not yet been implemented.
This commit is contained in:
parent
a3056713c8
commit
5d9f1b109c
138
nih_plug_derive/tests/persist.rs
Normal file
138
nih_plug_derive/tests/persist.rs
Normal file
|
@ -0,0 +1,138 @@
|
|||
use std::collections::BTreeMap;
|
||||
use std::sync::Mutex;
|
||||
|
||||
use nih_plug::prelude::*;
|
||||
|
||||
#[derive(Params, Default)]
|
||||
struct WrapperParams {
|
||||
#[nested(id_prefix = "foo")]
|
||||
pub inner: InnerParams,
|
||||
}
|
||||
|
||||
#[derive(Params, Default)]
|
||||
struct ArrayWrapperParams {
|
||||
#[nested(array)]
|
||||
pub inners: [InnerParams; 3],
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
struct InnerParams {
|
||||
/// The value `deserialize()` has been called with so we can check that the prefix has been
|
||||
/// stripped correctly.
|
||||
pub deserialize_called_with: Mutex<Option<BTreeMap<String, String>>>,
|
||||
}
|
||||
|
||||
unsafe impl Params for InnerParams {
|
||||
fn param_map(&self) -> Vec<(String, ParamPtr, String)> {
|
||||
Vec::new()
|
||||
}
|
||||
|
||||
fn serialize_fields(&self) -> BTreeMap<String, String> {
|
||||
// When nested in another struct, the ID prefix will be added to `bar`
|
||||
let mut data = BTreeMap::new();
|
||||
data.insert(String::from("bar"), String::from("baz"));
|
||||
|
||||
data
|
||||
}
|
||||
|
||||
fn deserialize_fields(&self, serialized: &BTreeMap<String, String>) {
|
||||
*self.deserialize_called_with.lock().unwrap() = Some(serialized.clone());
|
||||
}
|
||||
}
|
||||
|
||||
mod persist {
|
||||
mod nested_prefix {
|
||||
|
||||
use super::super::*;
|
||||
|
||||
#[test]
|
||||
fn serialize() {
|
||||
let params = WrapperParams::default();
|
||||
|
||||
// This should have had a prefix added to the serialized value
|
||||
let serialized = params.serialize_fields();
|
||||
assert_eq!(serialized.len(), 1);
|
||||
assert_eq!(serialized["foo_bar"], "baz");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn deserialize() {
|
||||
let mut serialized = BTreeMap::new();
|
||||
serialized.insert(String::from("foo_bar"), String::from("aaa"));
|
||||
|
||||
let params = WrapperParams::default();
|
||||
params.deserialize_fields(&serialized);
|
||||
|
||||
// This contains the values passed to the inner struct's deserialize function
|
||||
let deserialized = params
|
||||
.inner
|
||||
.deserialize_called_with
|
||||
.lock()
|
||||
.unwrap()
|
||||
.take()
|
||||
.unwrap();
|
||||
assert_eq!(deserialized.len(), 1);
|
||||
assert_eq!(deserialized["bar"], "aaa");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn deserialize_mismatching_prefix() {
|
||||
let mut serialized = BTreeMap::new();
|
||||
serialized.insert(String::from("foo_bar"), String::from("aaa"));
|
||||
serialized.insert(
|
||||
String::from("something"),
|
||||
String::from("this should not be there"),
|
||||
);
|
||||
|
||||
let params = WrapperParams::default();
|
||||
params.deserialize_fields(&serialized);
|
||||
|
||||
// The `something` key should not be passed to the child struct
|
||||
let deserialized = params
|
||||
.inner
|
||||
.deserialize_called_with
|
||||
.lock()
|
||||
.unwrap()
|
||||
.take()
|
||||
.unwrap();
|
||||
assert_eq!(deserialized.len(), 1);
|
||||
assert_eq!(deserialized["bar"], "aaa");
|
||||
}
|
||||
}
|
||||
|
||||
mod array_suffix {
|
||||
use super::super::*;
|
||||
|
||||
#[test]
|
||||
fn serialize() {
|
||||
let params = ArrayWrapperParams::default();
|
||||
|
||||
let serialized = params.serialize_fields();
|
||||
assert_eq!(serialized.len(), 3);
|
||||
assert_eq!(serialized["bar_1"], "baz");
|
||||
assert_eq!(serialized["bar_2"], "baz");
|
||||
assert_eq!(serialized["bar_2"], "baz");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn deserialize() {
|
||||
let mut serialized = BTreeMap::new();
|
||||
serialized.insert(String::from("bar_1"), String::from("aaa"));
|
||||
serialized.insert(String::from("bar_2"), String::from("bbb"));
|
||||
serialized.insert(String::from("bar_3"), String::from("ccc"));
|
||||
|
||||
let params = ArrayWrapperParams::default();
|
||||
params.deserialize_fields(&serialized);
|
||||
for (inner, expected_value) in params.inners.into_iter().zip(["aaa", "bbb", "ccc"]) {
|
||||
let deserialized = inner
|
||||
.deserialize_called_with
|
||||
.lock()
|
||||
.unwrap()
|
||||
.take()
|
||||
.unwrap();
|
||||
assert_eq!(deserialized.len(), 1);
|
||||
assert_eq!(deserialized["bar"], expected_value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue