@@ -189,3 +189,64 @@ fn is_req(value: &str) -> bool {
189
189
|| value. contains ( 'x' )
190
190
|| value. contains ( 'X' )
191
191
}
192
+
193
+ #[ cfg( test) ]
194
+ mod test {
195
+ use super :: * ;
196
+ use snapbox:: str;
197
+
198
+ #[ test]
199
+ fn parse_success ( ) {
200
+ let cases = & [
201
+ // Valid pre-release
202
+ ( "1.43.0-beta.1" , str![ "1.43.0-beta.1" ] ) ,
203
+ ] ;
204
+ for ( input, expected) in cases {
205
+ let actual: Result < PartialVersion , _ > = input. parse ( ) ;
206
+ let actual = match actual {
207
+ Ok ( result) => result. to_string ( ) ,
208
+ Err ( err) => format ! ( "didn't pass: {err}" ) ,
209
+ } ;
210
+ snapbox:: assert_eq ( expected. clone ( ) , actual) ;
211
+ }
212
+ }
213
+
214
+ #[ test]
215
+ fn parse_errors ( ) {
216
+ let cases = & [
217
+ // Disallow caret
218
+ (
219
+ "^1.43" ,
220
+ str![ [ r#"unexpected version requirement, expected a version like "1.32""# ] ] ,
221
+ ) ,
222
+ // Bad pre-release
223
+ (
224
+ "1.43-beta.1" ,
225
+ str![ [ r#"unexpected prerelease field, expected a version like "1.32""# ] ] ,
226
+ ) ,
227
+ // Weird wildcard
228
+ (
229
+ "x" ,
230
+ str![ [ r#"unexpected version requirement, expected a version like "1.32""# ] ] ,
231
+ ) ,
232
+ (
233
+ "1.x" ,
234
+ str![ [ r#"unexpected version requirement, expected a version like "1.32""# ] ] ,
235
+ ) ,
236
+ (
237
+ "1.1.x" ,
238
+ str![ [ r#"unexpected version requirement, expected a version like "1.32""# ] ] ,
239
+ ) ,
240
+ // Non-sense
241
+ ( "foodaddle" , str![ [ r#"expected a version like "1.32""# ] ] ) ,
242
+ ] ;
243
+ for ( input, expected) in cases {
244
+ let actual: Result < PartialVersion , _ > = input. parse ( ) ;
245
+ let actual = match actual {
246
+ Ok ( result) => format ! ( "didn't fail: {result:?}" ) ,
247
+ Err ( err) => err. to_string ( ) ,
248
+ } ;
249
+ snapbox:: assert_eq ( expected. clone ( ) , actual) ;
250
+ }
251
+ }
252
+ }
0 commit comments