|
1 | 1 | #![feature(associated_type_bounds, pattern)] |
2 | 2 |
|
3 | | -use core::pattern::{Pattern, Searcher, ReverseSearcher}; |
| 3 | +use core::pattern::{Pattern, Searcher, ReverseSearcher, predicate}; |
4 | 4 | use std::borrow::Cow; |
5 | 5 | use std::ffi::{OsStr, OsString}; |
6 | 6 |
|
@@ -111,6 +111,23 @@ fn do_test_short_flag(valid: bool) { |
111 | 111 | assert_eq!(Some(&*os("shórt")), arg.strip_prefix('-')); |
112 | 112 | assert_eq!(Some(&*os("shórt")), arg.strip_prefix("-")); |
113 | 113 | assert_eq!(None, arg.strip_prefix("--")); |
| 114 | + |
| 115 | + // A bit awkward but closure can be used to test short options character |
| 116 | + // by character. |
| 117 | + let mut switch = '\0'; |
| 118 | + let mut check_switch = |chr| { |
| 119 | + switch = chr; |
| 120 | + chr == 's' || chr == 'h' |
| 121 | + }; |
| 122 | + assert_eq!( |
| 123 | + Some(&*os("hórt")), |
| 124 | + os("shórt").strip_prefix(predicate(&mut check_switch)) |
| 125 | + ); |
| 126 | + assert_eq!( |
| 127 | + Some(&*os("órt")), |
| 128 | + os("hórt").strip_prefix(predicate(&mut check_switch)) |
| 129 | + ); |
| 130 | + assert_eq!(None, os("órt").strip_prefix(predicate(&mut check_switch))); |
114 | 131 | } |
115 | 132 |
|
116 | 133 | #[test] |
@@ -157,15 +174,21 @@ fn test_le() { |
157 | 174 | #[test] |
158 | 175 | fn test_find() { |
159 | 176 | assert_eq!(find("hello", 'l'), Some(2)); |
| 177 | + assert_eq!(find("hello", predicate(|c: char| c == 'o')), Some(4)); |
160 | 178 | assert!(find("hello", 'x').is_none()); |
| 179 | + assert!(find("hello", predicate(|c: char| c == 'x')).is_none()); |
161 | 180 | assert_eq!(find("ประเทศไทย中华Việt Nam", '华'), Some(30)); |
| 181 | + assert_eq!(find("ประเทศไทย中华Việt Nam", predicate(|c: char| c == '华')), Some(30)); |
162 | 182 | } |
163 | 183 |
|
164 | 184 | #[test] |
165 | 185 | fn test_rfind() { |
166 | 186 | assert_eq!(rfind("hello", 'l'), Some(3)); |
| 187 | + assert_eq!(rfind("hello", predicate(|c: char| c == 'o')), Some(4)); |
167 | 188 | assert!(rfind("hello", 'x').is_none()); |
| 189 | + assert!(rfind("hello", predicate(|c: char| c == 'x')).is_none()); |
168 | 190 | assert_eq!(rfind("ประเทศไทย中华Việt Nam", '华'), Some(30)); |
| 191 | + assert_eq!(rfind("ประเทศไทย中华Việt Nam", predicate(|c: char| c == '华')), Some(30)); |
169 | 192 | } |
170 | 193 |
|
171 | 194 | /* |
@@ -1832,13 +1855,27 @@ fn test_split_char_iterator() { |
1832 | 1855 | rsplit.reverse(); |
1833 | 1856 | assert_eq!(rsplit, ["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]); |
1834 | 1857 |
|
| 1858 | + let split: Vec<&OsStr> = os(data).split(predicate(|c: char| c == ' ')).collect(); |
| 1859 | + assert_eq!(split, ["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]); |
| 1860 | + |
| 1861 | + let mut rsplit: Vec<&OsStr> = os(data).split(predicate(|c: char| c == ' ')).rev().collect(); |
| 1862 | + rsplit.reverse(); |
| 1863 | + assert_eq!(rsplit, ["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]); |
| 1864 | + |
1835 | 1865 | // Unicode |
1836 | 1866 | let split: Vec<&OsStr> = os(data).split('ä').collect(); |
1837 | 1867 | assert_eq!(split, ["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]); |
1838 | 1868 |
|
1839 | 1869 | let mut rsplit: Vec<&OsStr> = os(data).split('ä').rev().collect(); |
1840 | 1870 | rsplit.reverse(); |
1841 | 1871 | assert_eq!(rsplit, ["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]); |
| 1872 | + |
| 1873 | + let split: Vec<&OsStr> = os(data).split(predicate(|c: char| c == 'ä')).collect(); |
| 1874 | + assert_eq!(split, ["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]); |
| 1875 | + |
| 1876 | + let mut rsplit: Vec<&OsStr> = os(data).split(predicate(|c: char| c == 'ä')).rev().collect(); |
| 1877 | + rsplit.reverse(); |
| 1878 | + assert_eq!(rsplit, ["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]); |
1842 | 1879 | } |
1843 | 1880 |
|
1844 | 1881 | #[test] |
|
0 commit comments