#![allow(dead_code)]
use std::env;
use std::fs;
use std::path::{Path, PathBuf};
pub const LIBRARIES: &[&str] = &[
"usd",
"usdGeom",
"usdLux",
"usdMedia",
"usdPhysics",
"usdProc",
"usdRender",
"usdSemantics",
"usdShade",
"usdSkel",
"usdUI",
"usdVol",
];
pub fn schemas() -> PathBuf {
PathBuf::from(env!("CARGO_WORKSPACE_DIR")).join("crates/openusd-schemas/schemas")
}
pub fn configured() -> openusd_build::Builder {
let mut builder = openusd_build::configure().search_path(schemas());
for library in LIBRARIES.iter().filter(|library| **library != "usd") {
let family = library.trim_start_matches("usd").to_lowercase();
builder = builder.extern_library(*library, format!("crate::{family}"));
}
builder.extern_library("usd", "::openusd::usd")
}
pub fn matches(expected: &Path, generated: &str) {
if env::var_os("UPDATE_EXPECTED").is_some() {
fs::write(expected, generated).expect("writes the expected file");
return;
}
let named = expected.file_name().unwrap_or(expected.as_os_str()).to_string_lossy();
let want = fs::read_to_string(expected).unwrap_or_else(|_| {
panic!(
"{} is missing; run the test with UPDATE_EXPECTED=1 to write it",
expected.display()
)
});
for (number, (want, got)) in want.lines().zip(generated.lines()).enumerate() {
assert_eq!(want, got, "{named} differs at line {}", number + 1);
}
assert_eq!(
want.lines().count(),
generated.lines().count(),
"{named} differs in length"
);
}