Skip to content

Commit f95fd61

Browse files
committed
der_derive: test skipped fields
1 parent a9ef860 commit f95fd61

File tree

1 file changed

+53
-3
lines changed

1 file changed

+53
-3
lines changed

der/derive/src/sequence/field.rs

+53-3
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ mod tests {
252252
use crate::{FieldAttrs, TagMode, TagNumber};
253253
use proc_macro2::Span;
254254
use quote::quote;
255-
use syn::{punctuated::Punctuated, Ident, Path, PathSegment, Type, TypePath};
255+
use syn::{punctuated::Punctuated, Ident, Path, PathArguments, PathSegment, Type, TypePath};
256256

257257
/// Create a [`Type::Path`].
258258
pub fn type_path(ident: Ident) -> Type {
@@ -284,6 +284,7 @@ mod tests {
284284
optional: false,
285285
tag_mode: TagMode::Explicit,
286286
constructed: false,
287+
skipped: None,
287288
};
288289

289290
let field_type = Ident::new("String", span);
@@ -303,7 +304,7 @@ mod tests {
303304
);
304305

305306
assert_eq!(
306-
field.to_encode_tokens().to_string(),
307+
field.to_encode_tokens().unwrap().to_string(),
307308
quote! {
308309
self.example_field
309310
}
@@ -324,6 +325,7 @@ mod tests {
324325
optional: false,
325326
tag_mode: TagMode::Implicit,
326327
constructed: false,
328+
skipped: None,
327329
};
328330

329331
let field_type = Ident::new("String", span);
@@ -354,7 +356,7 @@ mod tests {
354356
);
355357

356358
assert_eq!(
357-
field.to_encode_tokens().to_string(),
359+
field.to_encode_tokens().unwrap().to_string(),
358360
quote! {
359361
::der::asn1::ContextSpecificRef {
360362
tag_number: ::der::TagNumber::N0,
@@ -365,4 +367,52 @@ mod tests {
365367
.to_string()
366368
);
367369
}
370+
371+
#[test]
372+
fn skipped() {
373+
let span = Span::call_site();
374+
let ident = Ident::new("skipped", span);
375+
376+
let mut segments = Punctuated::new();
377+
segments.push(PathSegment {
378+
ident: Ident::new("Default", span),
379+
arguments: PathArguments::None,
380+
});
381+
segments.push(PathSegment {
382+
ident: Ident::new("default", span),
383+
arguments: PathArguments::None,
384+
});
385+
386+
let attrs = FieldAttrs {
387+
asn1_type: None,
388+
context_specific: Some(TagNumber(0)),
389+
default: None,
390+
extensible: false,
391+
optional: false,
392+
tag_mode: TagMode::Implicit,
393+
constructed: false,
394+
skipped: Some(Path {
395+
leading_colon: None,
396+
segments,
397+
}),
398+
};
399+
400+
let field_type = Ident::new("String", span);
401+
402+
let field = SequenceField {
403+
ident,
404+
attrs,
405+
field_type: type_path(field_type),
406+
};
407+
408+
assert_eq!(
409+
field.to_decode_tokens().to_string(),
410+
quote! {
411+
let skipped = Default::default();
412+
}
413+
.to_string()
414+
);
415+
416+
assert!(field.to_encode_tokens().is_none());
417+
}
368418
}

0 commit comments

Comments
 (0)