use std::convert::TryFrom;
use proptest::prelude::*;
use radicle_git_ext::ref_format::{refspec, Error};
use test_helpers::roundtrip;
use crate::git_ref_format::gen;
proptest! {
#[test]
fn valid(input in gen::with_glob()) {
assert_eq!(input.as_str(), refspec::PatternStr::try_from_str(&input).unwrap().as_str())
}
#[test]
fn refname_is_pattern(input in gen::valid()) {
assert_eq!(input.as_str(), refspec::PatternStr::try_from_str(&input).unwrap().as_str())
}
#[test]
fn no_more_than_one_star(input in gen::multi_glob()) {
assert_matches!(refspec::PatternString::try_from(input), Err(Error::Pattern))
}
#[test]
fn invalid_refname_is_invalid_pattern(input in gen::invalid()) {
assert_matches!(refspec::PatternString::try_from(input), Err(_))
}
#[test]
fn roundtrip_components(input in gen::with_glob()) {
assert_eq!(
input.as_str(),
refspec::PatternStr::try_from_str(&input)
.unwrap()
.components()
.collect::<Result<refspec::PatternString, _>>()
.unwrap()
.as_str()
)
}
#[test]
fn json(input in gen::with_glob()) {
roundtrip::json(refspec::PatternString::try_from(input).unwrap())
}
#[test]
fn json_value(input in gen::with_glob()) {
roundtrip::json_value(refspec::PatternString::try_from(input).unwrap())
}
#[test]
fn cbor(input in gen::with_glob()) {
roundtrip::cbor(refspec::PatternString::try_from(input).unwrap())
}
}