in util/label/label.rs [224:279]
fn test_repository_name_parsing() -> Result<()> {
assert_eq!(analyze("@repo//:foo")?.repository_name, Some("repo"));
assert_eq!(analyze("@//:foo")?.repository_name, None);
assert_eq!(analyze("//:foo")?.repository_name, None);
assert_eq!(analyze(":foo")?.repository_name, None);
assert_eq!(analyze("@repo//foo/bar")?.repository_name, Some("repo"));
assert_eq!(analyze("@//foo/bar")?.repository_name, None);
assert_eq!(analyze("//foo/bar")?.repository_name, None);
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")?.repository_name, Some("repo"));
assert_eq!(analyze("@//foo")?.repository_name, None);
assert_eq!(analyze("//foo")?.repository_name, None);
assert_eq!(
analyze("foo"),
Err(LabelError(
"foo must be a legal label; relative packages are not permitted.".to_string()
))
);
assert_eq!(
analyze("@foo:bar"),
Err(LabelError(
"@foo:bar must be a legal label; labels with repository must contain //."
.to_string()
))
);
assert_eq!(
analyze("@AZab0123456789_-.//:foo")?.repository_name,
Some("AZab0123456789_-.")
);
assert_eq!(
analyze("@42//:baz"),
Err(LabelError(
"@42//:baz must be a legal label; workspace names must \
start with a letter."
.to_string()
))
);
assert_eq!(
analyze("@foo#//:baz"),
Err(LabelError(
"@foo#//:baz must be a legal label; workspace names \
may contain only A-Z, a-z, 0-9, '-', '_', and '.'."
.to_string()
))
);
Ok(())
}