| @@ -91,10 +91,12 @@ fn try_parse_opts(spec: &str, options: Options) -> Result<Recorder, spec::parse: · 90 unmodified lines |
| 91 | fn empty_specs_are_valid() { | 91 | fn empty_specs_are_valid() { |
| 92 | // they should of course be invalid for the delegate. CLIs may pre-process the input as well if they wish | 92 | // they should of course be invalid for the delegate. CLIs may pre-process the input as well if they wish |
| 93 | // but git itself doesn't do that. | 93 | // but git itself doesn't do that. |
| 94 | for spec in ["", " ", "\n\t"] { | 94 | for spec in [" ", "\n\t"] { |
| 95 | let rec = parse(spec); | 95 | let rec = parse(spec); |
| 96 | assert_eq!(rec.calls, 1); | 96 | assert_eq!(rec.calls, 1); |
| 97 | } | 97 | } |
| | 98 | let rec = parse(""); |
| | 99 | assert_eq!(rec.calls, 0, "but we do not bother to call the delegate with nothing"); |
| 98 | } | 100 | } |
| 99 | | 101 | |
| 100 | #[test] | 102 | #[test] |
| @@ -227,7 +229,7 @@ mod range { · 126 unmodified lines |
| 227 | .unwrap_err(); | 229 | .unwrap_err(); |
| 228 | assert!( | 230 | assert!( |
| 229 | matches!(err, spec::parse::Error::Delegate), | 231 | matches!(err, spec::parse::Error::Delegate), |
| 230 | "Delegates can refuse spec kind changes to abort parsing early" | 232 | "Delegates can refuse spec kind changes to abort parsing early in case they want single-specs only" |
| 231 | ); | 233 | ); |
| 232 | } | 234 | } |
| 233 | | 235 | |
| @@ -236,6 +238,8 @@ mod range { · 2 unmodified lines |
| 236 | let rec = parse("^HEAD"); | 238 | let rec = parse("^HEAD"); |
| 237 | assert_eq!(rec.kind.unwrap(), spec::Kind::Range); | 239 | assert_eq!(rec.kind.unwrap(), spec::Kind::Range); |
| 238 | assert_eq!(rec.resolve_ref_input.unwrap(), "HEAD"); | 240 | assert_eq!(rec.resolve_ref_input.unwrap(), "HEAD"); |
| | 241 | assert_eq!(rec.prefix, None); |
| | 242 | assert_eq!(rec.calls, 2); |
| 239 | } | 243 | } |
| 240 | | 244 | |
| 241 | #[test] | 245 | #[test] |
| @@ -243,6 +247,8 @@ mod range { · 1 unmodified line |
| 243 | let rec = parse("HEAD.."); | 247 | let rec = parse("HEAD.."); |
| 244 | assert_eq!(rec.kind.unwrap(), spec::Kind::Range); | 248 | assert_eq!(rec.kind.unwrap(), spec::Kind::Range); |
| 245 | assert_eq!(rec.resolve_ref_input.unwrap(), "HEAD"); | 249 | assert_eq!(rec.resolve_ref_input.unwrap(), "HEAD"); |
| | 250 | assert_eq!(rec.prefix, None); |
| | 251 | assert_eq!(rec.calls, 2); |
| 246 | } | 252 | } |
| 247 | | 253 | |
| 248 | #[test] | 254 | #[test] |
| @@ -250,6 +256,8 @@ mod range { · 1 unmodified line |
| 250 | let rec = parse("HEAD..."); | 256 | let rec = parse("HEAD..."); |
| 251 | assert_eq!(rec.kind.unwrap(), spec::Kind::MergeBase); | 257 | assert_eq!(rec.kind.unwrap(), spec::Kind::MergeBase); |
| 252 | assert_eq!(rec.resolve_ref_input.unwrap(), "HEAD"); | 258 | assert_eq!(rec.resolve_ref_input.unwrap(), "HEAD"); |
| | 259 | assert_eq!(rec.prefix, None); |
| | 260 | assert_eq!(rec.calls, 2); |
| 253 | } | 261 | } |
| 254 | | 262 | |
| 255 | #[test] | 263 | #[test] |
| @@ -258,6 +266,13 @@ mod range { · 2 unmodified lines |
| 258 | assert_eq!(rec.kind.unwrap(), spec::Kind::MergeBase); | 266 | assert_eq!(rec.kind.unwrap(), spec::Kind::MergeBase); |
| 259 | assert_eq!(rec.resolve_ref_input.unwrap(), "HEAD"); | 267 | assert_eq!(rec.resolve_ref_input.unwrap(), "HEAD"); |
| 260 | assert_eq!(rec.resolve_ref_input2.unwrap(), "HEAD"); | 268 | assert_eq!(rec.resolve_ref_input2.unwrap(), "HEAD"); |
| | 269 | assert_eq!(rec.calls, 3); |
| | 270 | |
| | 271 | let rec = parse("r1...abcd"); |
| | 272 | assert_eq!(rec.kind.unwrap(), spec::Kind::MergeBase); |
| | 273 | assert_eq!(rec.resolve_ref_input.unwrap(), "r1"); |
| | 274 | assert_eq!(rec.prefix, prefix("abcd").into()); |
| | 275 | assert_eq!(rec.calls, 3); |
| 261 | } | 276 | } |
| 262 | | 277 | |
| 263 | #[test] | 278 | #[test] |
| @@ -266,5 +281,28 @@ mod range { · 2 unmodified lines |
| 266 | assert_eq!(rec.kind.unwrap(), spec::Kind::Range); | 281 | assert_eq!(rec.kind.unwrap(), spec::Kind::Range); |
| 267 | assert_eq!(rec.resolve_ref_input.unwrap(), "HEAD"); | 282 | assert_eq!(rec.resolve_ref_input.unwrap(), "HEAD"); |
| 268 | assert_eq!(rec.resolve_ref_input2.unwrap(), "HEAD"); | 283 | assert_eq!(rec.resolve_ref_input2.unwrap(), "HEAD"); |
| | 284 | assert_eq!(rec.calls, 3); |
| | 285 | |
| | 286 | let rec = parse("r1..r2"); |
| | 287 | assert_eq!(rec.kind.unwrap(), spec::Kind::Range); |
| | 288 | assert_eq!(rec.resolve_ref_input.unwrap(), "r1"); |
| | 289 | assert_eq!(rec.resolve_ref_input2.unwrap(), "r2"); |
| | 290 | assert_eq!(rec.calls, 3); |
| | 291 | |
| | 292 | let rec = parse("abcd..1234"); |
| | 293 | assert_eq!(rec.kind.unwrap(), spec::Kind::Range); |
| | 294 | assert_eq!(rec.prefix, prefix("abcd").into()); |
| | 295 | assert_eq!(rec.prefix2, prefix("1234").into()); |
| | 296 | assert_eq!(rec.calls, 3); |
| | 297 | |
| | 298 | let rec = parse("r1..abcd"); |
| | 299 | assert_eq!(rec.kind.unwrap(), spec::Kind::Range); |
| | 300 | assert_eq!(rec.resolve_ref_input.unwrap(), "r1"); |
| | 301 | assert_eq!(rec.prefix, prefix("abcd").into()); |
| | 302 | assert_eq!(rec.calls, 3); |
| | 303 | } |
| | 304 | |
| | 305 | fn prefix(hex: &str) -> git_hash::Prefix { |
| | 306 | git_hash::Prefix::from_hex(hex).unwrap() |
| 269 | } | 307 | } |
| 270 | } | 308 | } |