227 lines
8.7 KiB
Rust
227 lines
8.7 KiB
Rust
//! Exact Rust translations of `DetachAllThisCommandTests`.
|
|
|
|
use libremetaverse_compat_tests::block_on;
|
|
use libremetaverse_compat_tests::rlv_support::{RlvHarness, SampleInventoryTree, guid};
|
|
use libremetaverse_rlv::{InventoryMap, RlvAttachmentPoint, RlvWearableType};
|
|
use libremetaverse_types::compat::Guid;
|
|
const HAPPY: &str = "b1111111-bbbb-4bbb-8bbb-bbbbbbbbbbbb";
|
|
const RETRO: &str = "b2222222-bbbb-4bbb-8bbb-bbbbbbbbbbbb";
|
|
const GLASSES: &str = "c1111111-cccc-4ccc-8ccc-cccccccccccc";
|
|
const FANCY: &str = "d1111111-dddd-4ddd-8ddd-dddddddddddd";
|
|
const PRIM1: &str = "11111111-0001-4aaa-8aaa-ffffffffffff";
|
|
#[derive(Clone, Copy)]
|
|
enum Setup {
|
|
Normal,
|
|
NoStrip,
|
|
NoStripLink,
|
|
Point,
|
|
PointNoStrip,
|
|
PointLink,
|
|
Wearable,
|
|
WearableNoStrip,
|
|
WearableLink,
|
|
WearablePrivate,
|
|
}
|
|
fn attach(item: &mut libremetaverse_rlv::RlvInventoryItem, point: RlvAttachmentPoint, prim: &str) {
|
|
item.set_attached_to(Some(Some(point)));
|
|
item.set_attached_prim_id(Some(Some(guid(prim))));
|
|
}
|
|
fn run(command: &str, setup: Setup, sender_item: bool) -> Vec<Guid> {
|
|
let h = RlvHarness::new().expect("RlvService constructor");
|
|
let mut tree = SampleInventoryTree::build().unwrap();
|
|
attach(
|
|
&mut tree.retro_pants,
|
|
RlvAttachmentPoint::Pelvis,
|
|
"11111111-0002-4aaa-8aaa-ffffffffffff",
|
|
);
|
|
attach(
|
|
&mut tree.fancy_hat,
|
|
RlvAttachmentPoint::Chin,
|
|
"11111111-0003-4aaa-8aaa-ffffffffffff",
|
|
);
|
|
if matches!(
|
|
setup,
|
|
Setup::Wearable | Setup::WearableNoStrip | Setup::WearableLink | Setup::WearablePrivate
|
|
) {
|
|
tree.happy_shirt
|
|
.set_worn_on(Some(Some(RlvWearableType::Pants)));
|
|
tree.glasses.set_worn_on(Some(Some(RlvWearableType::Pants)));
|
|
} else {
|
|
attach(&mut tree.happy_shirt, RlvAttachmentPoint::Chest, PRIM1);
|
|
attach(
|
|
&mut tree.glasses,
|
|
RlvAttachmentPoint::Chest,
|
|
"11111111-0004-4aaa-8aaa-ffffffffffff",
|
|
);
|
|
}
|
|
if matches!(
|
|
setup,
|
|
Setup::NoStrip
|
|
| Setup::NoStripLink
|
|
| Setup::PointNoStrip
|
|
| Setup::PointLink
|
|
| Setup::WearableNoStrip
|
|
| Setup::WearableLink
|
|
) {
|
|
tree.hats.set_name("nostrip Hats".into());
|
|
tree.retro_pants.set_name("nostrip Retro Pants".into());
|
|
}
|
|
if matches!(
|
|
setup,
|
|
Setup::NoStripLink | Setup::PointLink | Setup::WearableLink
|
|
) {
|
|
tree.fancy_hat.set_is_link(true);
|
|
attach(
|
|
&mut tree.party_hat,
|
|
RlvAttachmentPoint::Chin,
|
|
"11111111-0005-4aaa-8aaa-ffffffffffff",
|
|
);
|
|
}
|
|
if matches!(setup, Setup::WearablePrivate) {
|
|
tree.hats.set_name(".hats".into());
|
|
}
|
|
h.queries.lock().unwrap().inventory_map = Some(InventoryMap::new(tree.root, vec![]).unwrap());
|
|
if sender_item {
|
|
block_on(h.process_from(command, PRIM1, "Happy Shirt")).unwrap();
|
|
} else {
|
|
block_on(h.process(command)).unwrap();
|
|
}
|
|
let mut v = h.actions.lock().unwrap().detachments[0].clone();
|
|
v.sort_by_key(|id| id.0);
|
|
v
|
|
}
|
|
fn ids(values: &[&str]) -> Vec<Guid> {
|
|
let mut v: Vec<_> = values.iter().map(|s| guid(s)).collect();
|
|
v.sort_by_key(|id| id.0);
|
|
v
|
|
}
|
|
fn normal() -> Vec<Guid> {
|
|
ids(&[HAPPY, RETRO, FANCY])
|
|
}
|
|
fn nostrip() -> Vec<Guid> {
|
|
ids(&[HAPPY])
|
|
}
|
|
fn link() -> Vec<Guid> {
|
|
ids(&[HAPPY, FANCY])
|
|
}
|
|
fn selected() -> Vec<Guid> {
|
|
ids(&[HAPPY, RETRO, GLASSES, FANCY])
|
|
}
|
|
fn selected_nostrip() -> Vec<Guid> {
|
|
ids(&[HAPPY, GLASSES])
|
|
}
|
|
fn selected_link() -> Vec<Guid> {
|
|
ids(&[HAPPY, GLASSES, FANCY])
|
|
}
|
|
|
|
// parity-case: LibreMetaverse.Tests/RLV/Commands/DetachAllThisCommandTests.cs::DetachAllThisCommandTests.DetachAllThisForce_Default::test 8fe4eacf8cc5841e638d69540e2ab080efc3e64534346ece854429d0476f8a84 translated
|
|
#[test]
|
|
fn detach_all_this_default() {
|
|
assert_eq!(run("@detachallthis=force", Setup::Normal, true), normal());
|
|
}
|
|
// parity-case: LibreMetaverse.Tests/RLV/Commands/DetachAllThisCommandTests.cs::DetachAllThisCommandTests.DetachAllThisForce_Nostrip::test 754bd01f2f0b77c05ee5d1548f76337da93d980a48ad0922d80f34707c4fe68b translated
|
|
#[test]
|
|
fn detach_all_this_honors_nostrip() {
|
|
assert_eq!(run("@detachallthis=force", Setup::NoStrip, true), nostrip());
|
|
}
|
|
// parity-case: LibreMetaverse.Tests/RLV/Commands/DetachAllThisCommandTests.cs::DetachAllThisCommandTests.DetachAllThisForce_Nostrip_LinkException::test 0cce15f7cfda160733c305b0867be31875e1814b38e2e980525d960e0214ad51 translated
|
|
#[test]
|
|
fn detach_all_this_honors_link_exception() {
|
|
assert_eq!(
|
|
run("@detachallthis=force", Setup::NoStripLink, true),
|
|
link()
|
|
);
|
|
}
|
|
// parity-case: LibreMetaverse.Tests/RLV/Commands/DetachAllThisCommandTests.cs::DetachAllThisCommandTests.DetachAllThisForce_ById::test 2f657ffed317d4d7f97f6111942ea8214996872da6294f7c66d07890647f7f63 translated
|
|
#[test]
|
|
fn detach_all_this_by_id() {
|
|
assert_eq!(
|
|
run(
|
|
&format!("@detachallthis:{PRIM1}=force"),
|
|
Setup::Normal,
|
|
false
|
|
),
|
|
normal()
|
|
);
|
|
}
|
|
// parity-case: LibreMetaverse.Tests/RLV/Commands/DetachAllThisCommandTests.cs::DetachAllThisCommandTests.DetachAllThisForce_ById_Nostrip::test 48ab7aec02efd652478ca3110dd39011fd9b79a1e0a1336f53e9f77b2f56e635 translated
|
|
#[test]
|
|
fn detach_all_this_by_id_honors_nostrip() {
|
|
assert_eq!(
|
|
run(
|
|
&format!("@detachallthis:{PRIM1}=force"),
|
|
Setup::NoStrip,
|
|
false
|
|
),
|
|
nostrip()
|
|
);
|
|
}
|
|
// parity-case: LibreMetaverse.Tests/RLV/Commands/DetachAllThisCommandTests.cs::DetachAllThisCommandTests.DetachAllThisForce_ById_Nostrip_LinkException::test 5d882f00bfe73cecfc3e96c26ff18a20c00481619996b25ed2ce851eff9a86ce translated
|
|
#[test]
|
|
fn detach_all_this_by_id_honors_link_exception() {
|
|
assert_eq!(
|
|
run(
|
|
&format!("@detachallthis:{PRIM1}=force"),
|
|
Setup::NoStripLink,
|
|
false
|
|
),
|
|
link()
|
|
);
|
|
}
|
|
// parity-case: LibreMetaverse.Tests/RLV/Commands/DetachAllThisCommandTests.cs::DetachAllThisCommandTests.DetachThisAllForce_ByRlvAttachmentPoint::test 30e6806d5c484bf2a2f9a3b1fcdb5e88272874b0e755462c3b0bfa97326d180c translated
|
|
#[test]
|
|
fn detach_all_this_by_attachment_point() {
|
|
assert_eq!(
|
|
run("@detachallthis:chest=force", Setup::Point, false),
|
|
selected()
|
|
);
|
|
}
|
|
// parity-case: LibreMetaverse.Tests/RLV/Commands/DetachAllThisCommandTests.cs::DetachAllThisCommandTests.DetachThisAllForce_ByRlvAttachmentPoint_NoStrip::test 657125be7aec668f72e744cc87cae38f022c8ccf9e8980c8ef4bea7e0557fdd1 translated
|
|
#[test]
|
|
fn detach_all_this_by_attachment_point_honors_nostrip() {
|
|
assert_eq!(
|
|
run("@detachallthis:chest=force", Setup::PointNoStrip, false),
|
|
selected_nostrip()
|
|
);
|
|
}
|
|
// parity-case: LibreMetaverse.Tests/RLV/Commands/DetachAllThisCommandTests.cs::DetachAllThisCommandTests.DetachThisAllForce_ByRlvAttachmentPoint_NoStrip_LinkException::test fe019191a9a3df9a43fd500db775ba5f874f4b767096365cba390480b2b2189f translated
|
|
#[test]
|
|
fn detach_all_this_by_attachment_point_honors_link_exception() {
|
|
assert_eq!(
|
|
run("@detachallthis:chest=force", Setup::PointLink, false),
|
|
selected_link()
|
|
);
|
|
}
|
|
// parity-case: LibreMetaverse.Tests/RLV/Commands/DetachAllThisCommandTests.cs::DetachAllThisCommandTests.DetachAllThisForce_ByRlvWearableType::test ccf302d870f323790af63873fcbb172f084c4e7400a728e480378706b5fb9947 translated
|
|
#[test]
|
|
fn detach_all_this_by_wearable() {
|
|
assert_eq!(
|
|
run("@detachallthis:pants=force", Setup::Wearable, false),
|
|
selected()
|
|
);
|
|
}
|
|
// parity-case: LibreMetaverse.Tests/RLV/Commands/DetachAllThisCommandTests.cs::DetachAllThisCommandTests.DetachAllThisForce_ByRlvWearableType_NoStrip::test 1947e7c9cfe8bb931ee7ad50c6f505515feeb9d30b236702a2d68fb4734a30f0 translated
|
|
#[test]
|
|
fn detach_all_this_by_wearable_honors_nostrip() {
|
|
assert_eq!(
|
|
run("@detachallthis:pants=force", Setup::WearableNoStrip, false),
|
|
selected_nostrip()
|
|
);
|
|
}
|
|
// parity-case: LibreMetaverse.Tests/RLV/Commands/DetachAllThisCommandTests.cs::DetachAllThisCommandTests.DetachAllThisForce_ByRlvWearableType_NoStrip_LinkException::test 50ec101ab557e78d947ac7f9878acd4df4957482f358a7ce02371df8754add94 translated
|
|
#[test]
|
|
fn detach_all_this_by_wearable_honors_link_exception() {
|
|
assert_eq!(
|
|
run("@detachallthis:pants=force", Setup::WearableLink, false),
|
|
selected_link()
|
|
);
|
|
}
|
|
// parity-case: LibreMetaverse.Tests/RLV/Commands/DetachAllThisCommandTests.cs::DetachAllThisCommandTests.DetachAllThisForce_ByRlvWearableType_PrivateFolder::test 2ba745b093f0348d8754f74073c6a6a0f18383b5ce4a73721b39b01f0306a994 translated
|
|
#[test]
|
|
fn detach_all_this_by_wearable_skips_private_folder() {
|
|
assert_eq!(
|
|
run("@detachallthis:pants=force", Setup::WearablePrivate, false),
|
|
ids(&[HAPPY, RETRO, GLASSES])
|
|
);
|
|
}
|