summaryrefslogtreecommitdiffstats
path: root/third_party/rust/regex/tests/api_str.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/regex/tests/api_str.rs')
-rw-r--r--third_party/rust/regex/tests/api_str.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/third_party/rust/regex/tests/api_str.rs b/third_party/rust/regex/tests/api_str.rs
new file mode 100644
index 0000000000..480116da73
--- /dev/null
+++ b/third_party/rust/regex/tests/api_str.rs
@@ -0,0 +1,34 @@
+// These tests don't really make sense with the bytes API, so we only test them
+// on the Unicode API.
+
+#[test]
+fn empty_match_unicode_find_iter() {
+ // Tests that we still yield byte ranges at valid UTF-8 sequence boundaries
+ // even when we're susceptible to empty width matches.
+ let re = regex!(r".*?");
+ assert_eq!(
+ vec![(0, 0), (3, 3), (4, 4), (7, 7), (8, 8)],
+ findall!(re, "Ⅰ1Ⅱ2")
+ );
+}
+
+#[test]
+fn empty_match_unicode_captures_iter() {
+ // Same as empty_match_unicode_find_iter, but tests capture iteration.
+ let re = regex!(r".*?");
+ let ms: Vec<_> = re
+ .captures_iter(text!("Ⅰ1Ⅱ2"))
+ .map(|c| c.get(0).unwrap())
+ .map(|m| (m.start(), m.end()))
+ .collect();
+ assert_eq!(vec![(0, 0), (3, 3), (4, 4), (7, 7), (8, 8)], ms);
+}
+
+#[test]
+fn match_as_str() {
+ let re = regex!(r"fo+");
+ let caps = re.captures("barfoobar").unwrap();
+ assert_eq!(caps.get(0).map(|m| m.as_str()), Some("foo"));
+ assert_eq!(caps.get(0).map(From::from), Some("foo"));
+ assert_eq!(caps.get(0).map(Into::into), Some("foo"));
+}