Files
rojo/tests/read_projects.rs
Lucien Greathouse b093626a21 User plugin foundations for 0.6.0 (#257)
Starts work on #55.

This is similar to the previous work in #125. It's gated behind a new Cargo
feature, `user-plugins`. This time, the config gate is much smaller. The
`plugins` member of projects is still accessible when plugins aren't enabled,
but is always empty. Additionally, user plugins are only enabled if there's a
Lua state present in the snapshot context when the `SnapshotUserPlugins`
snapshot middleware runs. This not ever the case currently.

This code has very little possibility of rotting while we focus on other work,
since it'll be guaranteed to still compile and can be tested in isolation
without the feature being turned on.
2019-10-11 15:45:02 -07:00

113 lines
3.2 KiB
Rust

#[macro_use]
extern crate lazy_static;
use std::{
collections::{BTreeMap, HashMap},
path::{Path, PathBuf},
};
use pretty_assertions::assert_eq;
use rbx_dom_weak::RbxValue;
use librojo::project::{Project, ProjectNode};
lazy_static! {
static ref TEST_PROJECTS_ROOT: PathBuf =
{ Path::new(env!("CARGO_MANIFEST_DIR")).join("test-projects") };
}
#[test]
fn empty() {
let project_file_location = TEST_PROJECTS_ROOT.join("empty/default.project.json");
let project = Project::load_exact(&project_file_location).unwrap();
assert_eq!(project.name, "empty");
}
#[test]
fn empty_fuzzy_file() {
let project_file_location = TEST_PROJECTS_ROOT.join("empty/default.project.json");
let project = Project::load_fuzzy(&project_file_location).unwrap();
assert_eq!(project.name, "empty");
}
#[test]
fn empty_fuzzy_folder() {
let project_location = TEST_PROJECTS_ROOT.join("empty");
let project = Project::load_fuzzy(&project_location).unwrap();
assert_eq!(project.name, "empty");
}
#[test]
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 {
path: Some(project_location.join("lib")),
..Default::default()
};
let mut replicated_storage_children = BTreeMap::new();
replicated_storage_children.insert("Foo".to_string(), foo);
let replicated_storage = ProjectNode {
class_name: Some(String::from("ReplicatedStorage")),
children: replicated_storage_children,
..Default::default()
};
let mut http_service_properties = HashMap::new();
http_service_properties.insert(
"HttpEnabled".to_string(),
RbxValue::Bool { value: true }.into(),
);
let http_service = ProjectNode {
class_name: Some(String::from("HttpService")),
properties: http_service_properties,
..Default::default()
};
let mut root_children = BTreeMap::new();
root_children.insert("ReplicatedStorage".to_string(), replicated_storage);
root_children.insert("HttpService".to_string(), http_service);
let root_node = ProjectNode {
class_name: Some(String::from("DataModel")),
children: root_children,
..Default::default()
};
Project {
name: "single-sync-point".to_string(),
tree: root_node,
serve_port: None,
serve_place_ids: None,
plugins: Vec::new(),
file_location: project_location.join("default.project.json"),
}
};
assert_eq!(project, expected_project);
}
#[test]
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");
}