use icu_pattern::{
DoublePlaceholderKey, DoublePlaceholderPattern, SinglePlaceholderKey, SinglePlaceholderPattern,
};
#[test]
fn test_single_extraction() {
let pattern = SinglePlaceholderPattern::try_from_str("a{0}b", Default::default()).unwrap();
let matches = pattern.extract_values("axyzb").unwrap();
assert_eq!(matches.get(SinglePlaceholderKey::Singleton), Some("xyz"));
assert!(pattern.extract_values("axyz").is_none());
assert!(pattern.extract_values("xyzb").is_none());
let pattern = SinglePlaceholderPattern::try_from_str("{0}", Default::default()).unwrap();
let matches = pattern.extract_values("hello").unwrap();
assert_eq!(matches.get(SinglePlaceholderKey::Singleton), Some("hello"));
let pattern = SinglePlaceholderPattern::try_from_str("literal", Default::default()).unwrap();
let matches = pattern.extract_values("literal").unwrap();
assert_eq!(matches.get(SinglePlaceholderKey::Singleton), None);
assert!(pattern.extract_values("other").is_none());
let pattern = SinglePlaceholderPattern::try_from_str("", Default::default()).unwrap();
let matches = pattern.extract_values("").unwrap();
assert_eq!(matches.get(SinglePlaceholderKey::Singleton), None);
assert!(pattern.extract_values("non-empty").is_none());
let pattern = SinglePlaceholderPattern::try_from_str("{0}", Default::default()).unwrap();
let matches = pattern.extract_values("").unwrap();
assert_eq!(matches.get(SinglePlaceholderKey::Singleton), Some(""));
let pattern = SinglePlaceholderPattern::try_from_str("a{0}", Default::default()).unwrap();
let matches = pattern.extract_values("a").unwrap();
assert_eq!(matches.get(SinglePlaceholderKey::Singleton), Some(""));
let pattern = SinglePlaceholderPattern::try_from_str("{0}b", Default::default()).unwrap();
let matches = pattern.extract_values("b").unwrap();
assert_eq!(matches.get(SinglePlaceholderKey::Singleton), Some(""));
}
#[test]
fn test_double_extraction() {
let pattern = DoublePlaceholderPattern::try_from_str("a{0}b{1}c", Default::default()).unwrap();
let matches = pattern.extract_values("axxbyyc").unwrap();
assert_eq!(matches.get(DoublePlaceholderKey::Place0), Some("xx"));
assert_eq!(matches.get(DoublePlaceholderKey::Place1), Some("yy"));
let pattern = DoublePlaceholderPattern::try_from_str("a{0}b{1}b", Default::default()).unwrap();
let matches = pattern.extract_values("axbybb").unwrap();
assert_eq!(matches.get(DoublePlaceholderKey::Place0), Some("x"));
assert_eq!(matches.get(DoublePlaceholderKey::Place1), Some("yb"));
let pattern = DoublePlaceholderPattern::try_from_str("a{1}b{0}c", Default::default()).unwrap();
let matches = pattern.extract_values("axxbyyc").unwrap();
assert_eq!(matches.get(DoublePlaceholderKey::Place0), Some("yy"));
assert_eq!(matches.get(DoublePlaceholderKey::Place1), Some("xx"));
let pattern = DoublePlaceholderPattern::try_from_str("a{0}{1}", Default::default()).unwrap();
let matches = pattern.extract_values("axyz").unwrap();
assert_eq!(matches.get(DoublePlaceholderKey::Place0), Some(""));
assert_eq!(matches.get(DoublePlaceholderKey::Place1), Some("xyz"));
let pattern = DoublePlaceholderPattern::try_from_str("{0}{1}b", Default::default()).unwrap();
let matches = pattern.extract_values("axyzb").unwrap();
assert_eq!(matches.get(DoublePlaceholderKey::Place0), Some(""));
assert_eq!(matches.get(DoublePlaceholderKey::Place1), Some("axyz"));
let pattern = DoublePlaceholderPattern::try_from_str("literal", Default::default()).unwrap();
let matches = pattern.extract_values("literal").unwrap();
assert_eq!(matches.get(DoublePlaceholderKey::Place0), None);
assert_eq!(matches.get(DoublePlaceholderKey::Place1), None);
assert!(pattern.extract_values("other").is_none());
let pattern = DoublePlaceholderPattern::try_from_str("a{0}b", Default::default()).unwrap();
let matches = pattern.extract_values("axyzb").unwrap();
assert_eq!(matches.get(DoublePlaceholderKey::Place0), Some("xyz"));
assert_eq!(matches.get(DoublePlaceholderKey::Place1), None);
let pattern = DoublePlaceholderPattern::try_from_str("{1}b", Default::default()).unwrap();
let matches = pattern.extract_values("xyzb").unwrap();
assert_eq!(matches.get(DoublePlaceholderKey::Place0), None);
assert_eq!(matches.get(DoublePlaceholderKey::Place1), Some("xyz"));
let pattern = DoublePlaceholderPattern::try_from_str("{0}b{1}c", Default::default()).unwrap();
let matches = pattern.extract_values("xbybczc").unwrap();
assert_eq!(matches.get(DoublePlaceholderKey::Place0), Some("x"));
assert_eq!(matches.get(DoublePlaceholderKey::Place1), Some("ybcz"));
}