Skip to content

Commit b813339

Browse files
CopilotByron
andcommitted
Implement Display trait for reference name types
Co-authored-by: Byron <[email protected]>
1 parent 9c686d9 commit b813339

File tree

4 files changed

+95
-0
lines changed

4 files changed

+95
-0
lines changed

gix-ref/src/display_tests.rs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
//! Tests for Display implementations
2+
3+
#[cfg(test)]
4+
mod display_tests {
5+
use crate::{FullName, PartialName};
6+
use std::convert::TryFrom;
7+
8+
#[test]
9+
fn test_full_name_display() {
10+
let full_name = FullName::try_from("refs/heads/main").unwrap();
11+
assert_eq!(format!("{}", full_name), "refs/heads/main");
12+
assert_eq!(full_name.to_string(), "refs/heads/main");
13+
}
14+
15+
#[test]
16+
fn test_full_name_ref_display() {
17+
let full_name = FullName::try_from("refs/heads/main").unwrap();
18+
let full_name_ref = full_name.as_ref();
19+
assert_eq!(format!("{}", full_name_ref), "refs/heads/main");
20+
assert_eq!(full_name_ref.to_string(), "refs/heads/main");
21+
}
22+
23+
#[test]
24+
fn test_partial_name_display() {
25+
let partial_name = PartialName::try_from("heads/main").unwrap();
26+
assert_eq!(format!("{}", partial_name), "heads/main");
27+
assert_eq!(partial_name.to_string(), "heads/main");
28+
}
29+
30+
#[test]
31+
fn test_partial_name_ref_display() {
32+
let partial_name = PartialName::try_from("heads/main").unwrap();
33+
let partial_name_ref = partial_name.as_ref();
34+
assert_eq!(format!("{}", partial_name_ref), "heads/main");
35+
assert_eq!(partial_name_ref.to_string(), "heads/main");
36+
}
37+
38+
#[test]
39+
fn test_display_with_various_ref_types() {
40+
// Test various types of refs
41+
let refs = vec![
42+
"refs/heads/main",
43+
"refs/remotes/origin/main",
44+
"refs/tags/v1.0.0",
45+
"HEAD",
46+
];
47+
48+
for ref_name in refs {
49+
let full_name = FullName::try_from(ref_name).unwrap();
50+
let full_name_ref = full_name.as_ref();
51+
52+
assert_eq!(format!("{}", full_name), ref_name);
53+
assert_eq!(format!("{}", full_name_ref), ref_name);
54+
}
55+
}
56+
57+
#[test]
58+
fn test_display_with_partial_names() {
59+
let partial_names = vec![
60+
"main",
61+
"heads/main",
62+
"remotes/origin/main",
63+
"tags/v1.0.0",
64+
];
65+
66+
for partial_name_str in partial_names {
67+
let partial_name = PartialName::try_from(partial_name_str).unwrap();
68+
let partial_name_ref = partial_name.as_ref();
69+
70+
assert_eq!(format!("{}", partial_name), partial_name_str);
71+
assert_eq!(format!("{}", partial_name_ref), partial_name_str);
72+
}
73+
}
74+
}

gix-ref/src/fullname.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ impl std::fmt::Display for FullName {
7373
}
7474
}
7575

76+
impl std::fmt::Display for FullNameRef {
77+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
78+
std::fmt::Display::fmt(&self.0, f)
79+
}
80+
}
81+
7682
impl FullNameRef {
7783
/// Interpret this fully qualified reference name as partial name.
7884
pub fn as_partial_name(&self) -> &PartialNameRef {

gix-ref/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,3 +213,6 @@ pub enum TargetRef<'a> {
213213
/// A ref that points to another reference by its validated name, adding a level of indirection.
214214
Symbolic(&'a FullNameRef),
215215
}
216+
217+
#[cfg(test)]
218+
mod display_tests;

gix-ref/src/name.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,18 @@ impl convert::TryFrom<BString> for PartialName {
266266
}
267267
}
268268

269+
impl std::fmt::Display for PartialName {
270+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
271+
std::fmt::Display::fmt(&self.0, f)
272+
}
273+
}
274+
275+
impl std::fmt::Display for PartialNameRef {
276+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
277+
std::fmt::Display::fmt(&self.0, f)
278+
}
279+
}
280+
269281
/// Note that this method is disagreeing with `gix_validate` as it allows dashes '-' for some reason.
270282
/// Since partial names cannot be created with dashes inside we adjusted this as it's probably unintended or git creates pseudo-refs
271283
/// which wouldn't pass its safety checks.

0 commit comments

Comments
 (0)