// file: crates/common/game-assets-lib/unit_tests/resolver.rs // version: 1 #[test] fn logical_namespaces_resolve_to_separate_roots() { game_logging_lib::with_test_tracing(|| { let resolver = crate::AssetResolver::new("assets/common", "assets/game-reflex-poc"); assert_eq!(resolver.resolve("common://data/runtime.json"), Ok(std::path::PathBuf::from("assets/common/data/runtime.json"))); assert_eq!(resolver.resolve("game://data/game.json"), Ok(std::path::PathBuf::from("assets/game-reflex-poc/data/game.json"))); }); } #[test] fn traversal_and_unknown_schemes_are_rejected() { game_logging_lib::with_test_tracing(|| { let resolver = crate::AssetResolver::new("assets/common", "assets/game-reflex-poc"); assert_eq!(resolver.resolve("game://../secret"), Err(crate::AssetError::InvalidPath)); assert_eq!(resolver.resolve("file://data/game.json"), Err(crate::AssetError::UnsupportedScheme)); assert_eq!(resolver.resolve("common://"), Err(crate::AssetError::EmptyPath)); }); }