Add support for optional paths (#472)

* 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>
This commit is contained in:
James Onnen
2022-04-19 15:43:47 -07:00
committed by GitHub
parent 654690d73e
commit fe81e55925
16 changed files with 450 additions and 82 deletions

View File

@@ -53,6 +53,7 @@ gen_build_tests! {
txt,
txt_in_folder,
unresolved_values,
optional,
weldconstraint,
}

View File

@@ -220,3 +220,34 @@ fn empty_json_model() {
);
});
}
#[test]
#[ignore = "Rojo does not watch missing, optional files for changes."]
fn add_optional_folder() {
run_serve_test("add_optional_folder", |session, mut redactions| {
let info = session.get_api_rojo().unwrap();
let root_id = info.root_instance_id;
assert_yaml_snapshot!("add_optional_folder", redactions.redacted_yaml(info));
let read_response = session.get_api_read(root_id).unwrap();
assert_yaml_snapshot!(
"add_optional_folder_all",
read_response.intern_and_redact(&mut redactions, root_id)
);
fs::create_dir(session.path().join("create-later")).unwrap();
let subscribe_response = session.get_api_subscribe(0).unwrap();
assert_yaml_snapshot!(
"add_optional_folder_subscribe",
subscribe_response.intern_and_redact(&mut redactions, ())
);
let read_response = session.get_api_read(root_id).unwrap();
assert_yaml_snapshot!(
"add_optional_folder_all-2",
read_response.intern_and_redact(&mut redactions, root_id)
);
});
}