@@ -2166,6 +2166,61 @@ mod tests {
2166
2166
}
2167
2167
}
2168
2168
2169
+ #[ cfg( test) ]
2170
+ mod currency_code_tests {
2171
+ use super :: CurrencyCode ;
2172
+
2173
+ #[ test]
2174
+ fn creates_valid_currency_codes ( ) {
2175
+ let usd = CurrencyCode :: new ( * b"USD" ) . unwrap ( ) ;
2176
+ assert_eq ! ( usd. as_str( ) , "USD" ) ;
2177
+ assert_eq ! ( usd. as_bytes( ) , b"USD" ) ;
2178
+
2179
+ let eur = CurrencyCode :: new ( * b"EUR" ) . unwrap ( ) ;
2180
+ assert_eq ! ( eur. as_str( ) , "EUR" ) ;
2181
+ assert_eq ! ( eur. as_bytes( ) , b"EUR" ) ;
2182
+ }
2183
+
2184
+ #[ test]
2185
+ fn rejects_invalid_utf8 ( ) {
2186
+ let invalid_utf8 = [ 0xFF , 0xFE , 0xFD ] ;
2187
+ assert ! ( CurrencyCode :: new( invalid_utf8) . is_err( ) ) ;
2188
+ }
2189
+
2190
+ #[ test]
2191
+ fn rejects_lowercase_letters ( ) {
2192
+ assert ! ( CurrencyCode :: new( * b"usd" ) . is_err( ) ) ;
2193
+ assert ! ( CurrencyCode :: new( * b"Eur" ) . is_err( ) ) ;
2194
+ }
2195
+
2196
+ #[ test]
2197
+ fn rejects_non_letters ( ) {
2198
+ assert ! ( CurrencyCode :: new( * b"US1" ) . is_err( ) ) ;
2199
+ assert ! ( CurrencyCode :: new( * b"U$D" ) . is_err( ) ) ;
2200
+ }
2201
+
2202
+ #[ test]
2203
+ fn from_str_validates_length ( ) {
2204
+ assert ! ( "US" . parse:: <CurrencyCode >( ) . is_err( ) ) ;
2205
+ assert ! ( "USDA" . parse:: <CurrencyCode >( ) . is_err( ) ) ;
2206
+
2207
+ assert ! ( "USD" . parse:: <CurrencyCode >( ) . is_ok( ) ) ;
2208
+ }
2209
+
2210
+ #[ test]
2211
+ fn works_with_real_currency_codes ( ) {
2212
+ let codes = [ "USD" , "EUR" , "GBP" , "JPY" , "CNY" ] ;
2213
+
2214
+ for code_str in & codes {
2215
+ let code1 = CurrencyCode :: new ( code_str. as_bytes ( ) . try_into ( ) . unwrap ( ) ) . unwrap ( ) ;
2216
+ let code2 = code_str. parse :: < CurrencyCode > ( ) . unwrap ( ) ;
2217
+
2218
+ assert_eq ! ( code1, code2) ;
2219
+ assert_eq ! ( code1. as_str( ) , * code_str) ;
2220
+ }
2221
+ }
2222
+ }
2223
+
2169
2224
#[ cfg( test) ]
2170
2225
mod bolt12_tests {
2171
2226
use super :: { Bolt12ParseError , Bolt12SemanticError , Offer } ;
0 commit comments