mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-20 20:55:50 +00:00
* Add PathNode with optional fields to project. This allows a path to be defined either as `"$path": "src"` or `"$path": { "optional": "src" }`
* Make $path truly optional
* Prevent rojo from erroring if no project node is resolved
* Use match instead of if-statement
* Add end-to-end tests (credit to MobiusCraftFlip for initial scenario)
* Pass option with ref inside instead of reference to option
* Empty commit to restart GitHub Actions
* Simplify build test
* Minimize serve test: it fails
* Simplify serve test even more
* Ignore failing serve test
Co-authored-by: Lucien Greathouse <me@lpghatguy.com>
100 lines
2.4 KiB
Rust
100 lines
2.4 KiB
Rust
use std::{fs, path::Path, process::Command};
|
|
|
|
use insta::assert_snapshot;
|
|
use tempfile::tempdir;
|
|
|
|
use crate::rojo_test::io_util::{get_working_dir_path, BUILD_TESTS_PATH, ROJO_PATH};
|
|
|
|
macro_rules! gen_build_tests {
|
|
( $($test_name: ident,)* ) => {
|
|
$(
|
|
paste::item! {
|
|
#[test]
|
|
fn [<build_ $test_name>]() {
|
|
let _ = env_logger::try_init();
|
|
|
|
run_build_test(stringify!($test_name));
|
|
}
|
|
}
|
|
)*
|
|
};
|
|
}
|
|
|
|
gen_build_tests! {
|
|
client_in_folder,
|
|
client_init,
|
|
csv_bug_145,
|
|
csv_bug_147,
|
|
csv_in_folder,
|
|
deep_nesting,
|
|
gitkeep,
|
|
ignore_glob_inner,
|
|
ignore_glob_nested,
|
|
ignore_glob_spec,
|
|
infer_service_name,
|
|
infer_starter_player,
|
|
init_meta_class_name,
|
|
init_meta_properties,
|
|
init_with_children,
|
|
json_as_lua,
|
|
json_model_in_folder,
|
|
json_model_legacy_name,
|
|
module_in_folder,
|
|
module_init,
|
|
project_composed_default,
|
|
project_composed_file,
|
|
project_root_name,
|
|
rbxm_in_folder,
|
|
rbxmx_in_folder,
|
|
rbxmx_ref,
|
|
script_meta_disabled,
|
|
server_in_folder,
|
|
server_init,
|
|
txt,
|
|
txt_in_folder,
|
|
unresolved_values,
|
|
optional,
|
|
weldconstraint,
|
|
}
|
|
|
|
fn run_build_test(test_name: &str) {
|
|
let working_dir = get_working_dir_path();
|
|
|
|
let input_path = Path::new(BUILD_TESTS_PATH).join(test_name);
|
|
|
|
let output_dir = tempdir().expect("couldn't create temporary directory");
|
|
let output_path = output_dir.path().join(format!("{}.rbxmx", test_name));
|
|
|
|
let output = Command::new(ROJO_PATH)
|
|
.args(&[
|
|
"build",
|
|
input_path.to_str().unwrap(),
|
|
"-o",
|
|
output_path.to_str().unwrap(),
|
|
])
|
|
.env("RUST_LOG", "error")
|
|
.current_dir(working_dir)
|
|
.output()
|
|
.expect("Couldn't start Rojo");
|
|
|
|
print!("{}", String::from_utf8_lossy(&output.stdout));
|
|
eprint!("{}", String::from_utf8_lossy(&output.stderr));
|
|
|
|
assert!(output.status.success(), "Rojo did not exit successfully");
|
|
|
|
let contents = fs::read_to_string(&output_path).expect("Couldn't read output file");
|
|
|
|
let mut settings = insta::Settings::new();
|
|
|
|
let snapshot_path = Path::new(BUILD_TESTS_PATH)
|
|
.parent()
|
|
.unwrap()
|
|
.join("build-test-snapshots");
|
|
|
|
settings.set_snapshot_path(snapshot_path);
|
|
|
|
settings.bind(|| {
|
|
assert_snapshot!(test_name, contents);
|
|
});
|
|
}
|