| #[cfg(feature = "std")] |
| use std::str::FromStr; |
| |
| #[cfg(not(feature = "std"))] |
| use core::str::FromStr; |
| |
| use assert_matches::assert_matches; |
| |
| use crate::{MacAddr, MacAddr6, MacAddr8}; |
| |
| #[test] |
| fn test_parse_v6_upper_case_canonical_format() { |
| let addr = MacAddr6::from_str("12-34-56-78-9A-BC"); |
| |
| assert!(addr.is_ok()); |
| let addr = addr.unwrap(); |
| |
| assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC], addr.as_bytes()); |
| } |
| |
| #[test] |
| fn test_parse_v6_lower_case_canonical_format() { |
| let addr = MacAddr6::from_str("ab-cd-ef-ab-cd-ef"); |
| |
| assert!(addr.is_ok()); |
| let addr = addr.unwrap(); |
| |
| assert_eq!(&[0xAB, 0xCD, 0xEF, 0xAB, 0xCD, 0xEF], addr.as_bytes()); |
| } |
| |
| #[test] |
| fn test_parse_v6_mixed_case_canonical_format() { |
| let addr = MacAddr6::from_str("AB-cd-Ef-Ab-cD-EF"); |
| |
| assert!(addr.is_ok()); |
| let addr = addr.unwrap(); |
| |
| assert_eq!(&[0xAB, 0xCD, 0xEF, 0xAB, 0xCD, 0xEF], addr.as_bytes()); |
| } |
| |
| #[test] |
| fn test_parse_v6_colon_format() { |
| let addr = MacAddr6::from_str("12:34:56:78:9A:BC"); |
| |
| assert!(addr.is_ok()); |
| let addr = addr.unwrap(); |
| |
| assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC], addr.as_bytes()); |
| } |
| |
| #[test] |
| fn test_parse_v6_cisco_format() { |
| let addr = MacAddr6::from_str("1234.5678.9ABC"); |
| |
| assert!(addr.is_ok()); |
| let addr = addr.unwrap(); |
| |
| assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC], addr.as_bytes()); |
| } |
| |
| #[test] |
| fn test_parse_v8_canonical_format() { |
| let addr = MacAddr8::from_str("12-34-56-78-9A-BC-DE-F0"); |
| |
| assert!(addr.is_ok()); |
| let addr = addr.unwrap(); |
| |
| assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0], addr.as_bytes()); |
| } |
| |
| #[test] |
| fn test_parse_v8_colon_format() { |
| let addr = MacAddr8::from_str("12:34:56:78:9A:BC:DE:F0"); |
| |
| assert!(addr.is_ok()); |
| let addr = addr.unwrap(); |
| |
| assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0], addr.as_bytes()); |
| } |
| |
| #[test] |
| fn test_parse_canonical_format() { |
| let addr = MacAddr::from_str("12-34-56-78-9A-BC-DE-F0"); |
| |
| assert!(addr.is_ok()); |
| let addr = addr.unwrap(); |
| assert_matches!(addr, MacAddr::V8(..)); |
| assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0], addr.as_bytes()); |
| } |
| |
| #[test] |
| fn test_parse_colon_format() { |
| let addr = MacAddr::from_str("12:34:56:78:9A:BC:DE:F0"); |
| |
| assert!(addr.is_ok()); |
| let addr = addr.unwrap(); |
| assert_matches!(addr, MacAddr::V8(..)); |
| assert_eq!(&[0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0], addr.as_bytes()); |
| } |
| |
| #[test] |
| fn test_parse_v6_empty() { |
| let addr = MacAddr6::from_str(""); |
| |
| assert!(addr.is_err()); |
| } |
| |
| #[test] |
| fn test_parse_v8_empty() { |
| let addr = MacAddr8::from_str(""); |
| |
| assert!(addr.is_err()); |
| } |
| |
| #[test] |
| fn test_parse_empty() { |
| let addr = MacAddr::from_str(""); |
| |
| assert!(addr.is_err()); |
| } |
| |
| #[test] |
| fn test_parse_v6_partial_start() { |
| let addr = MacAddr6::from_str("b-cd-ef-12-34-56"); |
| |
| assert!(addr.is_err()); |
| } |
| |
| #[test] |
| fn test_parse_v8_partial_start() { |
| let addr = MacAddr8::from_str("b-cd-ef-12-34-56-78-9A"); |
| |
| assert!(addr.is_err()); |
| } |
| |
| #[test] |
| fn test_parse_v6_partial_end() { |
| let addr = MacAddr6::from_str("ab-cd-ef-12-34-5"); |
| |
| assert!(addr.is_err()); |
| } |
| |
| #[test] |
| fn test_parse_v8_partial_end() { |
| let addr = MacAddr8::from_str("ab-cd-ef-12-34-56-78-9"); |
| |
| assert!(addr.is_err()); |
| } |
| |
| #[test] |
| fn test_parse_v6_invalid_char() { |
| let addr = MacAddr6::from_str("ab-Qd-ef-12-34-56"); |
| |
| assert!(addr.is_err()); |
| } |
| |
| #[test] |
| fn test_parse_v8_invalid_char() { |
| let addr = MacAddr8::from_str("ab-Qd-ef-12-34-56-78-9A"); |
| |
| assert!(addr.is_err()); |
| } |
| |
| #[test] |
| fn test_parse_v6_different_delimiters() { |
| let addr = MacAddr6::from_str("ab-cd:ef-12-34-56"); |
| |
| assert!(addr.is_err()); |
| } |
| |
| #[test] |
| fn test_parse_v8_different_delimiters() { |
| let addr = MacAddr8::from_str("ab-cd-ef-12-34-56-78:9A"); |
| |
| assert!(addr.is_err()); |
| } |