Skip to content

Commit 6609526

Browse files
committed
fix(der_derive): tests with new implicit/explicit
1 parent a442ead commit 6609526

File tree

3 files changed

+20
-42
lines changed

3 files changed

+20
-42
lines changed

der/src/asn1/any_custom_class.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,6 @@ where
147147
fn decode<R: Reader<'a>>(reader: &mut R) -> Result<Self, Self::Error> {
148148
let header = Header::decode(reader)?;
149149

150-
// TODO(dishmaker): x509-cert tests fail due to read_nested:
151-
// let value = T::decode_value(reader, header)?;
152-
153150
let value = reader.read_nested(header.length, |reader| T::decode_value(reader, header))?;
154151

155152
if header.tag.is_constructed() != value.tag().is_constructed() {

der_derive/src/choice/variant.rs

Lines changed: 16 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -262,23 +262,23 @@ mod tests {
262262

263263
#[test]
264264
fn explicit() {
265-
for tag_number in [0, 1, 2, 3] {
265+
for tag_number_u16 in [0, 1, 2, 3] {
266266
for constructed in [false, true] {
267267
let ident = Ident::new("ExplicitVariant", Span::call_site());
268268
let attrs = FieldAttrs {
269269
constructed,
270-
class: Some(ClassNum::ContextSpecific(TagNumber(tag_number))),
270+
class: Some(ClassNum::ContextSpecific(TagNumber(tag_number_u16))),
271271
..Default::default()
272272
};
273273
assert_eq!(attrs.tag_mode, TagMode::Explicit);
274274

275275
let tag = TagOrPath::Tag(Tag::ContextSpecific {
276276
constructed,
277-
number: TagNumber(tag_number),
277+
number: TagNumber(tag_number_u16),
278278
});
279279

280280
let variant = ChoiceVariant { ident, attrs, tag };
281-
let tag_number = TagNumber(tag_number).to_tokens();
281+
let tag_number = TagNumber(tag_number_u16).to_tokens();
282282

283283
assert_eq!(
284284
variant.to_decode_tokens().to_string(),
@@ -287,12 +287,9 @@ mod tests {
287287
constructed: #constructed,
288288
number: #tag_number,
289289
} => Ok(Self::ExplicitVariant(
290-
match ::der::asn1::ContextSpecific::<>::decode(reader)? {
291-
field if field.tag_number == #tag_number => Some(field),
292-
_ => None
293-
}
290+
::der::asn1::ContextSpecificExplicit::<#tag_number_u16, _>::decode_skipping(reader)?
294291
.ok_or_else(|| {
295-
der::Tag::ContextSpecific {
292+
::der::Tag::ContextSpecific {
296293
number: #tag_number,
297294
constructed: #constructed
298295
}
@@ -307,9 +304,7 @@ mod tests {
307304
assert_eq!(
308305
variant.to_encode_value_tokens().to_string(),
309306
quote! {
310-
Self::ExplicitVariant(variant) => ::der::asn1::ContextSpecificRef {
311-
tag_number: #tag_number,
312-
tag_mode: ::der::TagMode::Explicit,
307+
Self::ExplicitVariant(variant) => ::der::asn1::ContextSpecificExplicitRef::<'_, #tag_number_u16, _> {
313308
value: variant,
314309
}
315310
.encode_value(encoder),
@@ -320,9 +315,7 @@ mod tests {
320315
assert_eq!(
321316
variant.to_value_len_tokens().to_string(),
322317
quote! {
323-
Self::ExplicitVariant(variant) => ::der::asn1::ContextSpecificRef {
324-
tag_number: #tag_number,
325-
tag_mode: ::der::TagMode::Explicit,
318+
Self::ExplicitVariant(variant) => ::der::asn1::ContextSpecificExplicitRef::<'_, #tag_number_u16, _> {
326319
value: variant,
327320
}
328321
.value_len(),
@@ -346,24 +339,24 @@ mod tests {
346339

347340
#[test]
348341
fn implicit() {
349-
for tag_number in [0, 1, 2, 3] {
342+
for tag_number_u16 in [0, 1, 2, 3] {
350343
for constructed in [false, true] {
351344
let ident = Ident::new("ImplicitVariant", Span::call_site());
352345

353346
let attrs = FieldAttrs {
354347
constructed,
355-
class: Some(ClassNum::ContextSpecific(TagNumber(tag_number))),
348+
class: Some(ClassNum::ContextSpecific(TagNumber(tag_number_u16))),
356349
tag_mode: TagMode::Implicit,
357350
..Default::default()
358351
};
359352

360353
let tag = TagOrPath::Tag(Tag::ContextSpecific {
361354
constructed,
362-
number: TagNumber(tag_number),
355+
number: TagNumber(tag_number_u16),
363356
});
364357

365358
let variant = ChoiceVariant { ident, attrs, tag };
366-
let tag_number = TagNumber(tag_number).to_tokens();
359+
let tag_number = TagNumber(tag_number_u16).to_tokens();
367360

368361
assert_eq!(
369362
variant.to_decode_tokens().to_string(),
@@ -372,12 +365,9 @@ mod tests {
372365
constructed: #constructed,
373366
number: #tag_number,
374367
} => Ok(Self::ImplicitVariant(
375-
::der::asn1::ContextSpecific::<>::decode_implicit(
376-
reader,
377-
#tag_number
378-
)?
368+
::der::asn1::ContextSpecificImplicit::<#tag_number_u16, _>::decode_skipping(reader)?
379369
.ok_or_else(|| {
380-
der::Tag::ContextSpecific {
370+
::der::Tag::ContextSpecific {
381371
number: #tag_number,
382372
constructed: #constructed
383373
}
@@ -392,9 +382,7 @@ mod tests {
392382
assert_eq!(
393383
variant.to_encode_value_tokens().to_string(),
394384
quote! {
395-
Self::ImplicitVariant(variant) => ::der::asn1::ContextSpecificRef {
396-
tag_number: #tag_number,
397-
tag_mode: ::der::TagMode::Implicit,
385+
Self::ImplicitVariant(variant) => ::der::asn1::ContextSpecificImplicitRef::<'_, #tag_number_u16, _> {
398386
value: variant,
399387
}
400388
.encode_value(encoder),
@@ -405,9 +393,7 @@ mod tests {
405393
assert_eq!(
406394
variant.to_value_len_tokens().to_string(),
407395
quote! {
408-
Self::ImplicitVariant(variant) => ::der::asn1::ContextSpecificRef {
409-
tag_number: #tag_number,
410-
tag_mode: ::der::TagMode::Implicit,
396+
Self::ImplicitVariant(variant) => ::der::asn1::ContextSpecificImplicitRef::<'_, #tag_number_u16, _> {
411397
value: variant,
412398
}
413399
.value_len(),

der_derive/src/sequence/field.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -322,13 +322,10 @@ mod tests {
322322
assert_eq!(
323323
field.to_decode_tokens().to_string(),
324324
quote! {
325-
let implicit_field = ::der::asn1::ContextSpecific::<>::decode_implicit(
326-
reader,
327-
::der::TagNumber(0)
328-
)?
325+
let implicit_field = ::der::asn1::ContextSpecificImplicit::<0u16, _>::decode_skipping(reader)?
329326
.ok_or_else(|| {
330-
der::Tag::ContextSpecific {
331-
number: ::der::TagNumber(0),
327+
::der::Tag::ContextSpecific {
328+
number: ::der::TagNumber(0u16),
332329
constructed: false
333330
}
334331
.value_error()
@@ -341,9 +338,7 @@ mod tests {
341338
assert_eq!(
342339
field.to_encode_tokens().to_string(),
343340
quote! {
344-
::der::asn1::ContextSpecificRef {
345-
tag_number: ::der::TagNumber(0),
346-
tag_mode: ::der::TagMode::Implicit,
341+
::der::asn1::ContextSpecificImplicitRef::<'_, 0u16, _> {
347342
value: &self.implicit_field,
348343
}
349344
}

0 commit comments

Comments
 (0)