1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
use glib::{CollationKey, FilenameCollationKey};
fn init() {
use std::sync::Once;
static ONCE: Once = Once::new();
// Make sure that all tests below are running with the system
// locale and not the "C" locale.
ONCE.call_once(|| unsafe {
libc::setlocale(libc::LC_ALL, b"\0".as_ptr() as *const _);
});
}
#[test]
fn collate() {
init();
let mut unsorted = vec![
String::from("bcd"),
String::from("cde"),
String::from("abc"),
];
let sorted = vec![
String::from("abc"),
String::from("bcd"),
String::from("cde"),
];
unsorted.sort_by(|s1, s2| CollationKey::from(&s1).cmp(&CollationKey::from(&s2)));
assert_eq!(unsorted, sorted);
}
#[test]
fn collate_non_ascii() {
init();
let mut unsorted = vec![
String::from("猫の手も借りたい"),
String::from("日本語は難しい"),
String::from("ありがとう"),
];
let sorted = vec![
String::from("ありがとう"),
String::from("日本語は難しい"),
String::from("猫の手も借りたい"),
];
unsorted.sort_by(|s1, s2| CollationKey::from(&s1).cmp(&CollationKey::from(&s2)));
assert_eq!(unsorted, sorted);
}
#[test]
fn collate_filenames() {
init();
let mut unsorted = vec![
String::from("bcd.a"),
String::from("cde.b"),
String::from("abc.c"),
];
let sorted = vec![
String::from("abc.c"),
String::from("bcd.a"),
String::from("cde.b"),
];
unsorted
.sort_by(|s1, s2| FilenameCollationKey::from(&s1).cmp(&FilenameCollationKey::from(&s2)));
assert_eq!(unsorted, sorted);
}
#[test]
fn collate_filenames_non_ascii() {
init();
let mut unsorted = vec![
String::from("猫の手も借りたい.foo"),
String::from("日本語は難しい.bar"),
String::from("ありがとう.baz"),
];
let sorted = vec![
String::from("ありがとう.baz"),
String::from("日本語は難しい.bar"),
String::from("猫の手も借りたい.foo"),
];
unsorted
.sort_by(|s1, s2| FilenameCollationKey::from(&s1).cmp(&FilenameCollationKey::from(&s2)));
assert_eq!(unsorted, sorted);
}
|