@@ -1234,7 +1234,7 @@ impl core::fmt::Display for Offer {
12341234
12351235#[ cfg( test) ]
12361236mod tests {
1237- use super :: { Amount , ExperimentalOfferTlvStreamRef , OFFER_TYPES , Offer , OfferTlvStreamRef , Quantity } ;
1237+ use super :: { Amount , EXPERIMENTAL_OFFER_TYPES , ExperimentalOfferTlvStreamRef , OFFER_TYPES , Offer , OfferTlvStreamRef , Quantity } ;
12381238 #[ cfg( not( c_bindings) ) ]
12391239 use {
12401240 super :: OfferBuilder ,
@@ -1961,6 +1961,34 @@ mod tests {
19611961 }
19621962 }
19631963
1964+ #[ test]
1965+ fn parses_offer_with_experimental_tlv_records ( ) {
1966+ let offer = OfferBuilder :: new ( pubkey ( 42 ) ) . build ( ) . unwrap ( ) ;
1967+
1968+ let mut encoded_offer = Vec :: new ( ) ;
1969+ offer. write ( & mut encoded_offer) . unwrap ( ) ;
1970+ BigSize ( EXPERIMENTAL_OFFER_TYPES . start + 1 ) . write ( & mut encoded_offer) . unwrap ( ) ;
1971+ BigSize ( 32 ) . write ( & mut encoded_offer) . unwrap ( ) ;
1972+ [ 42u8 ; 32 ] . write ( & mut encoded_offer) . unwrap ( ) ;
1973+
1974+ if let Err ( e) = Offer :: try_from ( encoded_offer) {
1975+ panic ! ( "error parsing offer: {:?}" , e) ;
1976+ }
1977+
1978+ let offer = OfferBuilder :: new ( pubkey ( 42 ) ) . build ( ) . unwrap ( ) ;
1979+
1980+ let mut encoded_offer = Vec :: new ( ) ;
1981+ offer. write ( & mut encoded_offer) . unwrap ( ) ;
1982+ BigSize ( EXPERIMENTAL_OFFER_TYPES . start ) . write ( & mut encoded_offer) . unwrap ( ) ;
1983+ BigSize ( 32 ) . write ( & mut encoded_offer) . unwrap ( ) ;
1984+ [ 42u8 ; 32 ] . write ( & mut encoded_offer) . unwrap ( ) ;
1985+
1986+ match Offer :: try_from ( encoded_offer) {
1987+ Ok ( _) => panic ! ( "expected error" ) ,
1988+ Err ( e) => assert_eq ! ( e, Bolt12ParseError :: Decode ( DecodeError :: UnknownRequiredFeature ) ) ,
1989+ }
1990+ }
1991+
19641992 #[ test]
19651993 fn fails_parsing_offer_with_out_of_range_tlv_records ( ) {
19661994 let offer = OfferBuilder :: new ( pubkey ( 42 ) ) . build ( ) . unwrap ( ) ;
@@ -1975,6 +2003,19 @@ mod tests {
19752003 Ok ( _) => panic ! ( "expected error" ) ,
19762004 Err ( e) => assert_eq ! ( e, Bolt12ParseError :: Decode ( DecodeError :: InvalidValue ) ) ,
19772005 }
2006+
2007+ let offer = OfferBuilder :: new ( pubkey ( 42 ) ) . build ( ) . unwrap ( ) ;
2008+
2009+ let mut encoded_offer = Vec :: new ( ) ;
2010+ offer. write ( & mut encoded_offer) . unwrap ( ) ;
2011+ BigSize ( EXPERIMENTAL_OFFER_TYPES . end ) . write ( & mut encoded_offer) . unwrap ( ) ;
2012+ BigSize ( 32 ) . write ( & mut encoded_offer) . unwrap ( ) ;
2013+ [ 42u8 ; 32 ] . write ( & mut encoded_offer) . unwrap ( ) ;
2014+
2015+ match Offer :: try_from ( encoded_offer) {
2016+ Ok ( _) => panic ! ( "expected error" ) ,
2017+ Err ( e) => assert_eq ! ( e, Bolt12ParseError :: Decode ( DecodeError :: InvalidValue ) ) ,
2018+ }
19782019 }
19792020}
19802021
0 commit comments