treehouse/crates/treehouse/tests/it/vfs/cd.rs
liquidev 143be85416 add explicit content types to VFS
this allows us to serve a precise Content-Type header for all our pages, rendering treehouse usable in browsers that require one
(like terminal browsers---w3m, lynx)
2025-01-14 23:10:01 +01:00

63 lines
1.7 KiB
Rust

use treehouse::vfs::{
entries, query, BufferedFile, Cd, Content, MemDir, ToDynDir, VPath, VPathBuf,
};
const HEWWO: &[u8] = b"hewwo :3";
const FWOOFEE: &[u8] = b"fwoofee -w-";
const BOOP: &[u8] = b"boop >w<";
fn vfs() -> MemDir {
let file1 = BufferedFile::new(Content::new("text/plain", HEWWO.to_vec()));
let file2 = BufferedFile::new(Content::new("text/plain", FWOOFEE.to_vec()));
let file3 = BufferedFile::new(Content::new("text/plain", BOOP.to_vec()));
let mut innermost = MemDir::new();
innermost.add(VPath::new("file3.txt"), file3.to_dyn());
let mut inner = MemDir::new();
inner.add(VPath::new("file1.txt"), file1.to_dyn());
inner.add(VPath::new("file2.txt"), file2.to_dyn());
inner.add(VPath::new("innermost"), innermost.to_dyn());
let mut vfs = MemDir::new();
vfs.add(VPath::new("inner"), inner.to_dyn());
vfs
}
#[test]
fn dir1() {
let outer = vfs();
let inner = Cd::new(outer, VPathBuf::new("inner"));
let mut dir = entries(&inner, VPath::ROOT);
dir.sort();
assert_eq!(
dir,
vec![
VPathBuf::new("file1.txt"),
VPathBuf::new("file2.txt"),
VPathBuf::new("innermost"),
]
);
}
#[test]
fn dir2() {
let outer = vfs();
let innermost = Cd::new(&outer, VPathBuf::new("inner/innermost"));
let mut dir = entries(&innermost, VPath::ROOT);
dir.sort();
assert_eq!(dir, vec![VPathBuf::new("file3.txt")]);
}
#[test]
fn content() {
let outer = vfs();
let inner = Cd::new(&outer, VPathBuf::new("inner"));
assert_eq!(
query::<Content>(&inner, VPath::new("test1.txt")).map(Content::bytes),
query::<Content>(&outer, VPath::new("inner/test1.txt")).map(Content::bytes)
);
}