Support nested partitions and partitions directly targeting services (#122)

* Do the nested partition thing

* Tidy up touched code

* Add nested partition test project, not fully functional

* Clean up variable names, move path_metadata mutation strictly into snapshot_reconciler

* Remove path_metadata, snapshotting is now pure

* Factor out snapshot metadata storage to fix a missing case

* Pull instance_name out of per_path_metadata, closer to what we need

* Refactor to make metadata make more sense, part one

* All appears to be well

* Cull 'metadata_per_path' in favor of 'instances_per_path'

* Remove SnapshotContext

* InstanceMetadata -> PublicInstanceMetadata in web module

* Build in snapshot testing system for testing... snapshots?

* Remove pretty_assertions to see if it fixes a snapshot comparison bug

* Reintroduce pretty assertions, it's not the cause of inequality

* Fix snapshot tests with custom relative path serializer
This commit is contained in:
Lucien Greathouse
2019-02-07 14:55:01 -08:00
committed by GitHub
parent 38e3c198f2
commit ecb9b5e28f
37 changed files with 999 additions and 396 deletions

View File

@@ -1,16 +1,15 @@
#[macro_use] extern crate lazy_static;
extern crate librojo;
use std::{
collections::HashMap,
path::{Path, PathBuf},
};
use pretty_assertions::assert_eq;
use rbx_tree::RbxValue;
use librojo::{
project::{Project, ProjectNode, InstanceProjectNode, SyncPointProjectNode},
project::{Project, ProjectNode},
};
lazy_static! {
@@ -44,54 +43,52 @@ fn empty_fuzzy_folder() {
}
#[test]
fn single_sync_point() {
let project_file_location = TEST_PROJECTS_ROOT.join("single-sync-point/default.project.json");
let project = Project::load_exact(&project_file_location).unwrap();
fn single_partition_game() {
let project_location = TEST_PROJECTS_ROOT.join("single_partition_game");
let project = Project::load_fuzzy(&project_location).unwrap();
let expected_project = {
let foo = ProjectNode::SyncPoint(SyncPointProjectNode {
path: project_file_location.parent().unwrap().join("lib"),
});
let foo = ProjectNode {
path: Some(project_location.join("lib")),
..Default::default()
};
let mut replicated_storage_children = HashMap::new();
replicated_storage_children.insert("Foo".to_string(), foo);
let replicated_storage = ProjectNode::Instance(InstanceProjectNode {
class_name: "ReplicatedStorage".to_string(),
let replicated_storage = ProjectNode {
class_name: Some(String::from("ReplicatedStorage")),
children: replicated_storage_children,
properties: HashMap::new(),
metadata: Default::default(),
});
..Default::default()
};
let mut http_service_properties = HashMap::new();
http_service_properties.insert("HttpEnabled".to_string(), RbxValue::Bool {
value: true,
});
let http_service = ProjectNode::Instance(InstanceProjectNode {
class_name: "HttpService".to_string(),
children: HashMap::new(),
let http_service = ProjectNode {
class_name: Some(String::from("HttpService")),
properties: http_service_properties,
metadata: Default::default(),
});
..Default::default()
};
let mut root_children = HashMap::new();
root_children.insert("ReplicatedStorage".to_string(), replicated_storage);
root_children.insert("HttpService".to_string(), http_service);
let root_node = ProjectNode::Instance(InstanceProjectNode {
class_name: "DataModel".to_string(),
let root_node = ProjectNode {
class_name: Some(String::from("DataModel")),
children: root_children,
properties: HashMap::new(),
metadata: Default::default(),
});
..Default::default()
};
Project {
name: "single-sync-point".to_string(),
tree: root_node,
serve_port: None,
serve_place_ids: None,
file_location: project_file_location.clone(),
file_location: project_location.join("default.project.json"),
}
};
@@ -99,9 +96,17 @@ fn single_sync_point() {
}
#[test]
fn test_model() {
let project_file_location = TEST_PROJECTS_ROOT.join("test-model/default.project.json");
let project = Project::load_exact(&project_file_location).unwrap();
fn single_partition_model() {
let project_file_location = TEST_PROJECTS_ROOT.join("single_partition_model");
let project = Project::load_fuzzy(&project_file_location).unwrap();
assert_eq!(project.name, "test-model");
}
#[test]
fn composing_models() {
let project_file_location = TEST_PROJECTS_ROOT.join("composing_models");
let project = Project::load_fuzzy(&project_file_location).unwrap();
assert_eq!(project.name, "composing-models");
}