#[path = "../../../os-vfs-lookup/src/lib.rs"] mod os_vfs_lookup; #[path = "../../../os-vfs-open/src/lib.rs"] mod os_vfs_open; #[path = "../../../os-vfs-offset/src/lib.rs"] mod offset; fn handles() -> (os_vfs_open::Handle, os_vfs_open::Handle) { let first = os_vfs_lookup::Mount::new(1, 11, b"dosya").unwrap(); let second = os_vfs_lookup::Mount::new(2, 22, b"dosya").unwrap(); let lookup = os_vfs_lookup::LookupTable::new(first, second).unwrap(); let dentry = lookup.lookup(1, b"dosya").unwrap(); let mut opens = os_vfs_open::OpenTable::new(); (opens.open(&lookup, dentry, os_vfs_open::OpenFlags::READ_ONLY).unwrap(), opens.open(&lookup, dentry, os_vfs_open::OpenFlags::READ_ONLY).unwrap()) } #[test] fn os_vfs_paths_offset_positive() { let (first, second) = handles(); let mut table = offset::CursorTable::new(); table.attach(first).unwrap(); table.attach(second).unwrap(); assert_eq!(table.read_complete(first.id, 8, 3), Ok(3)); assert_eq!(table.offset(first.id), Ok(3)); assert_eq!(table.offset(second.id), Ok(0)); assert_eq!(table.seek(first.id, offset::Whence::Current, 4, 10), Ok(7)); assert_eq!(table.seek(first.id, offset::Whence::End, -2, 10), Ok(8)); assert_eq!(table.offset(first.id), Ok(8)); assert_eq!(table.offset(second.id), Ok(0)); } #[test] fn os_vfs_paths_offset_negative() { let (first, second) = handles(); let mut table = offset::CursorTable::new(); table.attach(first).unwrap(); table.attach(second).unwrap(); assert_eq!(table.read_complete(first.id, 8, 3), Ok(3)); let before = table; assert_eq!(table.seek(first.id, offset::Whence::Start, -1, 10), Err(offset::Error::NegativeSeek)); assert_eq!(table, before); assert_eq!(table.seek(first.id, offset::Whence::End, 1, u64::MAX), Err(offset::Error::Overflow)); assert_eq!(table, before); assert_eq!(table.read_complete(first.id, 3, 4), Err(offset::Error::InvalidCompletion)); assert_eq!(table, before); assert_eq!(table.offset(second.id), Ok(0)); assert_eq!(table.seek(second.id, offset::Whence::Start, 5, 10), Ok(5)); assert_eq!(table.offset(first.id), Ok(3)); }