#![allow(clippy::upper_case_acronyms)]
use bevy_ecs::{component::Component, query::With, world::World};
use bevy_reflect::TypePath;
use bevy_serde_lens::{BevyObject, DefaultInit, WorldExtension};
use serde_json::json;
#[derive(Component, TypePath, Default)]
pub struct A(char);
#[derive(BevyObject)]
pub struct B {
a: DefaultInit,
}
#[derive(BevyObject)]
pub struct C {
#[serde(default)]
a: DefaultInit,
}
#[derive(BevyObject)]
pub struct D {
#[serde(skip)]
a: DefaultInit,
}
#[test]
pub fn test() {
let mut world = World::new();
world.load::(json!([{}])).unwrap();
let mut query = world.query_filtered::<(), With>();
assert!(query.get_single(&world).is_ok());
world.despawn_bound_objects::();
assert!(world.entities().is_empty());
assert!(query.get_single(&world).is_err());
world.load::(json!([{}])).unwrap();
let mut query = world.query_filtered::<(), With>();
assert!(query.get_single(&world).is_ok());
world.despawn_bound_objects::();
assert!(world.load::(json!([{}])).is_err());
assert!(world.entities().is_empty());
assert!(query.get_single(&world).is_err());
world.load::(json!([{"a": null}])).unwrap();
assert!(query.get_single(&world).is_ok());
let value = serde_json::to_value(&world.serialize_lens::()).unwrap();
assert_eq!(value, json!([{"a": null}]));
let value = serde_json::to_value(&world.serialize_lens::()).unwrap();
assert_eq!(value, json!([{}]));
world.despawn_bound_objects::();
world.load::(json!([{"a": null}])).unwrap();
assert!(query.get_single(&world).is_ok());
world.despawn_bound_objects::();
world.load::(json!([{"a": null}])).unwrap();
assert!(query.get_single(&world).is_ok());
}