use rbx_dom_weak::{
types::{BrickColor, Color3, Color3uint8, Enum, Font, Ref, Region3, SharedString, Vector3},
InstanceBuilder, WeakDom,
};
use crate::{text_deserializer::DecodedModel, to_writer};
#[test]
fn just_folder() {
let tree = WeakDom::new(InstanceBuilder::new("Folder"));
let mut buffer = Vec::new();
to_writer(&mut buffer, &tree, &[tree.root_ref()]).expect("failed to encode model");
let decoded = DecodedModel::from_reader(buffer.as_slice());
insta::assert_yaml_snapshot!(decoded);
}
#[test]
fn partially_present() {
let tree = WeakDom::new(InstanceBuilder::new("Folder").with_children(vec![
InstanceBuilder::new("StringValue").with_property("Value", "Hello"),
InstanceBuilder::new("StringValue"),
]));
let root_refs = tree.root().children();
let mut buffer = Vec::new();
to_writer(&mut buffer, &tree, root_refs).expect("failed to encode model");
let decoded = DecodedModel::from_reader(buffer.as_slice());
insta::assert_yaml_snapshot!(decoded);
}
#[test]
fn unknown_property() {
let tree =
WeakDom::new(InstanceBuilder::new("Folder").with_property("WILL_NEVER_EXIST", "Hi, mom!"));
let mut buffer = Vec::new();
to_writer(&mut buffer, &tree, &[tree.root_ref()]).expect("failed to encode model");
let decoded = DecodedModel::from_reader(buffer.as_slice());
insta::assert_yaml_snapshot!(decoded);
}
#[test]
fn unimplemented_type_known_property() {
let tree = WeakDom::new(InstanceBuilder::new("UIListLayout").with_property(
"Padding",
Region3::new(Vector3::new(0.0, 0.0, 50.0), Vector3::new(0.0, 0.0, 50.0)),
));
let mut buffer = Vec::new();
let result = to_writer(&mut buffer, &tree, &[tree.root_ref()]);
assert!(result.is_err());
}
#[test]
fn unimplemented_type_unknown_property() {
let tree = WeakDom::new(InstanceBuilder::new("Folder").with_property(
"WILL_NEVER_EXIST",
Region3::new(Vector3::new(0.0, 0.0, 50.0), Vector3::new(0.0, 0.0, 50.0)),
));
let mut buffer = Vec::new();
let result = to_writer(&mut buffer, &tree, &[tree.root_ref()]);
assert!(result.is_err());
}
#[test]
fn unknown_id() {
let tree = WeakDom::new(InstanceBuilder::new("Folder"));
let mut buffer = Vec::new();
let result = to_writer(&mut buffer, &tree, &[Ref::new()]);
assert!(result.is_err());
}
#[test]
fn migrated_properties() {
let tree = WeakDom::new(InstanceBuilder::new("Folder").with_children([
InstanceBuilder::new("ScreenGui").with_property("ScreenInsets", Enum::from_u32(0)),
InstanceBuilder::new("ScreenGui").with_property("IgnoreGuiInset", true),
InstanceBuilder::new("Part").with_property("Color", Color3::new(1.0, 1.0, 1.0)),
InstanceBuilder::new("Part").with_property("BrickColor", BrickColor::Alder),
InstanceBuilder::new("Part").with_property("brickColor", BrickColor::Alder),
InstanceBuilder::new("TextLabel").with_property("FontFace", Font::default()),
InstanceBuilder::new("TextLabel").with_property("Font", Enum::from_u32(8)),
]));
let mut buffer = Vec::new();
to_writer(&mut buffer, &tree, &[tree.root_ref()]).expect("failed to encode model");
let decoded = DecodedModel::from_reader(buffer.as_slice());
insta::assert_yaml_snapshot!(decoded);
}
#[test]
fn logical_properties_basepart_size() {
let tree = WeakDom::new(
InstanceBuilder::new("Folder")
.with_child(
InstanceBuilder::new("Part").with_property("Size", Vector3::new(1.0, 2.0, 3.0)),
)
.with_child(
InstanceBuilder::new("Part").with_property("size", Vector3::new(4.0, 5.0, 6.0)),
)
.with_child(InstanceBuilder::new("Part")),
);
let mut buffer = Vec::new();
to_writer(&mut buffer, &tree, tree.root().children()).expect("failed to encode model");
let decoded = DecodedModel::from_reader(buffer.as_slice());
insta::assert_yaml_snapshot!(decoded);
}
#[test]
fn part_color() {
let tree = WeakDom::new(
InstanceBuilder::new("Folder")
.with_child(
InstanceBuilder::new("Part")
.with_property("Color3uint8", Color3::new(-0.25, 0.5, 1.2)),
)
.with_child(
InstanceBuilder::new("Part")
.with_property("Color3uint8", Color3uint8::new(25, 86, 254)),
)
.with_child(
InstanceBuilder::new("Part").with_property("Color", Color3::new(0.0, 0.5, 1.0)),
)
.with_child(
InstanceBuilder::new("Part").with_property("Color", Color3uint8::new(1, 30, 100)),
),
);
let mut buf = Vec::new();
let _ = to_writer(&mut buf, &tree, tree.root().children());
let decoded = DecodedModel::from_reader(buf.as_slice());
insta::assert_yaml_snapshot!(decoded);
}
#[test]
fn default_shared_string() {
let mut tree = WeakDom::new(InstanceBuilder::new("Folder"));
let ref_1 = tree.insert(
tree.root_ref(),
InstanceBuilder::new("Model").with_property(
"ModelMeshData",
SharedString::new(b"arbitrary string".to_vec()),
),
);
let ref_2 = tree.insert(tree.root_ref(), InstanceBuilder::new("Model"));
let mut buf = Vec::new();
let _ = to_writer(&mut buf, &tree, &[ref_1, ref_2]);
let decoded = DecodedModel::from_reader(buf.as_slice());
insta::assert_yaml_snapshot!(decoded);
}