aboutsummaryrefslogtreecommitdiff
path: root/crates/nres/src/tests.rs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-02-12 01:00:46 +0300
committerValentin Popov <valentin@popov.link>2026-02-12 01:00:46 +0300
commit3c06e768d603ea4452fc95cc48951af9270f76a1 (patch)
tree453f9b747788ec4b0a12cf42a3ef5f96c53c254c /crates/nres/src/tests.rs
parent70ed6480c2b2b2ecab4956216c1e8e85b0938b4c (diff)
downloadfparkan-3c06e768d603ea4452fc95cc48951af9270f76a1.tar.xz
fparkan-3c06e768d603ea4452fc95cc48951af9270f76a1.zip
feat: добавить поддержку атомарной замены файлов для Windows и тесты на максимальную длину имени
Diffstat (limited to 'crates/nres/src/tests.rs')
-rw-r--r--crates/nres/src/tests.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/crates/nres/src/tests.rs b/crates/nres/src/tests.rs
index 51ec8b4..6de02e5 100644
--- a/crates/nres/src/tests.rs
+++ b/crates/nres/src/tests.rs
@@ -771,6 +771,41 @@ fn nres_synthetic_read_find_and_edit() {
}
#[test]
+fn nres_max_name_length_roundtrip() {
+ let max_name = "12345678901234567890123456789012345";
+ assert_eq!(max_name.len(), 35);
+
+ let src = build_nres_bytes(&[SyntheticEntry {
+ kind: 9,
+ attr1: 1,
+ attr2: 2,
+ attr3: 3,
+ name: max_name,
+ data: b"payload",
+ }]);
+
+ let archive = Archive::open_bytes(Arc::from(src.into_boxed_slice()), OpenOptions::default())
+ .expect("open synthetic nres failed");
+
+ assert_eq!(archive.entry_count(), 1);
+ assert_eq!(archive.find(max_name), Some(EntryId(0)));
+ assert_eq!(
+ archive.find(&max_name.to_ascii_lowercase()),
+ Some(EntryId(0))
+ );
+
+ let entry = archive.get(EntryId(0)).expect("missing entry 0");
+ assert_eq!(entry.meta.name, max_name);
+ assert_eq!(
+ archive
+ .read(EntryId(0))
+ .expect("read payload failed")
+ .as_slice(),
+ b"payload"
+ );
+}
+
+#[test]
fn nres_find_falls_back_when_sort_index_is_out_of_range() {
let mut bytes = build_nres_bytes(&[
SyntheticEntry {