use rdftk_iri::{Name, QName};
use std::str::FromStr;

#[test]
fn new_qname() {
    let qname = QName::new_unqualified(Name::new_unchecked("foo")).unwrap();
    assert_eq!(qname.to_string(), ":foo".to_string());
    assert_eq!(qname.as_curie(), "[:foo]".to_string());

    let qname = QName::new(Name::new_unchecked("rdf"), Name::new_unchecked("foo")).unwrap();
    assert_eq!(qname.to_string(), "rdf:foo".to_string());
    assert_eq!(qname.as_curie(), "[rdf:foo]".to_string());
}

#[test]
fn qname_from_str() {
    let qname = QName::from_str("foo");
    assert!(qname.is_ok());
    assert_eq!(qname.unwrap().to_string(), ":foo".to_string());

    let qname = QName::from_str("rdf:foo");
    assert!(qname.is_ok());
    assert_eq!(qname.unwrap().to_string(), "rdf:foo".to_string());
}

#[test]
fn qname_from_str_fail() {
    let qname = QName::from_str("");
    assert!(qname.is_err());

    let qname = QName::from_str("rdf foo");
    assert!(qname.is_err());

    let qname = QName::from_str(":foo");
    assert!(qname.is_err());

    let qname = QName::from_str("rdf::foo:bar");
    assert!(qname.is_err());
}