in util/label/label.rs [281:371]
fn test_package_name_parsing() -> Result<()> {
assert_eq!(analyze("//:baz/qux")?.package_name, None);
assert_eq!(analyze(":baz/qux")?.package_name, None);
assert_eq!(analyze("//foo:baz/qux")?.package_name, Some("foo"));
assert_eq!(analyze("//foo/bar:baz/qux")?.package_name, Some("foo/bar"));
assert_eq!(
analyze("foo:baz/qux"),
Err(LabelError(
"foo:baz/qux must be a legal label; relative packages are not permitted."
.to_string()
))
);
assert_eq!(
analyze("foo/bar:baz/qux"),
Err(LabelError(
"foo/bar:baz/qux must be a legal label; relative packages are not permitted."
.to_string()
))
);
assert_eq!(analyze("//foo")?.package_name, Some("foo"));
assert_eq!(
analyze("foo//bar"),
Err(LabelError(
"foo//bar must be a legal label; '//' cannot appear in the middle of the label."
.to_string()
))
);
assert_eq!(
analyze("//foo//bar"),
Err(LabelError(
"//foo//bar must be a legal label; '//' cannot appear in the middle of the label."
.to_string()
))
);
assert_eq!(
analyze("foo//bar:baz"),
Err(LabelError(
"foo//bar:baz must be a legal label; '//' cannot appear in the middle of the label."
.to_string()
))
);
assert_eq!(
analyze("//foo//bar:baz"),
Err(LabelError(
"//foo//bar:baz must be a legal label; '//' cannot appear in the middle of the label."
.to_string()
))
);
assert_eq!(
analyze("//azAZ09/-. $()_:baz")?.package_name,
Some("azAZ09/-. $()_")
);
assert_eq!(
analyze("//bar#:baz"),
Err(LabelError(
"//bar#:baz must be a legal label; package names may contain only A-Z, \
a-z, 0-9, '/', '-', '.', ' ', '$', '(', ')' and '_'."
.to_string()
))
);
assert_eq!(
analyze("//bar/:baz"),
Err(LabelError(
"//bar/:baz must be a legal label; package names may not end with '/'.".to_string()
))
);
assert_eq!(analyze("@repo//foo/bar")?.package_name, Some("foo/bar"));
assert_eq!(analyze("//foo/bar")?.package_name, Some("foo/bar"));
assert_eq!(
analyze("foo/bar"),
Err(LabelError(
"foo/bar must be a legal label; relative packages are not permitted.".to_string()
))
);
assert_eq!(analyze("@repo//foo")?.package_name, Some("foo"));
assert_eq!(analyze("//foo")?.package_name, Some("foo"));
assert_eq!(
analyze("foo"),
Err(LabelError(
"foo must be a legal label; relative packages are not permitted.".to_string()
))
);
Ok(())
}