| use ucs2::{decode, decode_with, encode, ucs2_cstr, Error}; |
| |
| #[test] |
| fn encoding() { |
| let input = "őэ╋"; |
| let mut buffer = [0u16; 3]; |
| |
| assert_eq!(encode(input, &mut buffer), Ok(3)); |
| assert_eq!(buffer[..], [0x0151, 0x044D, 0x254B]); |
| |
| let mut buffer = [0u16; 2]; |
| assert_eq!(encode(input, &mut buffer), Err(Error::BufferOverflow)); |
| |
| let input = "😎"; |
| assert_eq!(encode(input, &mut buffer), Err(Error::MultiByte)); |
| } |
| |
| #[test] |
| fn decoding() { |
| let input = "$¢ह한"; |
| let mut u16_buffer = [0u16; 4]; |
| assert_eq!(encode(input, &mut u16_buffer), Ok(4)); |
| |
| let mut u8_buffer = [0u8; 9]; |
| assert_eq!(decode(&u16_buffer, &mut u8_buffer), Ok(9)); |
| assert_eq!(core::str::from_utf8(&u8_buffer[0..9]), Ok("$¢ह한")); |
| |
| // `decode` has three branches that can return `BufferOverflow`, |
| // check each of them. |
| assert_eq!( |
| decode(&u16_buffer, &mut u8_buffer[..0]), |
| Err(Error::BufferOverflow) |
| ); |
| assert_eq!( |
| decode(&u16_buffer, &mut u8_buffer[..1]), |
| Err(Error::BufferOverflow) |
| ); |
| assert_eq!( |
| decode(&u16_buffer, &mut u8_buffer[..3]), |
| Err(Error::BufferOverflow) |
| ); |
| } |
| |
| #[test] |
| fn decoding_with() { |
| let input = "$¢ह한"; |
| |
| let mut u16_buffer = [0u16; 4]; |
| let result = encode(input, &mut u16_buffer); |
| assert_eq!(result.unwrap(), 4); |
| |
| let mut u8_buffer = [0u8; 9]; |
| let mut pos = 0; |
| |
| let result = decode_with(&u16_buffer, |bytes| { |
| for byte in bytes.into_iter() { |
| u8_buffer[pos] = *byte; |
| pos += 1; |
| } |
| |
| Ok(()) |
| }); |
| |
| assert_eq!(result.unwrap(), 9); |
| assert_eq!(core::str::from_utf8(&u8_buffer[0..9]), Ok("$¢ह한")); |
| } |
| |
| #[test] |
| fn test_macro() { |
| const S1: [u16; 4] = ucs2_cstr!("abc"); |
| const S2: &[u16] = &ucs2_cstr!("$¢ह한"); |
| |
| assert_eq!(S1, [97, 98, 99, 0]); |
| assert_eq!(S2, [36, 162, 2361, 54620, 0]); |
| } |