unit.rs 1.3 KB

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