1 use ucs2::{decode, decode_with, encode, ucs2_cstr, Error};
2
3 #[test]
encoding()4 fn encoding() {
5 let input = "őэ╋";
6 let mut buffer = [0u16; 3];
7
8 assert_eq!(encode(input, &mut buffer), Ok(3));
9 assert_eq!(buffer[..], [0x0151, 0x044D, 0x254B]);
10
11 let mut buffer = [0u16; 2];
12 assert_eq!(encode(input, &mut buffer), Err(Error::BufferOverflow));
13
14 let input = "";
15 assert_eq!(encode(input, &mut buffer), Err(Error::MultiByte));
16 }
17
18 #[test]
decoding()19 fn decoding() {
20 let input = "$¢ह한";
21 let mut u16_buffer = [0u16; 4];
22 assert_eq!(encode(input, &mut u16_buffer), Ok(4));
23
24 let mut u8_buffer = [0u8; 9];
25 assert_eq!(decode(&u16_buffer, &mut u8_buffer), Ok(9));
26 assert_eq!(core::str::from_utf8(&u8_buffer[0..9]), Ok("$¢ह한"));
27
28 // `decode` has three branches that can return `BufferOverflow`,
29 // check each of them.
30 assert_eq!(
31 decode(&u16_buffer, &mut u8_buffer[..0]),
32 Err(Error::BufferOverflow)
33 );
34 assert_eq!(
35 decode(&u16_buffer, &mut u8_buffer[..1]),
36 Err(Error::BufferOverflow)
37 );
38 assert_eq!(
39 decode(&u16_buffer, &mut u8_buffer[..3]),
40 Err(Error::BufferOverflow)
41 );
42 }
43
44 #[test]
decoding_with()45 fn decoding_with() {
46 let input = "$¢ह한";
47
48 let mut u16_buffer = [0u16; 4];
49 let result = encode(input, &mut u16_buffer);
50 assert_eq!(result.unwrap(), 4);
51
52 let mut u8_buffer = [0u8; 9];
53 let mut pos = 0;
54
55 let result = decode_with(&u16_buffer, |bytes| {
56 for byte in bytes.into_iter() {
57 u8_buffer[pos] = *byte;
58 pos += 1;
59 }
60
61 Ok(())
62 });
63
64 assert_eq!(result.unwrap(), 9);
65 assert_eq!(core::str::from_utf8(&u8_buffer[0..9]), Ok("$¢ह한"));
66 }
67
68 #[test]
test_macro()69 fn test_macro() {
70 const S1: [u16; 4] = ucs2_cstr!("abc");
71 const S2: &[u16] = &ucs2_cstr!("$¢ह한");
72
73 assert_eq!(S1, [97, 98, 99, 0]);
74 assert_eq!(S2, [36, 162, 2361, 54620, 0]);
75 }
76