Skip to content

Commit 5ae7315

Browse files
committed
Add tests for skip attributes
1 parent 4d39049 commit 5ae7315

1 file changed

Lines changed: 115 additions & 0 deletions

File tree

bin-proto/tests/skip.rs

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
#![cfg(all(feature = "derive", feature = "alloc"))]
2+
3+
use bin_proto::{BitCodec, BitDecode, BitEncode, Error};
4+
use bitstream_io::BigEndian;
5+
6+
#[derive(Debug, BitDecode, BitEncode, PartialEq, Eq)]
7+
struct SkipEncode {
8+
#[codec(skip_encode)]
9+
a: u8,
10+
b: u8,
11+
}
12+
13+
#[derive(Debug, BitDecode, BitEncode, PartialEq, Eq)]
14+
struct SkipDecode {
15+
#[codec(skip_decode)]
16+
a: u8,
17+
b: u8,
18+
}
19+
20+
#[derive(Debug, BitDecode, BitEncode, PartialEq, Eq)]
21+
struct Skip {
22+
#[codec(skip)]
23+
a: u8,
24+
b: u8,
25+
}
26+
27+
#[derive(Debug, BitDecode, BitEncode, PartialEq, Eq)]
28+
#[codec(discriminant_type = u8)]
29+
enum SkipEncodeEnum {
30+
#[codec(discriminant = 1)]
31+
A,
32+
#[codec(discriminant = 2)]
33+
#[codec(skip_encode)]
34+
B,
35+
}
36+
37+
#[derive(Debug, BitDecode, BitEncode, PartialEq, Eq)]
38+
#[codec(discriminant_type = u8)]
39+
enum SkipDecodeEnum {
40+
#[codec(discriminant = 1)]
41+
A,
42+
#[codec(discriminant = 2)]
43+
#[codec(skip_decode)]
44+
#[allow(unused)]
45+
B,
46+
}
47+
48+
#[derive(Debug, BitDecode, BitEncode, PartialEq, Eq)]
49+
#[codec(discriminant_type = u8)]
50+
enum SkipEnum {
51+
#[codec(discriminant = 1)]
52+
A,
53+
#[codec(discriminant = 2)]
54+
#[codec(skip)]
55+
B,
56+
}
57+
58+
#[test]
59+
fn skip_encode_struct() {
60+
let s = SkipEncode { a: 10, b: 20 };
61+
let bytes = s.encode_bytes(BigEndian).unwrap();
62+
assert_eq!(bytes, vec![20]);
63+
64+
assert!(SkipEncode::decode_bytes(&bytes, BigEndian).is_err());
65+
}
66+
67+
#[test]
68+
fn skip_decode_struct() {
69+
let s = SkipDecode { a: 10, b: 20 };
70+
let bytes = s.encode_bytes(BigEndian).unwrap();
71+
assert_eq!(bytes, vec![10, 20]);
72+
73+
let (decoded, len) = SkipDecode::decode_bytes(&bytes, BigEndian).unwrap();
74+
75+
assert_eq!(decoded, SkipDecode { a: 0, b: 10 });
76+
assert_eq!(len, 8);
77+
}
78+
79+
#[test]
80+
fn skip_struct() {
81+
let s = Skip { a: 10, b: 20 };
82+
let bytes = s.encode_bytes(BigEndian).unwrap();
83+
assert_eq!(bytes, vec![20]);
84+
85+
let (decoded, len) = Skip::decode_bytes(&bytes, BigEndian).unwrap();
86+
87+
assert_eq!(decoded, Skip { a: 0, b: 20 });
88+
assert_eq!(len, 8);
89+
}
90+
91+
#[test]
92+
fn skip_encode_enum() {
93+
let a = SkipEncodeEnum::A;
94+
assert_eq!(a.encode_bytes(BigEndian).unwrap(), vec![1]);
95+
96+
let b = SkipEncodeEnum::B;
97+
assert!(b.encode_bytes(BigEndian).is_err());
98+
}
99+
100+
#[test]
101+
fn skip_decode_enum() {
102+
let (decoded, _) = SkipDecodeEnum::decode_bytes(&[1], BigEndian).unwrap();
103+
assert_eq!(decoded, SkipDecodeEnum::A);
104+
105+
let result = SkipDecodeEnum::decode_bytes(&[2], BigEndian);
106+
assert!(matches!(result, Err(Error::Discriminant)));
107+
}
108+
109+
#[test]
110+
fn skip_enum() {
111+
assert!(SkipEnum::B.encode_bytes(BigEndian).is_err());
112+
113+
let result = SkipEnum::decode_bytes(&[2], BigEndian);
114+
assert!(matches!(result, Err(Error::Discriminant)));
115+
}

0 commit comments

Comments
 (0)