mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-20 20:55:50 +00:00
* Mostly mechanical port bits * Almost there * It builds again! * Turn on all the code again * Tests compiling but not passing * Stub work for value resolution * Implement resolution minus enums and derived properties * Implement property descriptor resolution * Update referent snapshots * Update unions test project Using a place file instead of a model yields better error messages in Roblox Studio. * Add easy shortcut to testing with local rbx-dom * Update rbx-dom * Add enum resolution * Update init.meta.json to use UnresolvedValue * Expand value resolution support, add test * Filter SharedString values from web API * Add 'property' builder method to InstanceSnapshot * Change InstanceSnapshot/InstanceBuilder boundary * Fix remove_file crash * rustfmt * Update to latest rbx_dom_lua * Update dependencies, including rbx_dom_weak * Update to latest rbx-dom * Update dependencies * Update rbx-dom, fixing more bugs * Remove experimental warning on binary place builds * Remove unused imports
151 lines
4.0 KiB
Rust
151 lines
4.0 KiB
Rust
use std::borrow::Cow;
|
|
|
|
use insta::assert_yaml_snapshot;
|
|
use maplit::hashmap;
|
|
|
|
use rojo_insta_ext::RedactionMap;
|
|
|
|
use crate::snapshot::{compute_patch_set, InstanceSnapshot, RojoTree};
|
|
|
|
#[test]
|
|
fn set_name_and_class_name() {
|
|
let mut redactions = RedactionMap::new();
|
|
|
|
let tree = empty_tree();
|
|
redactions.intern(tree.get_root_id());
|
|
|
|
let snapshot = InstanceSnapshot {
|
|
snapshot_id: None,
|
|
metadata: Default::default(),
|
|
name: Cow::Borrowed("Some Folder"),
|
|
class_name: Cow::Borrowed("Folder"),
|
|
properties: Default::default(),
|
|
children: Vec::new(),
|
|
};
|
|
|
|
let patch_set = compute_patch_set(&snapshot, &tree, tree.get_root_id());
|
|
let patch_value = redactions.redacted_yaml(patch_set);
|
|
|
|
assert_yaml_snapshot!(patch_value);
|
|
}
|
|
|
|
#[test]
|
|
fn set_property() {
|
|
let mut redactions = RedactionMap::new();
|
|
|
|
let tree = empty_tree();
|
|
redactions.intern(tree.get_root_id());
|
|
|
|
let snapshot = InstanceSnapshot {
|
|
snapshot_id: None,
|
|
metadata: Default::default(),
|
|
name: Cow::Borrowed("ROOT"),
|
|
class_name: Cow::Borrowed("ROOT"),
|
|
properties: hashmap! {
|
|
"PropertyName".to_owned() => "Hello, world!".into(),
|
|
},
|
|
children: Vec::new(),
|
|
};
|
|
|
|
let patch_set = compute_patch_set(&snapshot, &tree, tree.get_root_id());
|
|
let patch_value = redactions.redacted_yaml(patch_set);
|
|
|
|
assert_yaml_snapshot!(patch_value);
|
|
}
|
|
|
|
#[test]
|
|
fn remove_property() {
|
|
let mut redactions = RedactionMap::new();
|
|
|
|
let mut tree = empty_tree();
|
|
redactions.intern(tree.get_root_id());
|
|
|
|
{
|
|
let root_id = tree.get_root_id();
|
|
let mut root_instance = tree.get_instance_mut(root_id).unwrap();
|
|
root_instance.properties_mut().insert(
|
|
"Foo".to_owned(),
|
|
"This should be removed by the patch.".into(),
|
|
);
|
|
}
|
|
|
|
let snapshot = InstanceSnapshot {
|
|
snapshot_id: None,
|
|
metadata: Default::default(),
|
|
name: Cow::Borrowed("ROOT"),
|
|
class_name: Cow::Borrowed("ROOT"),
|
|
properties: Default::default(),
|
|
children: Vec::new(),
|
|
};
|
|
|
|
let patch_set = compute_patch_set(&snapshot, &tree, tree.get_root_id());
|
|
let patch_value = redactions.redacted_yaml(patch_set);
|
|
|
|
assert_yaml_snapshot!(patch_value);
|
|
}
|
|
|
|
#[test]
|
|
fn add_child() {
|
|
let mut redactions = RedactionMap::new();
|
|
|
|
let tree = empty_tree();
|
|
redactions.intern(tree.get_root_id());
|
|
|
|
let snapshot = InstanceSnapshot {
|
|
snapshot_id: None,
|
|
metadata: Default::default(),
|
|
name: Cow::Borrowed("ROOT"),
|
|
class_name: Cow::Borrowed("ROOT"),
|
|
properties: Default::default(),
|
|
children: vec![InstanceSnapshot {
|
|
snapshot_id: None,
|
|
metadata: Default::default(),
|
|
name: Cow::Borrowed("New"),
|
|
class_name: Cow::Borrowed("Folder"),
|
|
properties: Default::default(),
|
|
children: Vec::new(),
|
|
}],
|
|
};
|
|
|
|
let patch_set = compute_patch_set(&snapshot, &tree, tree.get_root_id());
|
|
let patch_value = redactions.redacted_yaml(patch_set);
|
|
|
|
assert_yaml_snapshot!(patch_value);
|
|
}
|
|
|
|
#[test]
|
|
fn remove_child() {
|
|
let mut redactions = RedactionMap::new();
|
|
|
|
let mut tree = empty_tree();
|
|
redactions.intern(tree.get_root_id());
|
|
|
|
{
|
|
let root_id = tree.get_root_id();
|
|
let new_id = tree.insert_instance(
|
|
root_id,
|
|
InstanceSnapshot::new().name("Should not appear in snapshot"),
|
|
);
|
|
|
|
redactions.intern(new_id);
|
|
}
|
|
|
|
let snapshot = InstanceSnapshot {
|
|
snapshot_id: None,
|
|
metadata: Default::default(),
|
|
name: Cow::Borrowed("ROOT"),
|
|
class_name: Cow::Borrowed("ROOT"),
|
|
properties: Default::default(),
|
|
children: Vec::new(),
|
|
};
|
|
|
|
let patch_set = compute_patch_set(&snapshot, &tree, tree.get_root_id());
|
|
let patch_value = redactions.redacted_yaml(patch_set);
|
|
|
|
assert_yaml_snapshot!(patch_value);
|
|
}
|
|
|
|
fn empty_tree() -> RojoTree {
|
|
RojoTree::new(InstanceSnapshot::new().name("ROOT").class_name("ROOT"))
|
|
}
|