1
1
use colored:: Colorize ;
2
2
use rayon:: iter:: { IntoParallelRefIterator , ParallelIterator } ;
3
- use std:: process;
3
+ use std:: { io :: stderr , process} ;
4
4
use subprocess:: Exec ;
5
5
6
6
/// Runs given command using system shell
@@ -27,17 +27,27 @@ pub fn validate_var_name(name: &str) -> Result<(), String> {
27
27
28
28
/// Print info about error
29
29
pub fn error ( text : & str ) {
30
- eprintln ! ( "{} {}" , "error:" . red ( ) , text ) ;
30
+ print_error ( text , & mut stderr ( ) ) ;
31
31
}
32
32
33
33
/// Print info about warning
34
34
pub fn warning ( text : & str , exit_on_warning : bool ) {
35
- eprintln ! ( "{} {}" , "warning:" . yellow ( ) , text ) ;
35
+ print_warning ( text , & mut stderr ( ) ) ;
36
36
if exit_on_warning {
37
37
process:: exit ( 1 ) ;
38
38
}
39
39
}
40
40
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
+
41
51
/// Returns vector of string that are similar by threshold to given string in given vector
42
52
pub fn find_similar_string ( string : String , strings : Vec < String > , threshold : f64 ) -> Vec < String > {
43
53
strings. par_iter ( )
@@ -115,4 +125,58 @@ mod tests {
115
125
assert ! ( result. contains( & "TSET" . to_string( ) ) ) ;
116
126
assert ! ( !result. contains( & "NONE" . to_string( ) ) ) ;
117
127
}
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
+ }
118
182
}
0 commit comments