Skip to content

Commit 47c7e02

Browse files
committed
tests: write tests for error and warning functions
1 parent 0ce36ff commit 47c7e02

File tree

1 file changed

+67
-3
lines changed

1 file changed

+67
-3
lines changed

src/utils.rs

+67-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use colored::Colorize;
22
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
3-
use std::process;
3+
use std::{io::stderr, process};
44
use subprocess::Exec;
55

66
/// Runs given command using system shell
@@ -27,17 +27,27 @@ pub fn validate_var_name(name: &str) -> Result<(), String> {
2727

2828
/// Print info about error
2929
pub fn error(text: &str) {
30-
eprintln!("{} {}", "error:".red(), text);
30+
print_error(text, &mut stderr());
3131
}
3232

3333
/// Print info about warning
3434
pub fn warning(text: &str, exit_on_warning: bool) {
35-
eprintln!("{} {}", "warning:".yellow(), text);
35+
print_warning(text, &mut stderr());
3636
if exit_on_warning {
3737
process::exit(1);
3838
}
3939
}
4040

41+
/// Print warning to buffer
42+
fn print_warning(text: &str, writer: &mut dyn std::io::Write) {
43+
write!(writer, "{} {}", "warning:".yellow(), text).expect("can't write to buffer");
44+
}
45+
46+
/// Print error to buffer
47+
fn print_error(text: &str, writer: &mut dyn std::io::Write) {
48+
write!(writer, "{} {}", "error:".red(), text).expect("can't write to buffer");
49+
}
50+
4151
/// Returns vector of string that are similar by threshold to given string in given vector
4252
pub fn find_similar_string(string: String, strings: Vec<String>, threshold:f64) -> Vec<String> {
4353
strings.par_iter()
@@ -115,4 +125,58 @@ mod tests {
115125
assert!(result.contains(&"TSET".to_string()));
116126
assert!(!result.contains(&"NONE".to_string()));
117127
}
128+
129+
#[test]
130+
fn test_print_warning() {
131+
let mut buffer = Vec::new();
132+
print_warning("test warning message", &mut buffer);
133+
let result = String::from_utf8(buffer).unwrap();
134+
// Note: we can't test the exact color codes as they may vary by environment,
135+
// but we can test the basic message structure
136+
assert!(result.contains("warning:"));
137+
assert!(result.contains("test warning message"));
138+
}
139+
140+
#[test]
141+
fn test_print_error() {
142+
let mut buffer = Vec::new();
143+
print_error("test error message", &mut buffer);
144+
let result = String::from_utf8(buffer).unwrap();
145+
assert!(result.contains("error:"));
146+
assert!(result.contains("test error message"));
147+
}
148+
149+
#[test]
150+
fn test_print_warning_empty_message() {
151+
let mut buffer = Vec::new();
152+
print_warning("", &mut buffer);
153+
let result = String::from_utf8(buffer).unwrap();
154+
assert!(result.contains("warning:"));
155+
}
156+
157+
#[test]
158+
fn test_print_error_empty_message() {
159+
let mut buffer = Vec::new();
160+
print_error("", &mut buffer);
161+
let result = String::from_utf8(buffer).unwrap();
162+
assert!(result.contains("error:"));
163+
}
164+
165+
#[test]
166+
fn test_print_warning_special_characters() {
167+
let mut buffer = Vec::new();
168+
print_warning("test @#$%^&* message", &mut buffer);
169+
let result = String::from_utf8(buffer).unwrap();
170+
assert!(result.contains("warning:"));
171+
assert!(result.contains("test @#$%^&* message"));
172+
}
173+
174+
#[test]
175+
fn test_print_error_special_characters() {
176+
let mut buffer = Vec::new();
177+
print_error("test @#$%^&* message", &mut buffer);
178+
let result = String::from_utf8(buffer).unwrap();
179+
assert!(result.contains("error:"));
180+
assert!(result.contains("test @#$%^&* message"));
181+
}
118182
}

0 commit comments

Comments
 (0)