mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-20 20:55:50 +00:00
* Changes project-related structures to use `BTreeMap` instead of `HashMap` for children to aid determiniusm * Changes imfs-related structures to have total ordering and use `BTreeSet` instead of `HashSet` * Upgrades dependencies to `bx_dom_weak`1.2.0 and rbx_xml 0.5.0 to aid in more determinism stuff * Re-exposes the `RbxSession`'s root project via `root_project()` * Implements `Default` for a couple things * Tweaks visualization code to support visualizing trees not attached to an `RbxSession` * Adds an ID-invariant comparison method for `rbx_tree` relying on previous determinism changes * Adds a (disabled) test to start finding issues in the reconciler with regards to communicativity of snapshot application * Adds a snapshot testing system that operates on `RbxTree` and associated metadata, which are committed in this change
68 lines
1.8 KiB
Rust
68 lines
1.8 KiB
Rust
mod test_util;
|
|
|
|
use std::{
|
|
fs,
|
|
path::{Path, PathBuf},
|
|
sync::Arc,
|
|
thread,
|
|
time::Duration,
|
|
};
|
|
|
|
use tempfile::{tempdir, TempDir};
|
|
|
|
use librojo::{
|
|
live_session::LiveSession,
|
|
project::Project,
|
|
};
|
|
|
|
use crate::test_util::{
|
|
copy_recursive,
|
|
tree::tree_step,
|
|
};
|
|
|
|
#[test]
|
|
fn multi_partition_game() {
|
|
let _ = env_logger::try_init();
|
|
let source_path = project_path("multi_partition_game");
|
|
|
|
let (dir, live_session) = start_session(&source_path);
|
|
tree_step("initial", &live_session, &source_path);
|
|
|
|
let added_path = dir.path().join("a/added");
|
|
fs::create_dir_all(&added_path)
|
|
.expect("Couldn't create directory");
|
|
thread::sleep(Duration::from_millis(250));
|
|
|
|
tree_step("with_dir", &live_session, &source_path);
|
|
|
|
let moved_path = dir.path().join("b/added");
|
|
fs::rename(&added_path, &moved_path)
|
|
.expect("Couldn't rename directory");
|
|
thread::sleep(Duration::from_millis(250));
|
|
|
|
tree_step("with_moved_dir", &live_session, &source_path);
|
|
}
|
|
|
|
/// Find the path to the given test project relative to the manifest.
|
|
fn project_path(name: &str) -> PathBuf {
|
|
let mut path = Path::new(env!("CARGO_MANIFEST_DIR")).join("../test-projects");
|
|
path.push(name);
|
|
path
|
|
}
|
|
|
|
/// Starts a new LiveSession for the project located at the given file path.
|
|
fn start_session(source_path: &Path) -> (TempDir, LiveSession) {
|
|
let dir = tempdir()
|
|
.expect("Couldn't create temporary directory");
|
|
|
|
copy_recursive(&source_path, dir.path())
|
|
.expect("Couldn't copy project to temporary directory");
|
|
|
|
let project = Arc::new(Project::load_fuzzy(dir.path())
|
|
.expect("Couldn't load project from temp directory"));
|
|
|
|
let live_session = LiveSession::new(Arc::clone(&project))
|
|
.expect("Couldn't start live session");
|
|
|
|
(dir, live_session)
|
|
} |