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