mirror of
https://github.com/Byron/gitoxide
synced 2025-10-06 01:52:40 +02:00
Implement Display trait for reference name types
Co-authored-by: Byron <63622+Byron@users.noreply.github.com>
This commit is contained in:
committed by
Sebastian Thiel
parent
9c686d9bc5
commit
b813339291
74
gix-ref/src/display_tests.rs
Normal file
74
gix-ref/src/display_tests.rs
Normal file
@@ -0,0 +1,74 @@
|
||||
//! Tests for Display implementations
|
||||
|
||||
#[cfg(test)]
|
||||
mod display_tests {
|
||||
use crate::{FullName, PartialName};
|
||||
use std::convert::TryFrom;
|
||||
|
||||
#[test]
|
||||
fn test_full_name_display() {
|
||||
let full_name = FullName::try_from("refs/heads/main").unwrap();
|
||||
assert_eq!(format!("{}", full_name), "refs/heads/main");
|
||||
assert_eq!(full_name.to_string(), "refs/heads/main");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_full_name_ref_display() {
|
||||
let full_name = FullName::try_from("refs/heads/main").unwrap();
|
||||
let full_name_ref = full_name.as_ref();
|
||||
assert_eq!(format!("{}", full_name_ref), "refs/heads/main");
|
||||
assert_eq!(full_name_ref.to_string(), "refs/heads/main");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_partial_name_display() {
|
||||
let partial_name = PartialName::try_from("heads/main").unwrap();
|
||||
assert_eq!(format!("{}", partial_name), "heads/main");
|
||||
assert_eq!(partial_name.to_string(), "heads/main");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_partial_name_ref_display() {
|
||||
let partial_name = PartialName::try_from("heads/main").unwrap();
|
||||
let partial_name_ref = partial_name.as_ref();
|
||||
assert_eq!(format!("{}", partial_name_ref), "heads/main");
|
||||
assert_eq!(partial_name_ref.to_string(), "heads/main");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_display_with_various_ref_types() {
|
||||
// Test various types of refs
|
||||
let refs = vec![
|
||||
"refs/heads/main",
|
||||
"refs/remotes/origin/main",
|
||||
"refs/tags/v1.0.0",
|
||||
"HEAD",
|
||||
];
|
||||
|
||||
for ref_name in refs {
|
||||
let full_name = FullName::try_from(ref_name).unwrap();
|
||||
let full_name_ref = full_name.as_ref();
|
||||
|
||||
assert_eq!(format!("{}", full_name), ref_name);
|
||||
assert_eq!(format!("{}", full_name_ref), ref_name);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_display_with_partial_names() {
|
||||
let partial_names = vec![
|
||||
"main",
|
||||
"heads/main",
|
||||
"remotes/origin/main",
|
||||
"tags/v1.0.0",
|
||||
];
|
||||
|
||||
for partial_name_str in partial_names {
|
||||
let partial_name = PartialName::try_from(partial_name_str).unwrap();
|
||||
let partial_name_ref = partial_name.as_ref();
|
||||
|
||||
assert_eq!(format!("{}", partial_name), partial_name_str);
|
||||
assert_eq!(format!("{}", partial_name_ref), partial_name_str);
|
||||
}
|
||||
}
|
||||
}
|
@@ -73,6 +73,12 @@ impl std::fmt::Display for FullName {
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Display for FullNameRef {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
std::fmt::Display::fmt(&self.0, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl FullNameRef {
|
||||
/// Interpret this fully qualified reference name as partial name.
|
||||
pub fn as_partial_name(&self) -> &PartialNameRef {
|
||||
|
@@ -213,3 +213,6 @@ pub enum TargetRef<'a> {
|
||||
/// A ref that points to another reference by its validated name, adding a level of indirection.
|
||||
Symbolic(&'a FullNameRef),
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod display_tests;
|
||||
|
@@ -266,6 +266,18 @@ impl convert::TryFrom<BString> for PartialName {
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Display for PartialName {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
std::fmt::Display::fmt(&self.0, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Display for PartialNameRef {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
std::fmt::Display::fmt(&self.0, f)
|
||||
}
|
||||
}
|
||||
|
||||
/// Note that this method is disagreeing with `gix_validate` as it allows dashes '-' for some reason.
|
||||
/// Since partial names cannot be created with dashes inside we adjusted this as it's probably unintended or git creates pseudo-refs
|
||||
/// which wouldn't pass its safety checks.
|
||||
|
Reference in New Issue
Block a user