1#![cfg(feature = "raw_os_str")] 2 3use os_str_bytes::RawOsStr; 4 5mod raw_common; 6use raw_common::RAW_WTF8_STRING; 7 8#[test] 9fn test_ends_with() { 10 #[track_caller] 11 fn test(result: bool, suffix: &[u8]) { 12 let suffix = RawOsStr::assert_from_raw_bytes(suffix); 13 assert_eq!(result, RAW_WTF8_STRING.ends_with_os(suffix)); 14 } 15 16 test(true, b""); 17 test(true, b"r"); 18 test(true, b"ar"); 19 test(true, b"bar"); 20 if cfg!(not(windows)) { 21 test(true, b"\xA9bar"); 22 test(true, b"\x92\xA9bar"); 23 test(true, b"\x9F\x92\xA9bar"); 24 } 25 test(cfg!(windows), b"\xED\xB2\xA9bar"); 26 test(true, b"\xF0\x9F\x92\xA9bar"); 27 test(true, b"\xED\xA0\xBD\xF0\x9F\x92\xA9bar"); 28 test(true, b"o\xED\xA0\xBD\xF0\x9F\x92\xA9bar"); 29 test(true, b"oo\xED\xA0\xBD\xF0\x9F\x92\xA9bar"); 30 test(true, b"foo\xED\xA0\xBD\xF0\x9F\x92\xA9bar"); 31 32 test(false, b"\xED\xA0\xBDbar"); 33 test(false, b"\xED\xB2\xA9aar"); 34} 35 36#[test] 37fn test_empty_ends_with() { 38 #[track_caller] 39 fn test(result: bool, suffix: &str) { 40 assert_eq!( 41 result, 42 RawOsStr::from_str("").ends_with_os(RawOsStr::from_str(suffix)), 43 ); 44 } 45 46 test(true, ""); 47 test(false, "r"); 48 test(false, "ar"); 49} 50 51#[test] 52fn test_starts_with() { 53 #[track_caller] 54 fn test(result: bool, prefix: &[u8]) { 55 let prefix = RawOsStr::assert_from_raw_bytes(prefix); 56 assert_eq!(result, RAW_WTF8_STRING.starts_with_os(prefix)); 57 } 58 59 test(true, b""); 60 test(true, b"f"); 61 test(true, b"fo"); 62 test(true, b"foo"); 63 test(true, b"foo\xED\xA0\xBD"); 64 if cfg!(not(windows)) { 65 test(true, b"foo\xED\xA0\xBD\xF0"); 66 test(true, b"foo\xED\xA0\xBD\xF0\x9F"); 67 test(true, b"foo\xED\xA0\xBD\xF0\x9F\x92"); 68 } 69 test(cfg!(windows), b"foo\xED\xA0\xBD\xED\xA0\xBD"); 70 test(true, b"foo\xED\xA0\xBD\xF0\x9F\x92\xA9"); 71 test(true, b"foo\xED\xA0\xBD\xF0\x9F\x92\xA9b"); 72 test(true, b"foo\xED\xA0\xBD\xF0\x9F\x92\xA9ba"); 73 test(true, b"foo\xED\xA0\xBD\xF0\x9F\x92\xA9bar"); 74 75 test(false, b"foo\xED\xB2\xA9"); 76 test(false, b"fof\xED\xA0\xBD\xED\xA0\xBD"); 77} 78 79#[test] 80fn test_empty_starts_with() { 81 #[track_caller] 82 fn test(result: bool, prefix: &str) { 83 assert_eq!( 84 result, 85 RawOsStr::from_str("").starts_with_os(RawOsStr::from_str(prefix)), 86 ); 87 } 88 89 test(true, ""); 90 test(false, "f"); 91 test(false, "fo"); 92} 93 94#[should_panic = "cannot split using an empty pattern"] 95#[test] 96fn test_split_by_empty() { 97 let _ = RAW_WTF8_STRING.split(""); 98} 99 100#[should_panic = "cannot split using an empty pattern"] 101#[test] 102fn test_split_empty_by_empty() { 103 let _ = RawOsStr::from_str("").split(""); 104} 105