@@ -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 ,
@@ -1962,6 +1962,35 @@ mod tests {
19621962 }
19631963 }
19641964
1965+ #[ test]
1966+ fn parses_offer_with_experimental_tlv_records ( ) {
1967+ let offer = OfferBuilder :: new ( pubkey ( 42 ) ) . build ( ) . unwrap ( ) ;
1968+
1969+ let mut encoded_offer = Vec :: new ( ) ;
1970+ offer. write ( & mut encoded_offer) . unwrap ( ) ;
1971+ BigSize ( EXPERIMENTAL_OFFER_TYPES . start + 1 ) . write ( & mut encoded_offer) . unwrap ( ) ;
1972+ BigSize ( 32 ) . write ( & mut encoded_offer) . unwrap ( ) ;
1973+ [ 42u8 ; 32 ] . write ( & mut encoded_offer) . unwrap ( ) ;
1974+
1975+ match Offer :: try_from ( encoded_offer. clone ( ) ) {
1976+ Ok ( offer) => assert_eq ! ( offer. bytes, encoded_offer) ,
1977+ Err ( e) => panic ! ( "error parsing offer: {:?}" , e) ,
1978+ }
1979+
1980+ let offer = OfferBuilder :: new ( pubkey ( 42 ) ) . build ( ) . unwrap ( ) ;
1981+
1982+ let mut encoded_offer = Vec :: new ( ) ;
1983+ offer. write ( & mut encoded_offer) . unwrap ( ) ;
1984+ BigSize ( EXPERIMENTAL_OFFER_TYPES . start ) . write ( & mut encoded_offer) . unwrap ( ) ;
1985+ BigSize ( 32 ) . write ( & mut encoded_offer) . unwrap ( ) ;
1986+ [ 42u8 ; 32 ] . write ( & mut encoded_offer) . unwrap ( ) ;
1987+
1988+ match Offer :: try_from ( encoded_offer) {
1989+ Ok ( _) => panic ! ( "expected error" ) ,
1990+ Err ( e) => assert_eq ! ( e, Bolt12ParseError :: Decode ( DecodeError :: UnknownRequiredFeature ) ) ,
1991+ }
1992+ }
1993+
19651994 #[ test]
19661995 fn fails_parsing_offer_with_out_of_range_tlv_records ( ) {
19671996 let offer = OfferBuilder :: new ( pubkey ( 42 ) ) . build ( ) . unwrap ( ) ;
@@ -1976,6 +2005,19 @@ mod tests {
19762005 Ok ( _) => panic ! ( "expected error" ) ,
19772006 Err ( e) => assert_eq ! ( e, Bolt12ParseError :: Decode ( DecodeError :: InvalidValue ) ) ,
19782007 }
2008+
2009+ let offer = OfferBuilder :: new ( pubkey ( 42 ) ) . build ( ) . unwrap ( ) ;
2010+
2011+ let mut encoded_offer = Vec :: new ( ) ;
2012+ offer. write ( & mut encoded_offer) . unwrap ( ) ;
2013+ BigSize ( EXPERIMENTAL_OFFER_TYPES . end ) . write ( & mut encoded_offer) . unwrap ( ) ;
2014+ BigSize ( 32 ) . write ( & mut encoded_offer) . unwrap ( ) ;
2015+ [ 42u8 ; 32 ] . write ( & mut encoded_offer) . unwrap ( ) ;
2016+
2017+ match Offer :: try_from ( encoded_offer) {
2018+ Ok ( _) => panic ! ( "expected error" ) ,
2019+ Err ( e) => assert_eq ! ( e, Bolt12ParseError :: Decode ( DecodeError :: InvalidValue ) ) ,
2020+ }
19792021 }
19802022}
19812023
0 commit comments