use crate::config::{aliaser, deduplicator, nondeterminism, quoter};
pub fn purify_config(source: &str) -> String {
let mut result = source.to_string();
result = deduplicator::deduplicate_path_entries(&result);
result = nondeterminism::remove_nondeterminism(&result);
result = quoter::quote_variables(&result);
result = aliaser::consolidate_aliases(&result);
result
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_purify_config_deduplicates_paths() {
let source = r#"export PATH="/usr/local/bin:$PATH"
export PATH="/opt/homebrew/bin:$PATH"
export PATH="/usr/local/bin:$PATH""#;
let expected = r#"export PATH="/usr/local/bin:$PATH"
export PATH="/opt/homebrew/bin:$PATH""#;
let result = purify_config(source);
assert_eq!(result, expected);
}
#[test]
fn test_purify_config_preserves_other_content() {
let source = r#"# My .bashrc
export EDITOR="vim"
export PATH="/usr/local/bin:$PATH"
alias ll='ls -la'
export PATH="/usr/local/bin:$PATH"
echo "Welcome!""#;
let expected = r#"# My .bashrc
export EDITOR="vim"
export PATH="/usr/local/bin:$PATH"
alias ll='ls -la'
echo "Welcome!""#;
let result = purify_config(source);
assert_eq!(result, expected);
}
}