mod config {
use std::collections::VecDeque;
use std::process::Command;
use rust_apt::config::Config;
use rust_apt::new_cache;
#[test]
fn clear() {
let config = Config::new_clear();
config.clear_all();
let empty_config = config.find("APT::Architecture", "");
assert!(!config.contains("APT::Architecture"));
assert!(empty_config.is_empty());
config.reset();
let config_dump = config.find("APT::Architecture", "");
assert!(config.contains("APT::Architecture"));
assert!(!config_dump.is_empty());
println!("{}", config.dump());
}
#[test]
fn empty_cache() {
let config = Config::new();
config.clear("Dir::State");
config.set("Dir::State::status", "");
let cache = new_cache!(&["tests/files/cache/Packages"]).unwrap();
dbg!(cache.iter().count());
println!("{}", config.dump())
}
#[test]
fn find_and_set() {
let config = Config::new_clear();
let key = "rust_apt::NotExist";
assert_eq!(config.find(key, "None"), "None");
config.set(key, "Exists!");
assert_eq!(config.find(key, "None"), "Exists!");
assert!(!config.bool("APT::Install-Suggests", true));
assert_eq!(config.int("APT::Install-Suggests", 20), 0);
assert!(
config
.file("Dir::Cache::pkgcache", "")
.split('/')
.any(|x| x == "pkgcache.bin")
);
assert_eq!(
config.dir("Dir::Etc::sourceparts", ""),
"/etc/apt/sources.list.d/"
);
assert!(config.find_vector("rust_apt::aptlist").is_empty());
let apt_list = vec!["this", "is", "my", "apt", "list"];
config.set_vector("rust_apt::aptlist", &apt_list);
let apt_vector = config.find_vector("rust_apt::aptlist");
assert_eq!(apt_list, apt_vector);
config.clear_value("rust_apt::aptlist", "my");
assert_eq!(
config.find_vector("rust_apt::aptlist"),
vec!["this", "is", "apt", "list"]
);
config.clear("rust_apt::aptlist");
assert!(config.find_vector("rust_apt::aptlist").is_empty());
}
#[test]
fn get_architectures() {
let config = Config::new();
let output = dbg!(
String::from_utf8(
Command::new("dpkg")
.arg("--print-architecture")
.output()
.unwrap()
.stdout,
)
.unwrap()
);
let arches = dbg!(config.get_architectures());
assert!(arches.contains(&output.strip_suffix('\n').unwrap().to_string()));
}
#[test]
fn config_tree() {
let config = Config::new();
let Some(tree) = config.root_tree() else {
return;
};
let mut stack = VecDeque::new();
stack.push_back((tree, 0));
while let Some((node, indent)) = stack.pop_back() {
let indent_str = " ".repeat(indent);
if let Some(item) = node.sibling() {
stack.push_back((item, indent));
}
if let Some(item) = node.child() {
stack.push_back((item, indent + 2));
}
if let Some(tag) = node.tag() {
if !tag.is_empty() {
println!("{}Tag: {}", indent_str, tag);
}
}
if let Some(value) = node.value() {
if !value.is_empty() {
println!("{}Value: {}", indent_str, value);
}
}
}
}
}