unit.rs 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. use unicode_normalization::char::is_combining_mark;
  2. fn _to_ascii(domain: &str) -> Result<String, idna::Errors> {
  3. idna::Config::default()
  4. .verify_dns_length(true)
  5. .use_std3_ascii_rules(true)
  6. .to_ascii(domain)
  7. }
  8. #[test]
  9. fn test_v5() {
  10. // IdnaTest:784 蔏。𑰺
  11. assert!(is_combining_mark('\u{11C3A}'));
  12. assert!(_to_ascii("\u{11C3A}").is_err());
  13. assert!(_to_ascii("\u{850f}.\u{11C3A}").is_err());
  14. assert!(_to_ascii("\u{850f}\u{ff61}\u{11C3A}").is_err());
  15. }
  16. #[test]
  17. fn test_v8_bidi_rules() {
  18. assert_eq!(_to_ascii("abc").unwrap(), "abc");
  19. assert_eq!(_to_ascii("123").unwrap(), "123");
  20. assert_eq!(_to_ascii("אבּג").unwrap(), "xn--kdb3bdf");
  21. assert_eq!(_to_ascii("ابج").unwrap(), "xn--mgbcm");
  22. assert_eq!(_to_ascii("abc.ابج").unwrap(), "abc.xn--mgbcm");
  23. assert_eq!(_to_ascii("אבּג.ابج").unwrap(), "xn--kdb3bdf.xn--mgbcm");
  24. // Bidi domain names cannot start with digits
  25. assert!(_to_ascii("0a.\u{05D0}").is_err());
  26. assert!(_to_ascii("0à.\u{05D0}").is_err());
  27. // Bidi chars may be punycode-encoded
  28. assert!(_to_ascii("xn--0ca24w").is_err());
  29. }