mod get { use crate::file::{cow_str, mutable::multi_value::init_config}; #[test] fn single_lines() -> crate::Result { let mut config = init_config(); let value = config.raw_values_mut("core", None, "a")?; assert_eq!(&*value.get()?, vec![cow_str("b100"), cow_str("d"), cow_str("f"),]); Ok(()) } #[test] fn multi_line() -> crate::Result { let mut config: git_config::File = r#"[core] a=b\"100" [core] a=d\"b "\c a=f\ a"# .parse()?; let mut values = config.raw_values_mut("core", None, "a")?; assert_eq!( &*values.get()?, vec![cow_str("b100"), cow_str("db c"), cow_str("f a"),] ); values.delete_all(); assert!(values.get().is_err()); Ok(()) }} mod access { use crate::file::mutable::multi_value::init_config; #[test] fn non_empty_sizes() -> crate::Result { let mut config = init_config(); assert_eq!(config.raw_values_mut("core", None, "a")?.len(), 3); assert!(!config.raw_values_mut("core", None, "a")?.is_empty()); Ok(()) }} mod set { use crate::file::{cow_str, mutable::multi_value::init_config}; #[test] fn values_are_escaped() -> crate::Result { for value in ["a b", " a b", "a b\t", ";c", "#c", "a\nb\n\tc"] { let mut config = init_config(); let mut values = config.raw_values_mut("core", None, "a")?; values.set_all(value); let config_str = config.to_string(); let config: git_config::File = config_str.parse()?; assert_eq!( config.raw_values("core", None, "a")?, vec![cow_str(value), cow_str(value), cow_str(value)], "{config_str:?}" ); } Ok(()) } #[test] fn single_at_start() -> crate::Result { let mut config = init_config(); let mut values = config.raw_values_mut("core", None, "a")?; values.set_string_at(0, "Hello"); assert_eq!( config.to_string(), "[core]\n a = Hello\n [core]\n a =d\n a= f\n" ); Ok(()) } #[test] fn single_at_end() -> crate::Result { let mut config = init_config(); let mut values = config.raw_values_mut("core", None, "a")?; values.set_string_at(2, "Hello"); assert_eq!( config.to_string(), "[core]\n a = b\"100\"\n [core]\n a =d\n a= Hello\n" ); Ok(()) } #[test] fn all() -> crate::Result { let mut config = init_config(); let mut values = config.raw_values_mut("core", None, "a")?; values.set_all("Hello"); assert_eq!( config.to_string(), "[core]\n a = Hello\n [core]\n a= Hello\n a =Hello\n" ); Ok(()) } #[test] fn all_empty() -> crate::Result { let mut config = init_config(); let mut values = config.raw_values_mut("core", None, "a")?; values.set_all(""); assert_eq!( config.to_string(), "[core]\n a = \n [core]\n a= \n a =\n" ); Ok(()) }} mod delete { use crate::file::mutable::multi_value::init_config; #[test] fn single_at_start_and_end() -> crate::Result { let mut config = init_config(); { let mut values = config.raw_values_mut("core", None, "a")?; values.delete(0); assert_eq!( config.to_string(), "[core]\n \n [core]\n a =d\n a= f\n", ); } let mut values = config.raw_values_mut("core", None, "a")?; values.delete(1); assert_eq!(config.to_string(), "[core]\n \n [core]\n a =d\n "); Ok(()) } #[test] fn all() -> crate::Result { let mut config = init_config(); let mut values = config.raw_values_mut("core", None, "a")?; values.delete_all(); values.delete_all(); assert!(values.get().is_err()); assert_eq!(config.to_string(), "[core]\n \n [core]\n \n "); Ok(()) }} fn init_config() -> git_config::File<'static> { r#"[core] a = b"100" [core] a =d a= f"# .parse() .unwrap()}
mod get {
use crate::file::{cow_str, mutable::multi_value::init_config};
#[test]
fn single_lines() -> crate::Result {
let mut config = init_config();
let value = config.raw_values_mut("core", None, "a")?;
assert_eq!(&*value.get()?, vec![cow_str("b100"), cow_str("d"), cow_str("f"),]);
Ok(())
}
#[test]
fn multi_line() -> crate::Result {
let mut config: git_config::File = r#"[core]
a=b\
"100"
[core]
a=d\
"b "\
c
a=f\
a"#
.parse()?;
let mut values = config.raw_values_mut("core", None, "a")?;
assert_eq!(
&*values.get()?,
vec![cow_str("b100"), cow_str("db c"), cow_str("f a"),]
);
values.delete_all();
assert!(values.get().is_err());
Ok(())
}
}
mod access {
use crate::file::mutable::multi_value::init_config;
#[test]
fn non_empty_sizes() -> crate::Result {
let mut config = init_config();
assert_eq!(config.raw_values_mut("core", None, "a")?.len(), 3);
assert!(!config.raw_values_mut("core", None, "a")?.is_empty());
Ok(())
}
}
mod set {
use crate::file::{cow_str, mutable::multi_value::init_config};
#[test]
fn values_are_escaped() -> crate::Result {
for value in ["a b", " a b", "a b\t", ";c", "#c", "a\nb\n\tc"] {
let mut config = init_config();
let mut values = config.raw_values_mut("core", None, "a")?;
values.set_all(value);
let config_str = config.to_string();
let config: git_config::File = config_str.parse()?;
assert_eq!(
config.raw_values("core", None, "a")?,
vec![cow_str(value), cow_str(value), cow_str(value)],
"{config_str:?}"
);
}
Ok(())
}
#[test]
fn single_at_start() -> crate::Result {
let mut config = init_config();
let mut values = config.raw_values_mut("core", None, "a")?;
values.set_string_at(0, "Hello");
assert_eq!(
config.to_string(),
"[core]\n a = Hello\n [core]\n a =d\n a= f\n"
);
Ok(())
}
#[test]
fn single_at_end() -> crate::Result {
let mut config = init_config();
let mut values = config.raw_values_mut("core", None, "a")?;
values.set_string_at(2, "Hello");
assert_eq!(
config.to_string(),
"[core]\n a = b\"100\"\n [core]\n a =d\n a= Hello\n"
);
Ok(())
}
#[test]
fn all() -> crate::Result {
let mut config = init_config();
let mut values = config.raw_values_mut("core", None, "a")?;
values.set_all("Hello");
assert_eq!(
config.to_string(),
"[core]\n a = Hello\n [core]\n a= Hello\n a =Hello\n"
);
Ok(())
}
#[test]
fn all_empty() -> crate::Result {
let mut config = init_config();
let mut values = config.raw_values_mut("core", None, "a")?;
values.set_all("");
assert_eq!(
config.to_string(),
"[core]\n a = \n [core]\n a= \n a =\n"
);
Ok(())
}
}
mod delete {
use crate::file::mutable::multi_value::init_config;
#[test]
fn single_at_start_and_end() -> crate::Result {
let mut config = init_config();
{
let mut values = config.raw_values_mut("core", None, "a")?;
values.delete(0);
assert_eq!(
config.to_string(),
"[core]\n \n [core]\n a =d\n a= f\n",
);
}
let mut values = config.raw_values_mut("core", None, "a")?;
values.delete(1);
assert_eq!(config.to_string(), "[core]\n \n [core]\n a =d\n ");
Ok(())
}
#[test]
fn all() -> crate::Result {
let mut config = init_config();
let mut values = config.raw_values_mut("core", None, "a")?;
values.delete_all();
values.delete_all();
assert!(values.get().is_err());
assert_eq!(config.to_string(), "[core]\n \n [core]\n \n ");
Ok(())
}
}
fn init_config() -> git_config::File<'static> {
r#"[core]
a = b"100"
[core]
a =d
a= f"#
.parse()
.unwrap()
}