mirror of
https://github.com/Xevion/byte-me.git
synced 2025-12-06 15:14:36 -06:00
106 lines
3.5 KiB
Rust
106 lines
3.5 KiB
Rust
use byte_me_lib::strings::{transform_filename, truncate_string};
|
|
|
|
#[test]
|
|
fn test_transform_filename() {
|
|
// Test cases focusing on practical, readable outputs
|
|
|
|
// 1. Short filenames should remain unchanged
|
|
assert_eq!(transform_filename("test.mp4", 20), "test.mp4");
|
|
assert_eq!(transform_filename("short.txt", 15), "short.txt");
|
|
assert_eq!(transform_filename("a.b", 10), "a.b");
|
|
|
|
// 2. No extension cases - preserve meaningful start and end
|
|
assert_eq!(transform_filename("short_name", 15), "short_name");
|
|
assert_eq!(
|
|
transform_filename("very_long_document_name", 15),
|
|
"ver...ment_name"
|
|
);
|
|
assert_eq!(
|
|
transform_filename("medium_length_name", 13),
|
|
"med...th_name"
|
|
);
|
|
|
|
// 3. Normal extension cases (preserving extension)
|
|
assert_eq!(
|
|
transform_filename("very_long_video_file_name.mp4", 18),
|
|
"ver...ile_name.mp4"
|
|
);
|
|
assert_eq!(
|
|
transform_filename("document_with_long_name.pdf", 15),
|
|
"doc..._name.pdf"
|
|
);
|
|
assert_eq!(
|
|
transform_filename("image_file_name.jpeg", 15),
|
|
"ima...name.jpeg"
|
|
);
|
|
|
|
// 4. Numeric sequences (like user's example) - preserve start and end numbers
|
|
assert_eq!(
|
|
transform_filename("43509374693.TS.mp4", 15),
|
|
"435...93.TS.mp4"
|
|
);
|
|
assert_eq!(
|
|
transform_filename("20231201_video.mp4", 15),
|
|
"202...video.mp4"
|
|
);
|
|
assert_eq!(transform_filename("file_v2.1.3.tar", 12), "fi...1.3.tar");
|
|
|
|
// 5. Long extensions (treated as part of filename)
|
|
assert_eq!(
|
|
transform_filename("file.verylongextension", 15),
|
|
"fil...extension"
|
|
);
|
|
assert_eq!(
|
|
transform_filename("document.backup_old", 15),
|
|
"doc...ackup_old"
|
|
);
|
|
|
|
// 6. Edge cases
|
|
assert_eq!(transform_filename("", 10), "");
|
|
assert_eq!(transform_filename("a", 0), "");
|
|
assert_eq!(transform_filename("test", 4), "test");
|
|
assert_eq!(transform_filename("test", 3), "tes");
|
|
assert_eq!(transform_filename("ab", 2), "ab");
|
|
|
|
// 7. Very short limits - graceful degradation
|
|
assert_eq!(transform_filename("test.mp4", 8), "test.mp4");
|
|
assert_eq!(transform_filename("verylongname", 8), "ve...ame");
|
|
assert_eq!(transform_filename("test.mp4", 7), "tes.mp4");
|
|
assert_eq!(transform_filename("hello.txt", 9), "hello.txt");
|
|
|
|
// 8. Extension edge cases
|
|
assert_eq!(transform_filename("file.", 10), "file.");
|
|
assert_eq!(transform_filename(".hidden", 10), ".hidden");
|
|
assert_eq!(transform_filename("test.a", 10), "test.a");
|
|
|
|
// 9. Real-world examples
|
|
assert_eq!(
|
|
transform_filename("IMG_20231201_143022.jpg", 15),
|
|
"IMG...43022.jpg"
|
|
);
|
|
assert_eq!(
|
|
transform_filename("meeting_recording_final_v2.mp4", 20),
|
|
"mee...g_final_v2.mp4"
|
|
);
|
|
assert_eq!(
|
|
transform_filename("my document (copy).docx", 15),
|
|
"my ...opy).docx"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_truncate_string() {
|
|
// Test the helper function directly
|
|
assert_eq!(truncate_string("hello", 10), "hello");
|
|
assert_eq!(truncate_string("hello", 5), "hello");
|
|
assert_eq!(truncate_string("hello_world", 8), "he...rld");
|
|
assert_eq!(truncate_string("test", 4), "test");
|
|
assert_eq!(truncate_string("test", 3), "tes");
|
|
assert_eq!(truncate_string("ab", 2), "ab");
|
|
assert_eq!(truncate_string("a", 1), "a");
|
|
assert_eq!(truncate_string("hello", 1), "h");
|
|
assert_eq!(truncate_string("hello", 0), "");
|
|
assert_eq!(truncate_string("very_long_name", 10), "ver...name");
|
|
assert_eq!(truncate_string("document_name", 9), "doc...ame");
|
|
}
|